1. Requests库入门
1.1 Requests 库
- 安装(在控制台)
pip install requests
Requests库的7个主要方法:
1.2 requests的Get方法
requests.get(url,params=None,**kwargs)
观察返回的Response对象:
- Response的对象属性:
import requests
r = requests.get("http://www.baidu.com")
r.status_code
print(r.encoding)
print(r.apparent_encoding)
输出结果:
ISO-8859-1
utf-8
1.3 爬取网页的通用代码框架
下面的函数raise_for_status()
,如果状态不是200,引发HTTPError异常。
import requests
url = "https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00017.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[800:1000])
except:
print("NG")
1.4 HTTP协议以及Requests库方法
HTTP协议对资源的操作:
- 用户 -> 网页:GET,HEAD
- 网页 -> 用户:PUT,POST,PATCH,DELETE
1.5 Requests库主要方法解析
requests.request(method,url,**kwargs)
,
- method表示请求方式
**kwargs
控制访问的参数,可选- params:字典或是字典序列,作为参数增加到url中
有如下的调用方式:
r = requests.request('GET',url,**kwargs)
r = requests.request('HEAD',url,**kwargs)
r = requests.request('POST',url,**kwargs)
r = requests.request('PUT',url,**kwargs)
r = requests.request('PATCH',url,**kwargs)
r = requests.request('delete',url,**kwargs)
r = requests.request('OPTIONS',url,**kwargs)
比如,如下的代码表示修改agent去访问:
import requests
url = "http://www.baidu.com/s"
kv = {'user-agent':'Mozilla/5.0'}
try:
r = requests.get(url,headers = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("NG")
2. 网络爬虫的规则
- 网络爬虫的尺寸:
- 小规模,速度不敏感:Requests库,占需求的9成以上
- 中规模:Scrapy库
- 大规模:定制开发
- 关于Robots协议,
https://www.jd.com/robots.txt
.
3. Requests库的网络实战
3.1 网络图片的爬取和链接
(获取pdf 、 动画等也应该是一样的)
import requests
import os
# url = "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1091978681,1253128401&fm=26&gp=0.jpg"
url = "https://www.mhlw.go.jp/content/10900000/000610189.pdf"
root = "C://Users//jun.li//Desktop//TEMP//"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,'wb') as f:
f.write(r.content)
f.close()
print("file saved")
else:
print("file existed")
except:
print("NG")
3.2 百度搜索引擎关键词提交
import requests
url = "http://www.baidu.com/s"
kv = {'wd':'Python'}
try:
r = requests.get(url,headers = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("NG")