我正在使用mechanize / cookiejar / lxml来读取页面,它适用于某些页面,但不适用于其他页面.我遇到的错误是标题中的错误.我不能在这里发布页面,因为它们不是SFW,但有没有办法解决它?基本上,这就是我所做的:
import mechanize, cookielib
from lxml import etree
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(False)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 maverick Firefox/3.6.13')]
response = br.open('...')
tree = etree.parse(response) #error
之后我得到root并在文档中搜索我想要的值.显然iterparse不会崩溃它,但目前我假设它不仅仅是因为我没有用它处理任何东西.另外,我还没有弄清楚如何用它搜索这些东西.
我已经尝试禁用gzip并启用发送引用,但都没有解决问题.我也尝试将源代码保存到磁盘并从那里创建树只是为了它,我得到相同的错误.
编辑
我得到的响应似乎很好,使用print repr(响应),我建议在0xa4a160c得到一个< response_seek_wrapper,其包装对象=< stupid_gzip_wrapper在0xa49acec,其fp =< socket._fileobject对象位于0xa49c32c>>> .我还可以使用read()方法保存响应,并检查保存的.xml是否适用于浏览器和所有内容.
此外,在其中一个页面中,有一个& rsquo;这给了我以下错误:“lxml.etree.XMLSyntaxError:实体’rsquo’未定义,第17行,第7054行”.到目前为止,我已经用正则表达式替换它,但是有一个解析器可以处理这个吗?即使使用下面建议的lxml.html.parse,我也会遇到此错误.
关于正在突出显示的文件,我的意思是当我用gEdit打开它时它会这样做:http://img34.imageshack.us/img34/9574/gedit.jpg
解决方法:
使用lxml.html.parse为html它可以处理甚至非常破碎的html,你仍然得到一个错误呢?