Python爬虫
本文由 Luzhuo 编写,转发请保留该信息.
原文: https://blog.csdn.net/rozol/article/details/80010235
数据获取途径
- 企业积累
- 政府/机构公开数据
- 数据管理咨询公司
- 数据交易平台 (有价值的数据可出售, 获取难度越高, 价值越高)
- 网络爬取 (深浅网络)
爬虫技术
- 抓取HTML页面
- urllib, requests
- 解析响应结果
- re, xpath, BeautifulSoup4, jsonpath, pyquery
- ajx动态加载, 验证码的处理
- Selenium + PhantomJs
- Tesseract(图像识别)
- 高性能框架
- Scrapy(twisted网络框架), Pyspider
- 分布式框架
- scrapy-redis
- 反爬虫
User-Agent
, 代理, 验证码, 动态加载, 数据加密
通信内容
HTTPS
- 在http的基础上加了一层ssl层
- http端口: 80
- https端口: 443
请求头
GET / HTTP/1.1
- 请求方法: GET / POST / PUT / DELETE / …
Host: www.baidu.com
- 主机+端口号
Connection: keep-alive
[重要]
- 连接类型: 客户端发起
Connection: keep-alive
- 服务端支持, 则回复
Connection: keep-alive
响应, 不关闭连接 - 服务端不支持, 则回复
Connection: close
响应, 关闭连接
- 服务端支持, 则回复
- 利用
keep-alive
可重用连接, 不必每次请求都建立连接, 减轻服务端压力
- 连接类型: 客户端发起
Upgrade-Insecure-Requests: 1
- 升级为https请求, 在加载资源时, 会自动将http请求替换成https请求
User-Agent: Mozilla/5.0 ...
[重要]
- 浏览器名称, 平时尽量多去收集一些
Accept: text/html, ...
- 传输的数据类型: /(所有) / image/jpeg(jpeg图片) / image/gif(gif图片) / text/html(html文本) / application/xxx(数据或文件) / …
Referer: https://blog.csdn.net/rozol
[重要]
- 页面跳转, 表示请求的网页来自于哪个url
Accept-Encoding: gzip, deflate, br
[重要]
- 编码格式, 一般是压缩类型, 一般不写
Accept-Language: zh-CN,zh;q=0.9
- 语言: en / en-us / zh / zh-cn
Cookie: PSTM=1496126358; ...
- Cookie
Content-Type: application/x-www-form-urlencoded
- POST请求发送的数据类型
响应头
Server: Tengine
- 服务器类型
Connection: keep-alive
- 连接类型
Keep-Alive: timeout=20
- 保持TCP通道的时长
Cache-Control:must-revalidate, no-cache, private
- 告诉客户端不要缓存资源
- 客户端发送
Cache-Control: max-age=0
请求, 表示没有缓存资源 - 服务器回应
Cache-Control: no-cache
Pragma: no-cache
- 同 Cache-Control
Content-Type: text/html;charset=UTF-8
- 资源类型
Date: Sat, 14 Apr 2018 14:08:23 GMT
- 服务器发送数据时间
Expires: Thu, 01 Jan 1970 00:00:00 GMT
- 在这个时间之前, 可以直接访问缓存
Transfer-Encoding:chunked
- 服务器发送资源以分块的方式发送
状态码
- 200: 成功
- 302: 重定向
- 304/307: 使用缓存
- 403: 权限不足
- 404: 页面丢失
- 500: 服务器异常
爬虫不可或缺的几个因素
Connection: keep-alive
: 重用连接, 减轻服务器负担, 使用Cookie访问User-Agent
: 使用IE的, 返回的是标准格式的数据Accept-Encoding
: 注意压缩类型, 以免拿到解压不了的数据- 代理IP
response.geturl()
请求后的真实路径, 是否被重定向res.getcode()
返回码- ajax加载: from表单提交, 返回数据(如:json, 字符串字典)
- 在处理登录时, 会有一些去获取cookie 和 动态加密密码 之类的请求
- xsrf值可从网页上直接获取
- cookie: 不需要登录的网站不要发cookie
- 设置延迟请求时间, 特别是需要cookie的网站
- 使用cookie的网站, 尽量使用同User-Agent和ip
代理IP
爬虫工具
- 网络请求
- Python自带的网络请求库urllib
- √第三方网络请求库Requests
- urllib使用稍麻烦, Requests使用最简单, 功能最多
- 数据解析
- Python自带的正则库re
- [Chrome插件 XPath Helper]
- 第三方数据解析库lxml
- √第三方数据解析库BeautifulSoup
- 第三方数据解析库JsonPath
- re效率最高, 但是使用最复杂; lxml效率较高, 使用简单; BeautifulSoup有多种解析库, 使用最简单
- 浏览器
- 效率
- [多线程]
- [多进程]
- √[协程]
- √Scrap框架