【问题标题】:Beautifulsoup findall() can't find all targetsBeautifulsoup findall() 找不到所有目标
【发布时间】:2017-01-20 16:51:03
【问题描述】:

我想在Redfin网站上抓取一些图片,但是FindAll()方法好像找不到所有父类为ImageCard的图片url。

代码如下:

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。希望有人能弄清楚!谢谢!!

【问题讨论】:

标签: python-2.7 beautifulsoup findall


【解决方案1】:

html 不包含这些额外照片的链接。这就是为什么你找不到它。它们是用 javascript 创建的,您的程序不处理 javascript。

但是,如果你仔细看,你会发现:

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

这是第一张图片的替代网址。

第二张图片的网址是:

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

第三个网址:

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

您可以利用它来获得您想要的东西(您可以根据第一张猜测额外图片的网址)。

【讨论】:

  • 非常感谢!但是我怎样才能捕捉到由 javascript 创建的内容呢?我还需要这个页面中的一些其他信息,但似乎它们都是由javascript创建的。
  • 我不是专家,但一种方法可能是使用某种带有网络驱动程序的浏览器,例如 realpython.com/blog/python/… 。它会处理 javascript 然后你从它中抓取。
  • 你可以试试mechanizepypi.python.org/pypi/mechanize
猜你喜欢
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2019-02-26
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多