2016-09-13 7 views
0

Я хочу сканировать некоторые фотографии на сайте Redfin, но, похоже, что метод FindAll() не может найти все URL-адрес изображения, родительским классом которого является ImageCard.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: используйте 'find_all()' вместо 'findAll()': https://www.crummy.com/software/BeautifulSoup/bs4/doc/#method-names –

ответ

1

В html не указаны ссылки на эти дополнительные фотографии. Вот почему вы не можете его найти. Они создаются с помощью javascript, и ваша программа не обрабатывает javascript.

Однако, если вы посмотрите внимательно, вы найдете это:

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

Это является альт URL для первого изображения.

URL, на 2-й картины:

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

гиперссылка на 3:

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/. Он обработает javascript, после чего вы очиститесь от него. –

+0

вы можете попробовать пакет 'mechanize' https://pypi.python.org/pypi/mechanize/ – Mourya