python爬虫实战(关于工作中遇到的问题)
来源:互联网 发布:广电网络多少钱一年 编辑:程序博客网 时间:2024/05/22 14:58
主要是说一下大体的思路,在爬虫网站的时候遇到乐一些困难,最后解决。
需要爬虫的网站:http://www.jisilu.cn/
在这个网站中,需要对实时投资数据进行爬取,涉及到四个页面分级A、分级B、母基金、分级套利。
主要是采集表格中的数据:
但是四个页面有一些不同,分级套利界面需要登陆之后,才可以查看当前的数据,而且四个页面的数据都是js动态加载出来的,在前面对于分级A、分级B、母基金页面的时候,采用了python的spynner+pyqt4采集技术,BeautifulSoup解析所采集到的页面数据,这里还是主要说spynner技术采集页面,在采集分级套利界面的时候,页面返回信息提示,当前界面需要登陆才能访问到数据。
理所当然,我百度了网络上登陆所需要的代码和工具。网络抓包工具推荐使用Fiddler4工具。
大家可以在左页面获取到url,右边可以查看post或者get数据,还有header头信息和获取到的返回数据。
我当时在这边主要碰到的问题是,我之前所采用的技术spynner是如何设置cookies的,我当时阅读了spynner的源码,发现spynner中是存在设置cookies的方法:
源码:
@property def cookiesjar(self): """Compat.""" return self.manager.cookieJar() @property def cookiejar(self): """Compat.""" return self.cookiesjar def get_cookies(self): """Return string containing the current cookies in Mozilla format.""" return self.cookiesjar.mozillaCookies() def set_cookies(self, string_cookies): """Set cookies from a string with Mozilla-format cookies.""" return self.cookiesjar.setMozillaCookies(string_cookies)
主要是set_cookies方法,传入的值需要的格式没有具体说明,一直都搞不明白,直到现在还是不清楚,应该传入的格式,如果有知道的,希望能指点一下。
这个时候,使用urllib2实现了登陆,但是登陆完之后的js动态采集数据,urllib2是获取不到的,用spynner+pyqt4是获取的到js动态加载的数据,此时就产生了分歧,我当时的做法就是想把urllib2所获取到的cookies设置进spynner中,这样结合起来就可以实现登陆,获取动态数据,但是由于spynner设置cookies的困难,使我陷入了进退两难之间,也是这个想法让我陷入的死胡同。
说说我最后是如何采集到数据的,其实很简单,最后在采集的时候已经实现了登陆,那么就算是界面采用js动态加载,但是数据的获取离不开url请求,界面只是负责数据的展现,我在观察Fidder4中的链接,有一个链接是数据的获取,然后我采用这个链接直接获取数据源,这样就不用去获取整个界面的页面,然后解析。
附录
spynner采集代码:
import spynnerdef get_web_a(): url_a = "http://www.jisilu.cn/data/sfnew/#tlink_3" br_a = spynner.Browser() if br_a.load(url_a, load_timeout=30): print br_a.html soup = BeautifulSoup.BeautifulSoup(br_a.html) tags = soup.findAll('tr') print type(tags) for tag in tags: print tag
urllib2登陆代码采集代码:
url_login = "http://www.jisilu.cn/account/ajax/login_process/"url_data = "http://www.jisilu.cn/data/sfnew/arbitrage_vip_list/"_post_type = "ajax"net_auto_login = "1"user_name = ""password = ""return_url = "http://www.jisilu.cn/data/sfnew/"login_params = { "user_name": user_name, "password": password, "return_url": return_url, "net_auto_login": net_auto_login, "_post_type": _post_type}headers = { "Referer": "http://www.jisilu.cn/login/", "Connection": "keep-alive", "Accept": "application/json, text/javascript, */*; q=0.01", "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36"}cj = Noneopener = Nonereq = Noneresponse = Noneoperate = Nonedef get_cookielib(): global cj, opener cj = cookielib.LWPCookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener)def login(): global req, response, operate req = urllib2.Request(url_login, urllib.urlencode(login_params), headers=headers) response = urllib2.urlopen(req) operate = opener.open(req) thePage = response.read() print thePage import time timestamp = "%d" % (time.time() * 1000) req_data_params = { "___t": str(timestamp) } req = urllib2.Request(url_data, urllib.urlencode(req_data_params), headers=headers) response = urllib2.urlopen(req) perate = opener.open(req) thePage = response.read() print thePage # 所需要的数据
- python爬虫实战(关于工作中遇到的问题)
- Python 爬虫中遇到的反爬虫问题
- 关于工作中遇到的问题
- 爬虫中遇到的问题
- Python学习爬虫中遇到点问题
- 机器学习实战中遇到的python问题
- 工作中遇到的关于java runtime.exec()的问题
- 工作中遇到的关于页面刷新跳转的问题
- Python,写爬虫时遇到的问题笔记(一)
- 学习和工作中遇到的Python问题及解决方案
- python 爬虫遇到的网页乱码问题
- 自学Python爬虫遇到的一些问题
- 工作中关于遇到的Excel问题汇总
- 工作中遇到的问题(累计)
- 工作中遇到的问题
- 工作中遇到的问题
- 工作中遇到的问题
- 工作中遇到的问题
- IOS开发相关链接
- QListWidget用法小结
- 网络安全资料
- Android 线程的C++封装,使用
- 学习笔记1:Struts 2框架的搭建
- python爬虫实战(关于工作中遇到的问题)
- No enclosing instance of type Demo06 is accessible.
- 迷信的原因之我见
- 启动Tomcat报错java.lang.IllegalArgumentException
- 欢迎使用CSDN-markdown编辑器
- clearfix的用法
- 自定义NSSearchField光标颜色
- 使用ThinkPHP框架快速搭建网站
- OpenCV的circle函数画圆的小技巧