一个Pythoner的自我修养系列(一)

时间:2022-04-25
本文章向大家介绍一个Pythoner的自我修养系列(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一个Pythoner的自我修养系列是Python中文社区网友的投稿文章,欢迎大家踊跃投稿,文章主要内容为您在工作中、学习中碰到的Python难题、心得、有趣的项目等,您也可以直接扔代码过来由我们后期编辑,文章可署名,可附带自我介绍,可征女友男友、可征婚......文章赞赏所得归作者所有,文章将同步至Python中文社区微信公众号、知乎专栏、简书等各大网络平台

投稿请寄:sinoandywong@gmail.com,大家共同学习,共同进步。本期文章由@黑白授权发布,版权所有,感谢作者分享。

一个js动态数据抓取范例

作者:Python中文社区网友@黑白

  • ★抓取站点:球网,一个足球比分统计网站 http://lq3.win007.com/nba_big.htm
  • ★抓取球网的比分数据,作为抓取js动态数据的范例
  • ★抓取js动态数据的关键是学好审查元素,只有这样才能找对链接
  • ★请求头header照抄审查元素里的就可以
  • ★抓包有gzip压缩,同样也是很好的解压例子,也可以作为使用cookie的例子
  • ★此爬虫脚本还写了一个保存数据到excel的方法

1. 程序环境安装及运行

  • ★虚拟环境的安装 $ pip install virtualenv $ virtualenv ENV2.7
  • ★安装numpy、pandas、chardet $ pip install numpy $ pip install pandas $ pip install chardet
  • ★安装pyquery $ sudo apt-get install libxml2-dev libxslt-dev python-dev $ sudo apt-get install zlib1g-dev $ pip install pyquery
  • ★运行程序 $ python football_spider.py
  • 2、主要代码片段

try: # 创建MozillaCookieJar实例对象 cookie = cookielib.MozillaCookieJar() # 从文件中读取cookie内容到变量 cookie.load(cookie_name,ignore_discard=True,ignore_expires=True) print "有cookie"

except: # 获取cookie用的链接 login_url='http://lq3.win007.com/nba_big.htm' # 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件 cookie = cookielib.MozillaCookieJar(cookie_name) # 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器 handler = urllib2.HTTPCookieProcessor(cookie) # 通过handler来构建opener opener = urllib2.build_opener(handler) req = urllib2.Request(login_url,headers=hds[random.randint(1, 10)%len(hds)]) # 创建一个请求,原理同urllib2的urlopen opener.open(req).read() # 保存cookie到文件 cookie.save(ignore_discard=True,ignore_expires=True) # 从文件中读取cookie内容到变量 cookie.load(cookie_name,ignore_discard=True,ignore_expires=True) print "首次生成cookie"

# 创建请求的request req=urllib2.Request(url,headers=hds[random.randint(1,10)%len(hds)]) # 利用urllib2的build_opener方法创建一个opener opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) plain_text = opener.open(req).read()

if chardet.detect(plain_text[0:1000])['encoding']=='GB2312': #如果网页编码是GB2312则转码为GBK,默认为utf-8 plain_text = unicode(plain_text,'GBK') return gzdecode(plain_text)