我正在尝试使用 python 从 FEC.gov 网站上抓取一些数据,用于我的一个项目。通常我使用 python mechanize
和 beautifulsoup
做刮痧。
我已经能够弄清楚大部分问题,但似乎无法解决问题。似乎数据已流入表中,而 mechanize.Browser() 只是停止监听。
所以这里的问题是:
如果您访问 http://query.nictusa.com/cgi-bin/can_ind/2011_P80003338/1/A ...您会得到前 500 名姓氏以 A 开头的贡献者,并已向候选人 P80003338 捐款...但是,如果您在该 url 上使用 browser.open(),您得到的只是前 5 行。
我猜是因为 Mechanize 没有让页面在 .read()
之前完全加载被执行。我试着放一个 time.sleep(10)
.open()
之间和 .read()
但这并没有太大区别。
我检查了一下,网站中没有 javascript 或 AJAX(或者至少在您使用“查看源”时不可见)。所以我不认为它是一个 javascript 问题。
有什么想法或建议吗?我可以使用 Selenium 或类似的东西,但这是我试图避免的东西。
-将要
最佳答案
为什么不使用像 lxml 这样的 html 解析器与 xpath expressions .
我试过
>>> import lxml.html as lh
>>> data = lh.parse('http://query.nictusa.com/cgi-bin/can_ind/2011_P80003338/1/A')
>>> name = data.xpath('/html/body/table[2]/tr[5]/td[1]/a/text()')
>>> name
[' AABY, TRYGVE']
>>> name = data.xpath('//table[2]/*/td[1]/a/text()')
>>> len(name)
500
>>> name[499]
' AHMED, ASHFAQ'
>>>
同样,您可以创建
xpath expression
您选择与之合作。
关于python - 从以流式方式加载数据的网站抓取网络数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435512/