摘要
本文部分内容来源于网络,个人收集整理,请勿传播
一直都想学习一下python爬虫的相关知识,但是苦于一直没有时间。因此,非常感谢这次能够路飞学院学习到爬虫知识的机会。
- 不会web能不能做爬虫? 不能
- 写爬虫的时候经历的阶段
- 找不到入口
- 反复试,找到入口
- 必备知识
- 爬虫本质,通过代码伪造浏览器发送请求
- http请求伪造的像不像
- 请求头
- user-agent:用户使用什么设备访问
- cookie:在用户浏览器上保存的标记
- 请求体
- get数据
- post数据
- 请求头
- 分析http请求
- chrome
什么是爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
- 通过编写程序,根据url获取网站信息
- 伪造浏览器想某个地址发送http请求,获取返回的字符串
Requests
Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,使用起来非常不方便。
Requests 是使用 Apache2 Licensed 许可证的,基于Python开发的HTTP库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。
常用方法
GET请求
1 | # 无参数 |
POST请求
1 | # 基本POST实例 |
其他请求
1 | requests.get(url, params=None, **kwargs) |
常用参数
- method: 向url发送http请求的方法
- requests.get requests.post get 和 post的本质就是method
- post,get,delete, put, head, patch, options
- url: 访问的url
- params: get请求时传递的参数,post的时候也可以使用
- params = {k1:vi}
- data: post请求时传递的请求体
- 浏览器显示的form data
- data=json.dumps() == json
- data = {k1:v1,k2:v2} or ‘k1=v1&k2=v2’
- json: 请求时发送的json数据(json.dumps)
- 浏览器显示的 request payload
- 请求头中设置content-type: application/json
- headers: 请求头
- cookies: 请求时使用的cookies
- proxies: 代理
1 | proxies = { |
- files: 上传文件
- 可以传递字典或者元组
1 | file_dict = { |
- auth: 基本http认证(Basic/Digest/Custom)
1 | from requests.auth import HTTPBasicAuth, HTTPDigestAuth |
- timeout 超时时间
- allow_redirects: 默认True 是否允许重定向
- stream: 下载大文件时
1 | ret = requests(url=url, stream=True) |
- cert: 证书(一般自己创建的证书时使用)
- verify: 使用自己创建证书的时候确认是否继续访问
- ret = request.Session() 用来保存客户端历史访问信息
- ret.get(),ret.post() # 会自动携带cookie信息
实例
登录汽车之家并获取新闻信息
1 | import requests |
自动登录抽屉并点赞
1 | import requests |
grequests
通过gevent与requests封装而成的异步HTTP请求,相当于requests的异步版本。
安装
1 | pip install grequests |
简单实用
1 | import grequests |
参数
1 | def grequests.map(requests, stream=False, size=None, exception_handler=None, gtimeout=None) |
- size: 协程的并发数
- exception_handler: 捕获异常的处理方法
- gtimeout: 整体请求的超时时间
由于底层是requests,因此requests的其他参数依然支持
事件钩子
1 | def print_url(r, *args, **kwargs): |
实例
1 | import grequests |