python爬虫-Anaconda环境+requests模块
Anaconda简介
-
Anaconda: 集成环境(应用于: 数据分析&机器学习)
-
终端启动命令:
jupyter notebook
-
jupyter的基本使用
- cell是两种模式组成
- code: 编码
- md: 编写文本
- 快捷键
- 新建一个cell: a(新建到前面), b(新建到后面)
- 删除: x
- 切换cell的模式: m, y
- 执行cell: shift + enter
- 打开帮助文档: shift + tab
- 编辑和退出编辑: enter esc
- cell是两种模式组成
爬虫简介
- 概念: 通过编写程序模拟浏览器上网,然后让它去互联网上爬取数据的过程。
- 爬虫分类
- 通用爬虫
- 聚焦爬虫
- 增量式
- 分布式
- 功能
- 反爬机制
- robots协议: 仅仅声明了哪些门户端的数据不可被爬
- User-Agent: 请求载体的身份标识(UA检测)
- 动态加载数据: 监测鼠标的滑动请求相关数据
- 图片懒加载: 给img标签应用一个伪属性
- cookie机制
- 后续更新…
- 反反爬策略
- 防君子不防小人
- 请求头的伪装
- 参数动态化params/data/json
- 找到伪属性
- 使用requests中的Session对象
- 后续更新…
requests模块
# 导入
import requests
# 参数介绍
url = '网站url'
params = {'a': "1"} # 参数,用于get方法
headers = {'User-Agent': '...'} # 请求头
verify = True # ssl认证 True(默认使用)/False(取消)
data = {'a': "1"} # 参数,用于post方法
.json() # 序列化
.text # 以text文本输出
.content # 以二进制输出,一般用于图片
# get方法
requests.get(url=url, params=params, headers=headers, verify=False)[.json()|.text|.content]
# post方法
requests.post(url=url, data=data, headers=headers, verify=False)[.json()|.text|.content]
requests.post(url=url, json=data, headers=headers, verify=False)[.json()|.text|.content] # 当form_data是json格式的时候,需要这样写(很少用到)
# 出现乱码时,需指定编码形式
response = request.get(url, headers=headers)
response.encoding = 'utf-8' # 指定utf-8编码
page_text = response.text
# 使用代理
requests.get(url, headers=headers, proxies={'http/https(具体看代理支持哪种)', '代理的ip:代理的端口'}) # proxies指定代理
# 使用Session对象解决cookie(注意: 使用Session对象,至少要调用两次)
sess = requests.Session()
sess.get(url, headers=headers) # 产生cookie,自动保存cookie
sess.get(new_url, headers=headers) # 使用保存的cookie访问
urilib模块和requests模块的简单对比
# urllib: 基于网络请求的模块,是requests模块的前身
# requests模块爬取图片并保存到本地
import requests
img_src = "www.url.com..."
img_data = requests.get(url=url, headers=headers).content
with open("文件名", 'wb') as fp:
fp.write(img_data)
# urllib模块爬取图片并保存到本地
from urllib import request
img_src = "www.url.com..."
request.urlretrieve(img_src, '文件名') # 无法模拟请求头