浏览器中可见的项目未由scraper收集

时间:2014-03-04 16:48:23

标签: python beautifulsoup python-requests

我正在尝试从SumofUs网站收集数据;特别是请愿书上的签名数量。数据如下所示:<div class="percent">256,485 </div>(这是页面上此类的唯一项目。)

所以我尝试了这个:

import requests
from bs4 import BeautifulSoup

user_agent = {'User-agent': 'Mozilla/5.0'}
url = 'http://action.sumofus.org/a/nhs-patient-corporations/'

raw  = requests.get(url, headers = user_agent)
html = BeautifulSoup(raw.text)

# get the item we're seeking
number = html.find("div", class_="percent")
print number

似乎没有渲染数字(我尝试了几个用户代理字符串。)还有什么可能导致这个?我将来如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用Selenium:

from selenium import webdriver
from bs4 import BeautifulSoup

url = 'http://action.sumofus.org/a/nhs-patient-corporations/'
driver = webdriver.Firefox()
driver.get(url)
driver.set_window_position(0, 0)
driver.set_window_size(100000, 200000)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5) # wait to load

# then load BeautifulSoup with browsers content
html = BeautifulSoup(driver.page_source)
...

答案 1 :(得分:1)

在一般情况下,您应该使用无头浏览器。 Ghost.py是用python编写的,所以它可能是首先尝试的好选择。

在这个具体案例中,一项小小的研究表明,有一种更简单的方法。通过使用chrome中的网络选项卡,您可以看到该站点进行了ajax调用以填充该值。所以你可以直接得到它:

url = "http://action.sumofus.org/api/ak_action_count_by_action/?action=nhs-patient-corporations&additional="
number = int(requests.get(url).text)