python爬虫实战(关于工作中遇到的问题)

原创 2015年11月21日 11:42:50

主要是说一下大体的思路,在爬虫网站的时候遇到乐一些困难,最后解决。
需要爬虫的网站: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 spynner
def 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 = None
opener = None
req = None
response = None
operate = None


def 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 # 所需要的数据


版权声明:本文为博主原创文章,未经博主允许不得转载。

爬虫项目常见问题及解决方案

爬虫项目常见问题及解决方案。最近在做一个采集国内的视频网站内容的爬虫项目,在开发的过程中遇到了一些典型问题,在这里罗列下来和大家一起分享: 问题一:用什么语言写爬虫最好?问题二:用什么数据库最好?问题...
  • simon4545
  • simon4545
  • 2016年09月21日 13:12
  • 1668

基于python的一个大规模爬虫遇到的一些问题总结

前些天在某个论坛看到一些很感兴趣的信息,想要将其爬取下来,预估了下规模,想要做的是:将整个论坛的所有文章爬取下来,保存为本地的txt。 一开始写了个爬虫,大致思路是: 先从论坛的起始页开始爬起,得...
  • u012422144
  • u012422144
  • 2014年12月29日 23:19
  • 4006

python爬虫问题总结

从接触爬虫到现在也整整一年了,谈不上什么精通,只是摸爬滚打、吃一堑长一智,就算在泥潭里,多少也了解点怎样滚,才能少沾点泥巴。这一年里维护改进着日规模高峰达80w、均度50w的垂直爬虫系统,写过一些一次...
  • u011321908
  • u011321908
  • 2015年01月25日 20:17
  • 1817

python3多线程更新UI数据,pyqt5界面刷新

本程序python3,pyqt5环境下。在编写界面程序的时候经常会执行一些耗时的操作,所以我们要使用多线程来做耗时任务,主线程用来重绘界面。而子线程里边的实时处理结果需要反馈到界面。而总所周知,子线程...
  • u014552624
  • u014552624
  • 2017年03月04日 23:58
  • 5121

爬虫过程中经常遇到的一些棘手问题

先写一些已经遇到,并已解决的,后面慢慢增添: 1.中文字符串前面加u,让字符串可以正常输出为中文:  有时候我们从其它地方接受的字符串经过艰难跋涉,它变了个样。比如收到的是'\u6253\u602a\...
  • u012328712
  • u012328712
  • 2015年06月25日 16:50
  • 1722

python爬虫常见异常及处理方法

欢迎使用Markdown编辑器写博客在编写python爬虫时经常会遇到异常中断的情况,导致爬虫意外终止,一个理想的爬虫应该能够在遇到这些异常时继续运行。下面就谈谈这几种常见异常及其处理方法: 异常1:...
  • woyaojinqu
  • woyaojinqu
  • 2017年10月05日 15:25
  • 631

Python爬虫突破封禁的6种常见方法

在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长。今天大众好像更倾向于用“网络数据采集”,有时会把网络数据采集程序称为网络机器人(bots)。最常用的方法是写一个自动化程序向网络...
  • offbye
  • offbye
  • 2016年08月17日 22:36
  • 20269

Java web 工作中遇到的一些问题

1、replaceAll()报错 public class Biaomi { public static void main(String[] args) { String a = "发大(...
  • xiaoyurencao
  • xiaoyurencao
  • 2016年01月26日 13:38
  • 697

记录自己学习心得以及工作中遇到问题的总结

第一次来这里写文章,以后会陆续更新其他文章。
  • xieming1601
  • xieming1601
  • 2016年09月10日 09:22
  • 203

最近工作中遇到的问题以及解决方法总结

项目编译报错 linker command failed with exit code 1 (use -v to see invocation) 对着这个错误,很常见,但引起这个错误的原因却是千奇百...
  • u013749108
  • u013749108
  • 2017年08月25日 21:27
  • 402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python爬虫实战(关于工作中遇到的问题)
举报原因:
原因补充:

(最多只允许输入30个字)