Python 从以流式方式加载数据的网站中抓取webdata

Python 从以流式方式加载数据的网站中抓取webdata,python,web-scraping,mechanize,Python,Web Scraping,Mechanize,我正试图为我的一个项目使用python从FEC.gov网站上获取一些数据。通常我使用pythonmechanize和beautifulsoup来进行刮片 我能够解决大部分问题,但似乎无法回避问题。数据似乎被流式传输到表中,mechanize.Browser()停止侦听 问题是: 如果你访问。。。您将获得前500名姓氏以A开头的投稿人,并已向候选人P80003338捐款。。。但是,如果在该url处使用browser.open(),则只会得到前5行 我猜这是因为mechanize在执行.read()

我正试图为我的一个项目使用python从FEC.gov网站上获取一些数据。通常我使用python
mechanize
beautifulsoup
来进行刮片

我能够解决大部分问题,但似乎无法回避问题。数据似乎被流式传输到表中,mechanize.Browser()停止侦听

问题是: 如果你访问。。。您将获得前500名姓氏以A开头的投稿人,并已向候选人P80003338捐款。。。但是,如果在该url处使用browser.open(),则只会得到前5行

我猜这是因为mechanize在执行
.read()
之前没有让页面完全加载。我试着在
.open()
.read()
之间放置一个
时间。sleep(10)
,但这没有多大区别

我检查了一下,网站中没有javascript或AJAX(或者使用“查看源代码”时,至少没有可见的javascript或AJAX)。所以我认为这不是javascript的问题

有什么想法或建议吗?我可以使用硒或类似的东西,但这是我试图避免的


-将

而不是使用
机械化
,为什么不使用类似于
请求的东西?

为什么不使用类似于的html解析器呢

我试过了

>>> 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表达式

您可以解析该请求中的所有500个名称吗?当我尝试时,我只得到了前10行。我尝试了这个xpath
data.xpath('/html/body/table[2]/tr[502]/td[1]/a/text()')
结果是
name=['AHMED,ASHFAQ']
,我相信这是你提到的页面上的姓。哈。。。我想知道为什么这个解析器在
mechanize
提前转储时等待整个页面加载。。。但是它现在工作得很好,谢谢:)@JudoWill:如果你找到了答案,请告诉我。@JudoWill:如果你看看
chrome开发者工具下的
network选项卡
,第一个
GET
请求大约需要
44.28s
,这可能就是为什么mechanize无法呈现完整网页的原因。