我正在尝试从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
似乎没有渲染数字(我尝试了几个用户代理字符串。)还有什么可能导致这个?我将来如何解决这个问题?
答案 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)