Python web抓取暂停
我有以下代码:Python web抓取暂停,python,beautifulsoup,mechanize,Python,Beautifulsoup,Mechanize,我有以下代码: #!/usr/bin/env python from mechanize import Browser from BeautifulSoup import BeautifulSoup mech = Browser() mech.set_handle_robots(False) url = "http://storage.googleapis.com/patents/retro/2011/ad20111231-02.zip" page = mech.open(url) html
#!/usr/bin/env python
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
mech = Browser()
mech.set_handle_robots(False)
url = "http://storage.googleapis.com/patents/retro/2011/ad20111231-02.zip"
page = mech.open(url)
html = page.read()
soup = BeautifulSoup(html)
print soup.prettify()
尝试从网页下载.zip文件的非常简单的web scraper。当我运行这段代码时,请记住这个文件是4kb的,程序并没有完成,就好像它在一个无限的while循环中一样。我在这里做了什么?在完成
页面后,请尝试放置打印html
。read()
。你可能没有得到你认为你是,这听起来像是你收到了一个错误页面,而不是文件本身。我不确定您是否正确处理了该文件,您可能会在此处找到更好的方法:
顺便说一句,zip文件不是4KB,它大约是87MB,包含一个784MB的XML文件,您可以通过在浏览器中点击该URL并下载来确认。这可能不是一个无限循环,这是问题所在,只是加载需要很长时间
当数据是zip存档的XML时,您还试图以HTML的形式传递数据。如果(一旦您实际拥有该文件)将响应数据存储在
StringIO
中,您将能够在内存中解压()。然后,您需要确认您正在传递XML
soup = BeautifulSoup(html, 'xml')
这需要您这样做,但这将对您有利,因为它可能是Python下最快的XML解析器
最后一件事:
mech.set_handle_robots(False)
url = "http://storage.googleapis.com/patents/retro/2011/ad20111231-02.zip"
我的印象是谷歌设置了他们的
robots.txt
,尽可能不允许刮擦。如果您仍然无法下载该文件的副本,我建议您尝试Selenium
;它很像mechanize
,但控制着实际的浏览器,比如Chrome和Firefox,因此它将是一个合法的浏览器请求。您等待它完成多久了?我刚刚尝试了timeit
(python-mtimeit-n1-r1-s“import requests”r=requests.get()http://storage.googleapis.com/patents/retro/2011/ad20111231-02.zip)。内容“
),耗时113秒。你至少等了那么久吗?“当数据是XML时,你也在尝试以HTML的形式传递数据”-他似乎没有先解压,所以他实际上在尝试解析zip文件,这可能没有帮助。