爬虫
爬虫分类
详见:BelieverH的https://blog.csdn.net/Taneost/article/details/102780280
1.通用网络爬虫:门户站点搜索引擎、大型Web服务提供商采集数据,又称为全网爬虫。
2.聚焦网络爬虫:根据需求,实现爬虫程序,爬取需要的数据,又称为主题网络爬虫。传输协议都是http/https
3.增量式网络爬虫:抓取刚刚更新的数据。
4.深层网络爬虫:分表层网络和深层网络。
爬虫技术:
1.抓取HTML页面:
- HTTP请求的处理: urllib, urlib2, requests
- 处理器的请求可以模拟浏览器发送请求,获取服务器响应的文件
2.解析服务器相应的内容:
- re, xpath, BeautifulSoup(bs4), jsonpath, pyquery等
- 使用某种描述性语言来给我们需要提取的数据定义一个匹配规则,符合这个规则的数据就会被匹配
3.采集动态HTML,验证码的处理
- 通用动态页面采集: Selenium + PhantomJS:模拟真实浏览器加载JS
- 验证码处理: Tesseract机器学习库,机器图像识别系统
4.Scrapy框架:
- 高定制性,高性能(异步网络框架twisted)->数据下载快
- 提供了数据存储,数据下载,提取规则等组件
5.分布式策略:
- scrapy redis:在scarpy基础上添加了以redis数据库为核心的一套组件,主要在redis做请求指纹去重、请求分配、数据临时存储
6.爬虫、反爬虫、反反爬虫之间的斗争:
- User-Agent, 代理, 验证码, 动态数据加载, 加密数据
访问页面->爬取数据->数据存储->数据处理->提供检索服务
常见服务器端口号:
- http:80
- https:443
- ftp:21
- ssh:22
- mysql:3306
- MongoDB:27017
- redis:6379
https :// www.baidu.com : 80 /s/sso/area ? uname=dancer&pword=12345 # anchor
- https: 【协议】
- www.baidu.com 【Host】
- 80 【端口号】
- s/sso/area 【资源路径】
- uname=dancer&pword=12345 【query-string参数】
- anchor 【锚点】
urllib库
官方文档:https://docs.python.org/3/library/urllib.request.html
使用:
import urllib request url = 'http://xxxxxx' #你要爬取的地址 response = urllib.request.urlopen(url=url) #获取的是一个HTTPResponse对象 html = reponse.read().decode('utf8')#显示页面源码
HTTPResponse对象有:read(),readinto(),getheader(name),getheaders()【获取响应dui'x】,fileno(),getcode()等方法,以及msg,status,reason,debuglevel,closed等属性。
- 也可以给链接传递一些参数
url(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=Flase,context=None)
- 常用的也是前三个参数:url,附加数据data,超时时间timeout
urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)
- 第二个参数data要传必须是bytes(字节流)类型的
data=bytes(urllib.parse.urlencode({'word':'hello'}),encoding='utf8)
- 第三个参数是headers,是一个字典,请求头。
- 第四个参数是指请求方的host名称或IP地址。
- 第五个参数是表示这个请求是否无法验证,默认是False
- 第六个参数是一个字符串,用来指示请求使用的方法,比如GET,POST,PUT等。
python 内置的HTTP请求库
- 第二个参数data要传必须是bytes(字节流)类型的
- urllib.request:请求模块
- urllib.error:异常处理模块
- urllib.parse:解析模块(拆分、合并等)
- urllib.parse.urlencode()方法用来将参数字典转换为字符串
- urllib.robotparser:robot.txt解析模块