当前位置:  开发笔记 > 编程语言 > 正文

使用Beautiful Soup找到特定的课程

如何解决《使用BeautifulSoup找到特定的课程》经验,为你挑选了1个好方法。

我正在尝试使用Beautiful Soup从Zillow那里获取住房价格数据.

我按属性ID获取网页,例如.http://www.zillow.com/homes/for_sale/18429834_zpid/

当我尝试该find_all()功能时,我没有得到任何结果:

results = soup.find_all('div', attrs={"class":"home-summary-row"})

但是,如果我使用HTML并将其缩小到我想要的位,例如:


    
        
$1,342,144

我得到了2个结果,两个都是

在课堂上home-summary-row.所以,我的问题是,为什么我在搜索整页时没有得到任何结果?


工作范例:

from bs4 import BeautifulSoup
import requests

zpid = "18429834"
url = "http://www.zillow.com/homes/" + zpid + "_zpid/"
response = requests.get(url)
html = response.content
#html = '
$1,342,144
' soup = BeautifulSoup(html, "html5lib") results = soup.find_all('div', attrs={"class":"home-summary-row"}) print(results)

alecxe.. 5

您的HTML格式正确,在这种情况下,选择正确的解析器至关重要.在BeautifulSoup,目前有3个可用的HTML解析器,它们以不同的方式处理和处理损坏的HTML:

html.parser (内置,无需额外模块)

lxml(最快,需要lxml安装)

html5lib(最宽松,需要html5lib安装)

该之间差异的解析器文档页面详细描述了差异.在您的情况下,为了证明差异:

>>> from bs4 import BeautifulSoup
>>> import requests
>>> 
>>> zpid = "18429834"
>>> url = "http://www.zillow.com/homes/" + zpid + "_zpid/"
>>> response = requests.get(url)
>>> html = response.content
>>> 
>>> len(BeautifulSoup(html, "html5lib").find_all('div', attrs={"class":"home-summary-row"}))
0
>>> len(BeautifulSoup(html, "html.parser").find_all('div', attrs={"class":"home-summary-row"}))
3
>>> len(BeautifulSoup(html, "lxml").find_all('div', attrs={"class":"home-summary-row"}))
3

正如你所看到的,在你的情况下,无论是html.parserlxml做的工作,但html5lib没有.



1> alecxe..:

您的HTML格式正确,在这种情况下,选择正确的解析器至关重要.在BeautifulSoup,目前有3个可用的HTML解析器,它们以不同的方式处理和处理损坏的HTML:

html.parser (内置,无需额外模块)

lxml(最快,需要lxml安装)

html5lib(最宽松,需要html5lib安装)

该之间差异的解析器文档页面详细描述了差异.在您的情况下,为了证明差异:

>>> from bs4 import BeautifulSoup
>>> import requests
>>> 
>>> zpid = "18429834"
>>> url = "http://www.zillow.com/homes/" + zpid + "_zpid/"
>>> response = requests.get(url)
>>> html = response.content
>>> 
>>> len(BeautifulSoup(html, "html5lib").find_all('div', attrs={"class":"home-summary-row"}))
0
>>> len(BeautifulSoup(html, "html.parser").find_all('div', attrs={"class":"home-summary-row"}))
3
>>> len(BeautifulSoup(html, "lxml").find_all('div', attrs={"class":"home-summary-row"}))
3

正如你所看到的,在你的情况下,无论是html.parserlxml做的工作,但html5lib没有.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有