BeautifulSoup - 解析不返回预期的标签

时间:2017-08-11 17:36:59

标签: python html python-2.7 web-scraping beautifulsoup

我正在试图搜索一个有关房地产销售数据的网站。 但是,解析不会返回我期望的内容。 sales_containers的长度只是0。我知道,通过检查网站,我应该找到30个div。

代码:

from bs4 import BeautifulSoup

from requests import get

url = 'http://www.boligsiden.dk/salgspris/solgt/ejerlejlighed/1?periode.from=2007-01-01&periode.to=2017-12-31&displaytab=mergedtab&sort=salgsdato&salgstype=%5Bobject%20Object%5D&by=København,%20Frederiksberg'

response = get(url)
print(response.text)

html_soup = BeautifulSoup(response.text, 'html.parser')
type(html_soup)
html_soup.prettify()

sales_containers = html_soup.find_all('div', class_ = 'card card-item card-item--property-sale')
print(type(sales_containers))
print(len(sales_containers))

我在其他网站上使用了几乎相同的代码,工作得很好。 它可以是解析器吗?我尝试了lxml,结果相同。

希望你能帮忙!

1 个答案:

答案 0 :(得分:1)

该页面使用JavaScript呈现。 JavaScript向另一个URL发出请求,响应为JSON。您可以像这样获得JSON:

from requests import get

url ="http://www.boligsiden.dk/salespriceresult/getdata?salgspristype=solgt&periode.from=2007-01-01&periode.to=2017-12-31&displaytab=mergedtab&sort=salgsdato&salgstype=%5Bobject%20Object%5D&by=K%C3%B8benhavn%2C%20Frederiksberg&boligtype=ejerlejlighed&side=1"
response = get(url)
print(response.json())

您可以像任何JSON一样过滤结果:

print(response.json()['searchResult']['result']['propertySales'])

或者,您可以使用JavaScript呈现页面,查看我对Scraping Google Finance (BeautifulSoup)的回答了解详情。