2016-09-13 7 views
0

Redfinのウェブサイトでいくつかの写真をクロールしたいのですが、FindAll()メソッドが親クラスがImageCardの画像URLをすべて見つけることができないようです。Beautifulsoup findall()がすべてのターゲットを見つけることができません

from bs4 import BeautifulSoup 
import urllib2 

def make_soup(url): 
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} 
req = urllib2.Request(url, headers=headers) 
thepage = urllib2.urlopen(req).read() 
soupdata = BeautifulSoup(thepage, "html.parser") 
return soupdata 

soup = make_soup("https://www.redfin.com/CA/San-Diego/5747-Adobe-Falls-Rd-92120/unit-A/home/5437025") 

imgcards = soup.findAll('div', {'class': 'ImageCard'}) 
for imgcard in imgcards: 
img = imgcard.findAll('img') 
print(img['src']) 

I want to download all the images in this slide on the web page

要素ツリーは次のとおりです: elements tree of webpage

私はスライドの最初の画像のdiv要素を見つけることができます

は、ここでは、コードです。誰かがそれを理解できることを願っています!ありがとう!!

+0

sidenote: 'findAll()'の代わりに 'find_all()'を使用してください:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#method-names –

答えて

1

htmlにはこれらの余分な写真へのリンクは含まれていません。それはあなたがそれを見つけることができない理由です。それらはjavascriptで作成されており、プログラムはjavascriptを処理しません。あなたは慎重に見れば

しかし、あなたはこれを見つける:最初の画像のalt URLです

<meta content="http://media.cdn-redfin.com/photo/48/bigphoto/983/160048983_0.jpg" name="twitter:image:src">

を。

第二画像のURLは次のとおりです。第三に

https://ssl.cdn-redfin.com/photo/48/bigphoto/983/160048983_1_0.jpg

URL:

https://ssl.cdn-redfin.com/photo/48/bigphoto/983/160048983_2_0.jpg

あなたが望む結果を得るためにこれを活用することができ

(あなたがURLを推測することができます最初の画像に基づく余分な画像)。

+0

ありがとうございます!しかし、どのように私はjavascriptによって作成されたコンテンツをキャッチできますか?このページには他にもいくつかの情報が必要ですが、それらはすべてjavascriptで作成されているようです。 – NewtonTree

+0

私はエキスパートではありませんが、https://realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/のようなWebdriverで何らかのブラウザを使用する方法もあります。それはjavascriptを処理し、それからあなたは掻き分けます。 –

+0

https://pypi.python.org/pypi/mechanize/の 'mechanize'パッケージを試すことができます – Mourya

関連する問題