安装:1.运行->CMD->pip install requests
2.Pycharm中File->settings->Project Interpreter->+->requests->install package
测试运行案例:爬取百度首页源码:
import requests
request = requests.get("https://www.baidu.com") #从URL对应的网页中获取网页源码
rc = request.status_code #查看获取网页状态,200代表访问成功
print(rc)
request.encoding = 'utf-8' #更改字符编码格式
rhtml = request.text #打印网页源码
print(rhtml)
测试运行案例:抓取百度首页logo:
import requests response = requests.get('https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top-e3b63a0b1b.png') #图片的URL(在Network找到图片名称,Headers->General->Request URL) #print(response.content) with open('D:logo_top-e3b63a0b1b.png','wb') as f: #图片的保存路径、写入方式 f.write(response.content) #将获取的图片写入路径 f.close()
1.get()方法:
常用 r=requests.get(url)构造向服务器请求资源的对象,如果现实403则需要计入header模拟浏览器
返回的是response对象;request.headers:获取网页的头部信息
requests的常用属性:
r.status——code:HTTP请求的返回状态,200代表成功,404代表失败:403禁止访问
r.encoding:从响应内容header中猜测的编码方式
r.text:获取URL对应的页面内容
r.apparent_encoding:从内容中分析出的响应内容的编码方式(标准)
r.content:HTTP响应内容的二进制形式
2.爬取网页通用代码框架:检测异常
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
expect:
return "产生异常"
#调用
if _name_=="_main_"
url="https://www.***.**"
print(getHTMLText(url))
- Head()方法:获取头部信息,节省带宽
r = requests.head(‘URL’) r.header #取得头部 r.text #结果是空
Post()方法:提交信息,编码为form
Payload = {‘key1’:’value1’,’key2’:’value2’} #也可以直接在data提交数据
r = requests.post(‘url’,data = payload)
Print(r.text)
Put()方法:提交数据并覆盖原有数据
Payload = {‘key1’:’value1’,’key2’:’value2’} #也可以直接在data提交数据
r = requests.put(‘url’,data = payload)
Print(r.text)
- request()方法:requests(method,url,**kwargs)
7种Method:get,head,post,put,patch,delete,options对应7种HTTP 请求
**kwargs:控制访问的参数,均为可选项:
- params:字典或者字节序列作为参数增加到URL中
Kv = {‘key1’:’value1’,’key2’:’value2’}
R = requests.request(‘GET’,’https://www.baidu.com’,params=kv)
Print(r.url) #结果是:https://www.baidu.com?key1=value1&key2=value2
- data:字典或字节、文件对象作为request的内容
Kv= {‘key1’:’value1’,’key2’:’value2’}
R = requests.request(‘POST’,’https://www.baidu.com’,data=kv)
或
Body=’主题内容’
R = requests.request(‘POST’,’https://www.baidu.com’,data=body)
- json:json数据格式,作为request的内容
Kv= {‘key1’:’value1’}
R = requests.request(‘POST’,’https://www.baidu.com’,json=kv)
- headers:字典,HTTP定制头,模拟浏览器向服务器发起访问
Hd = {‘user-agent’:’Chrome/10’}
R=requests.request(‘POST’,’https://www.baidu.com’,headers=hd)
- cookies:字典或cookieJar,request中的cookie
Auth:元组,支持HTTP认证功能
- Files:字典类型,传输文件
Fs={‘file’:open(‘note.xls’,’rb’)}
R = requests.request(‘PoST’,’https://www.baidu.com’,files=fs)
- timeout:设定超时时间,秒为单位
R = requests.request(‘GET’,’https://www.baidu.com’,timeout = 10)
- Proxies:字典类型,设定访问代理服务器,增加登录认证,隐藏用户爬取网页的源 的IP地址信息,能够防止爬虫的逆追踪
Pxs={‘http’:’http://username:password@10.10.10.1:1234’
‘https’:’http://10.10.10.1.4321’}
R = requests.requests(‘GET’,’http://www.baidu.com’,proxies=pxs)
- allow_redirects:True/False,默认为true,重定向开关
Stream:True/FALSE,默认为True,获取内容立即下载开关
Verify:True/False,默认为True,认证SSL证书开关
Cert:本地SSL证书路径
-
requests.get(URL,params=None,**kwargs):**kwarg包含request中除params的其他12个
-
Requests.head(URL,**kwargs):**kwargs与requests完全一样
-
requests.post(‘url’,data = None,json=None,**kwargs):**kwargs包含request中除了json和data的其他11个
-
requests.put(‘url’,data = None,**kwargs):**kwargs:12个
-
Requests.patch(url,data=None,**kwargs):**kwargs12个
-
Requests.delete(url,**kwargs):**kwargs13个
实践案例:爬取京东商品页面信息 (iPhone 11 Pro max :https://item.jd.com/100008348536.html)
import requests url = 'https://item.jd.com/100008348536.html' try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding print(r.text) except: print("爬取失败")