所以我对网络抓取相当新.这个站点上有一个表,表的值由
Javascript控制.这些值将确定我的浏览器被告知从Javascript请求的未来值的地址.这些新页面具有JSON响应,脚本在我的浏览器中更新表.
所以我想用一个机制化方法构建一个类,该方法接收一个url并吐出body响应,然后第一次HTML,然后,身体响应将是JSON,用于剩余的迭代.
class urlMaintain2: def __init__(self): self.first_append = 0 self.response = '' def pageResponse(self,url): import mechanize import cookielib br = mechanize.browser() #Cookie Jar cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) #browser options br.set_handle_equiv(True) br.set_handle_gzip(False) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),max_time=1) br.addheaders = [('User-agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16'),('Accept-Encoding','gzip')] if self.first_append == 1: br.addheaders.append(['Accept',' application/json,text/javascript,*/*']) br.addheaders.append(['Content-Type','application/x-www-form-urlencoded; charset=UTF-8']) br.addheaders.append(['X-Requested-With','XMLHttpRequest']) br.addheaders.append(['User-agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16']) br.addheaders.append(['If-Modified-Since','Thu,1 Jan 1970 00:00:00 GMT']) cj.add_cookie_header(br) response = br.open(url) headers = response.info() if headers['content-encoding']=='gzip': import gzip gz = gzip.GzipFile(fileobj=response,mode='rb') html = gz.read() gz.close() headers["Content-type"] = "text/html; charset=utf-8" response.set_data(html) br.close() return response
从主页面html中提取数据后,self.first_append变为正数,因此br.addheaders.append不会在第一次运行,因为正文响应中没有JSON,但所有其他正文响应都是JSON .这是正确的方法吗?有更有效的方法吗?
从主页面html中提取数据后,但所有其他正文响应都是JSON .这是正确的方法吗?有更有效的方法吗?还有其他语言/库可以做得更好吗?
File "C:\Users\Donkey\My Documents\Aptana Studio Workspace\UrlMaintain2\src\UrlMaintain2.py",line 55,in pageResponse response = br.open(url) File "C:\Python27\lib\mechanize_mechanize.py",line 203,in open return self._mech_open(url,data,timeout=timeout) File "C:\Python27\lib\mechanize_mechanize.py",line 230,in _mech_open response = UserAgentBase.open(self,request,data) File "C:\Python27\lib\mechanize_opener.py",line 193,in open response = urlopen(self,req,data) File "C:\Python27\lib\mechanize_urllib2_fork.py",line 344,in _open '_open',req) File "C:\Python27\lib\mechanize_urllib2_fork.py",line 332,in _call_chain result = func(*args) File "C:\Python27\lib\mechanize_urllib2_fork.py",line 1142,in http_open return self.do_open(httplib.httpconnection,req) File "C:\Python27\lib\mechanize_urllib2_fork.py",line 1118,in do_open raise URLError(err) urllib2.URLError:
有点让我失去了,不知道为什么它会被生成但我需要在看到它之前进行大量的迭代.
解决方法
从
mechanize faq“机械化不提供任何JavaScript支持”,它然后详细说明您的选项(选择不是很好).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。