python爬虫
详细资料可以看慕课网:https://www.imooc.com/video/10690
一:爬虫
一段自动抓取互联网信息的程序
爬虫从一个url出发,访问所有的url,并且从每个页面提取,所需要的有价值的数据
价值:比如我也做一个美女网,把网上所有的美女图片放在一个网站上。
二:简单爬虫架构:
1: 爬虫调度段
2:Url管理器:从管理器中可以取到一个待爬取的url。将其传送给网页下载器
3:网页下载器:网页下载器会将url指定的网页下载下来存储成一个字符串,将这个字符串传送给网页解析器
4:网页解析器:网页解析器会将这个字符串解析。会解析出有价值的数据和指向其他网页的url,这些url可以再补充给url管理器。他们会组成一个循环,只要有url就会一直循环下去
三:爬虫架构运行流程:
调度器:调度器会询问有没有url管理器,有没有要爬取的Url,如果有,将这个url传送给下载器。
管理器:返回是和否,如果是,返回一个待爬取的url。
下载器:下载器得到url,会根据内容下载,下载好后,将内容返回给调度器,调度器会将内容再传送给解析器
解析器:解析器解析后,会将价值数据和新的url列表,返回给调度器,此时调度器会做两件事:第一将价值数据传送给应用,进行数据的收集,第二会将新的url列表补充到url管理器,以此循环,直到所有的url都爬取完。
最后调度器会将应用的方法,进行输出,将价值数据输出到我们需要的格式
四:url管理器
url管理器管理待抓取的url集合,和已抓取的url集合,对url管理是为了防止重复抓取,和循环抓取
url会做两个判断:
在将新的url添加到爬取集合中时,会判断待添加url是否在容器中。
判断是否还有待爬取的url
最后url爬取完,会将这个url移动到已爬取集合
五:url管理器实现方式
1:如果采用python语言,选用set集合,set集合可以去除重复的元素
2:关系型数据库:如myslq
3:缓存数据库:如redis
六:网页下载器(核心)
网页下载器是将互联网上的url对应的网页下载到本地的工具,类似于浏览器
他将url对应的网页以html的格式存储到本地文件或内存字符串
python下载器:urllib2。python官网基础模块,他支持直接的url下载,还支持登录网页的cookie处理,需要代理访问的代理处理
request:python第三方插件
七: urlib2介绍:urllib2有三种下载网页的方法
1:将url传送给urllib2.urlopen(url),返回的内容传送给response对象。 response= urllib2.urlopen(request),然后用response的response.code方法,返回一个状态码,根据状态码判断是否成功。同时可以使用responde的responde.read()方法读取内容。
import urllib2
import cookielib
url = "http://www.baidu.com"
print '第一种方法'
response1 = urllib2.urlopen(url)
print response1.getcode()
cont = response1.read()
2:添加data,httpheader。现在就有了三个参数,将这三个参数传给urllib2的urllib.request方法,返回一个request对象,然后仍然使用response= urllib2.urlopen(request)
例:import urllib2
values = {"username":"1016903103@qq.com","password":"XXXX"}
data=urllib.urlopen(values)
url="https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request=urllib2.Request(url,data)
response= urllib2.urlopen(request)
print response.read()
3:添加特殊情境的处理器:
因为有些网页需要用户登录才能访问,我们需要添加cookie的处理,那现在可以使用HTTOPCookieProcessor。如果是需要代理的网页则使用:ProxyHandler。
如果是使用https加密访问的则使用:HTTPSHandler
最后将这些handler传送给urllibl2.build.opener(handler)方法,返回一个opener对象,然后urllib2.install_opener(opener),然后继续使用urllib2.urlopen(request)方法
import urllib2
import cookielib
#创建cookie容器
cj = cookielib.CookieJar()
#创建一个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#给urllib2安装opener
urllib2.install_opener(opener)
#使用待cookie的urllib2访问网页
response = urllib2.urlopen("http://www.baidu.com")