爬虫实际上就是通过代码实现“自动”登陆,并且能够自动完成一些数据的下载,一般网站都会对一些允许抓取的数据进行规定,具体的规定内容写在了每个网站的robots文件中。
爬虫是数据挖掘和分析的第一部,及:获取数据,因而对于从事数据分析的人来说,首先应该“了解”。也就是说,对于想要从事数据挖掘的人来说,并不要求你爬虫的技术非常高超,只要能够知道里面的基本技术层面即可。个人认为,数据挖掘的要旨并非在于数据(尽管很多数据界的名人都似乎推崇“大数据”),而是在于对于数据后面事件的理解......
言归正传:
爬虫的基本框架是:模拟登陆——获取数据——存储数据,当然,每一个步骤中都涉及很多需要注意的地方,如在模拟登陆中,要考虑request的方式和数据内容(这里要了解一些http的基础知识[w3school](http://www.w3school.com.cn/) 可以经常去看看,如用到xpath的时候),还要验证码以及密码加密(如新浪和拉钩网)。
模拟登陆之前,还要掌握一些httpclient/firebug这些软件的基本操作,以及具备看懂request/post数据的“技能”,这些“拦截”软件能够在client(浏览器)和server互动时“截获”双方信息。ps:所以登陆公共场所的wifi极其危险。
#### 1 静态网站+密码可见
这种情况下,server要求不高,既没有动态码,也没有验证码,更没有加密,因而这类网站的模拟登陆一般非常好实现,只要python中的一些基本操作即可:
* * *
import urllib
import urllib2
url=r"http://www.xxxx.com" # 加入“r“的目的是为了避免一些转义字符额识别问题,个人编习惯
request=urllib2.Request(url)
rep=urllib2.urlopen(request) #此时的rep为instance,可以理解为类似于“文件”的东西
* * *
到这里已经将server返回的html文档记录在了rep中,后面就可以对rep进行读写操作
这里一定要注意网站的编码是什么,一般在“查看网站源码”中,可以看得到有一个为character=“utf-8”的内容,就表示网站html编码为utf-8,那么用python时,就必须对html进行decode(以utf-8编码方式转化为unicode),然后再进行其他处理,如正则表达式查找等。
content=rep.read().decode("utf-8")
with open(r"yourfile.txt","w") as f: #将rep中的html文档以uft-8的形式进行编码后存储
f.write(content.encode("utf-8"))
好了,这就是一般网页的模拟登陆
* * *
#### 2 网站拒绝“机器”登陆
一般来说,除了像学校网站以及学校bbs这类的网站,其他网站都会对“机器”登陆比较反感,毕竟,那么此时,就需要在以上的基础上模拟浏览器登陆。
浏览器登陆的时候会发送一些我们看不到的内容,想要模拟浏览器登陆,就必须将浏览器发送的内容以post的形式发送给server端。浏览器一般post的内容见下:
* * *
![](https://box.kancloud.cn/2016-05-29_574a961ced0e7.jpg)
具体参数的意思,如果忘了可以再google一下(查问题一定要用google)
这里要注意的一个定方是accept-encoding那里是:gzip和defualt,也就是说server会以压缩包的形式法给你html文档(有的时候也不是,这个还是具体实验),那么如果是以gzip的形式返回html,那么就一定要“解压”,否则会宝HTTPError 500,这个异常出来,一般很难发现。具体解压方法后面介绍。
在模拟浏览器登陆的过程中,也没有必要全部按照post的形式发送,可以只发送一些User-Agent或者referer的东西。发送user-agent是因为有些server要通过这个参数来判断是否是浏览器,发送referer是由于“反盗链”的原因,大概意思就是防止本网站的链接内容被其他“二道贩子”用来“倒卖”。
那么,在上面代码的基础上,这里可以加入:
headers={"User-Agent":"xxx","Referer":"xxx"}
request改为:
request=urllib2.Request(url,headers=headers)#在发送请求的时候加入header
这里附上urllib2的中文教程:[urllib2 tutorial](http://uliweb.clkg.org/tutorial/view_chapter/172)
PS:如果可以用Request库的还是用它吧 [request tutorial ](http://docs.python-requests.org/en/latest/user/quickstart/)
- Python爬虫入门
- (1):综述
- (2):爬虫基础了解
- (3):Urllib库的基本使用
- (4):Urllib库的高级用法
- (5):URLError异常处理
- (6):Cookie的使用
- (7):正则表达式
- (8):Beautiful Soup的用法
- Python爬虫进阶
- Python爬虫进阶一之爬虫框架概述
- Python爬虫进阶二之PySpider框架安装配置
- Python爬虫进阶三之Scrapy框架安装配置
- Python爬虫进阶四之PySpider的用法
- Python爬虫实战
- Python爬虫实战(1):爬取糗事百科段子
- Python爬虫实战(2):百度贴吧帖子
- Python爬虫实战(3):计算大学本学期绩点
- Python爬虫实战(4):模拟登录淘宝并获取所有订单
- Python爬虫实战(5):抓取淘宝MM照片
- Python爬虫实战(6):抓取爱问知识人问题并保存至数据库
- Python爬虫利器
- Python爬虫文章
- Python爬虫(一)--豆瓣电影抓站小结(成功抓取Top100电影)
- Python爬虫(二)--Coursera抓站小结
- Python爬虫(三)-Socket网络编程
- Python爬虫(四)--多线程
- Python爬虫(五)--多线程续(Queue)
- Python爬虫(六)--Scrapy框架学习
- Python爬虫(七)--Scrapy模拟登录
- Python笔记
- python 知乎爬虫
- Python 爬虫之——模拟登陆
- python的urllib2 模块解析
- 蜘蛛项目要用的数据库操作
- gzip 压缩格式的网站处理方法
- 通过浏览器的调试得出 headers转换成字典
- Python登录到weibo.com
- weibo v1.4.5 支持 RSA协议(模拟微博登录)
- 搭建Scrapy爬虫的开发环境
- 知乎精华回答的非专业大数据统计
- 基于PySpider的weibo.cn爬虫
- Python-实现批量抓取妹子图片
- Python库
- python数据库-mysql
- 图片处理库PIL
- Mac OS X安装 Scrapy、PIL、BeautifulSoup
- 正则表达式 re模块
- 邮件正则
- 正则匹配,但过滤某些字符串
- dict使用方法和快捷查找
- httplib2 库的使用