豆瓣爬取top250
从一个爬虫作业说起
看视频混个眼熟:https://www.icourse163.org/learn/BIT-1001870001#/learn/announce (大概两三个小时看完)
一 requests对象
参数
params:字典或字节序列,作为参数增加到url中
1
2
3
4kv={'key1':'value1','key2':'value2'}
r=requests.request('GET','http://python123.io/ws',params=kv)
print(r.ur1)
# http://python123.io/ws?key1=value1&key2=value2data:字典、字节序列或文件对象,作为Request的内容
1
2
3
4kv={'key1':'value1','key2':'value2'}
r=requests.request('POST','http://python123.io/ws',data=kv)
body="主体内容"
r=requests.request('POST','http://python123.io/ws',data=body)json: JSON格式的数据,作为Request的内容
1
2kv={'key1':'value1'}
r=requests.request('POST','http://python123.io/ws',json=kv)headers:字典,HTTP定制头
1
2hd={'user-agent':'Chrome/10'}
r=requests.request('POST','http://python123.io/ws',headers=hd)cookies:字典或CookieJar,Request中的cookie
auth:元组,支持HTTP认证功能
files:字典类型,传输文件
1
2fs={'file':open('data.x1s','rb')}
r=requests.request('POST','http://python123.io/ws',files=fs)timeout:设定超时时间,秒为单位
1
r=requests.request('GET','http://vwww.baidu.com',timeout=10)
proxies:字典类型,设定访问代理服务器,可以增加登录认证
1
2
3
4
5pxs={
'http':'http://user:pass@1e.10.10.1:1234',
'https':'https://10.10.10.1:4321'
}
r=requests.request('GET','http://www.baidu.com',proxies=pxs)allow_redirects: True/False,默认为True,重定向开关
stream: True/False,默认为True,获取内容立即下载开关
verify: True/False,默认为True,认证SSL证书开关
cert:本地SSL证书路径
方法
requests.request(method,url,**kwargs)
requests.get(url,params=None,**kwargs)
requests.head(url,**kwargs)
requests.post(url,data=None,json=None,**kwargs)
requests.put(url,data=None,**kwargs)
requests.patch(url,data=None,**kwargs)
requests.delete(url,**kwargs)
HTTP资源
返回对象
异常
二 请求头
爬虫爬取异常,返回错误码503
,考虑修改请求头
常用请求头:
1 | user_agent = [ |
使用fake_useragent
模块随机生成请求头,(其实是一个从一个API获取到的)
1 | # 随机heard头 |
三 Cookie
直接将Cookie写在header头部
1 | # coding:utf-8 |
使用requests插入Cookie
1 | # coding:utf-8 |
四 代理
同一个IP访问过于频繁,可能会被ban,可以考虑挂代理IP池访问。
介绍
匿名度:
- 透明:知道是代理ip,也会知道你的真实ip
- 匿名:知道是代理ip,不会知道你的真实ip
- 高匿:不知道是代理ip,不会知道你的真实ip
类型:
- http:只能请求http开头的url
- https:只能请求https开头的url
分类:
- 正向代理:代理客户端获取数据。正向代理是为了保护客户端防止被追究责任
- 反向代理:代理服务器提供数据。反向代理是为了保护服务器或负责负载均衡
代理使用
1 | # 代理的使用 |
免费IP池
从免费ip提供网站爬取ip
port
- 快代理免费:https://www.kuaidaili.com/free/inha/1/ 已测试,无效
- 全网IP代理免费: http://www.goubanjia.com/
1 | # 测试快代理免费IP池的可用性 |
1 | # 从文件读取,并转化为可用数据 |
私密代理
常用在vpn等方面。
1 | # 私密代理格式 |
五 BeatifulSoup库
漂亮汤官方文档 需要代理
也可以直接看这个快速上手:简书
1 | import requests |
个人常用的几个解析函数:
六 yaml文件读写
写
1 | # 文件写 |
读
1 | # 文件读 |
七 请求时延
1 | # 模拟人手动访问网页,网站这还ban建议诅咒阿三程序员直接去世 |
八 实例
从豆瓣爬取TOP250电影
billboard.py
1 | import requests |
billboard.py
运行结果:
movie.yaml
从movie.yaml
读取信息并运行billboard_cover.py
1 | import yaml |
billboard_cover.py
运行结果:
参考
常用浏览器请求头: https://pengshiyu.blog.csdn.net/article/details/80182397
代理: https://www.jianshu.com/p/5958b0cb3de2
代理服务:
穷逼看这里:(测了一下快代理的免费名单,炸了,大概可能是我的姿势不对吧)
快代理:https://www.kuaidaili.com/free/inha/1/
全国代理ip:http://www.goubanjia.com/
石油佬:
爬虫使用cookie: https://blog.csdn.net/weixin_38706928/article/details/80376572
yaml文件读写: https://blog.csdn.net/lmj19851117/article/details/78843486