#抓取百度页面
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code) #状态码,抓取成功200
r.encoding = 'utf-8' #把编码改为utf-8
print(r.text) #打印输出结果
一、Requests库的七个主要方法
方法 说明
requests.requests() 构造一个请求,支撑以下各种方法的基础方法
requests.get() 获得HTML网页的主要方法,对应于HTTP的get方法
requests.head() 获取HTML网页信息的方法,对应于HTTP的head方法
requests.post() 向HTML网页提交post请求的方法,对应于HTTP的post方法
requests.put() 向HTML网页提交put请求的方法,对应于HTTP的put方法
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的patch方法
requests.delete() 向HTML网页提交删除请求,对应于HTTP的delete方法
二、response对象属性
属性 说明
r.status_code HTTP请求的返回状态,200表示连接成功
r.text HTTP响应内容的字符串形式,即url对应的页面内容
r,encoding 从HTTP header中猜测的响应内容编码方式
r.apparet_encoding 从内容分析的响应内容编码方式(备选编码方式)
r.content HTTP相应的内容的二进制形式
三、理解requests库的异常
异常 说明
requests.ConnectionError 网络连接错误异常,如DNS查询失败,拒绝连接等
requests.HTTPError HTTP错误异常
requests.HTTPRequired URL缺失
request.TooManyRedired 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产生超时异常
理解requests库的异常
异常 说明
r.raise_for_staus() 如果不是200,产生异常requestsHTTPError
四、爬虫代码框架
import requests
def get_html_text(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status() #如果不是200,引发requestsHTTPError异常
r.encoding = r.apparent_coding #保证页面编码
return r.text #保证页面编码正确
except:
return “产生异常”
if __name__ = “__main__”:
url = http://www.baidu.com
print(get_html_text(url))
五、request7种库解析
requests.request(method, url, **kwargs) :构造一个请求,支持以下方法的基础方法
1. method: 请求方式,对应get/post/post等7种
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) #(获取服务器和客户端打交道参数,平时用的较少)
2. url:获取页面的url链接
**kwargs:控制访问的参数,共13个(可选)
包含:
params data json headers
cookies auth files timeout
proxies
allow_redirects stream verify cert
⑴Params:字典或字节序列,作为参数增加到url中
>>>kv = {‘key1’: ‘value1’, ‘key2’:‘value2’}
>>>r = requests.request(‘GET’,‘http://www.python123.io/ws’, params=kv)
>>>print(r.url)
http://python123.io/ws?key1=value1&key2=value2
⑵data:字典、字节序列或文件对象,作为request的内容
>>>kv = {‘key1’: ‘value1’, ‘key2’:‘value2’}
>>>r = requests.request(‘POST’,‘http://www.python123.io/ws’, data=kv)
>>>body = ‘主题内容’
>>>r = rqquests.request(‘POST’,‘http://www.python123.io/ws’, data=body)
⑶json:json格式的数据,作为request的内容
>>>kv = {‘key1’: ‘value1’, ‘key2’:‘value2’}
>>>r = requests.request(‘GET’,‘http://www.python123.io/ws’, json=kv)
⑷Headers:字典,HTTP定制头
>>>hd = {‘user-agent’: ‘Chrom/10’}
>>>r = requests.request(‘POST’,‘http://www.python123.io/ws’, headers=hd)
⑸cookies:字典或cookiesjar,request中的cookie
⑹auth:元组,支持HTTP认证功能
⑺files:字典类型,传输文件
>>>fs = {‘file’, open(‘data.xls’,‘rb’)}
>>>r = requests.request(‘POST’,‘http://www.python123.io/ws’, files=fs)
⑻Timeout:设定超时时间,秒为单位
>>>r = requests.request(‘GET’,‘http://www.baidu.com’, timeout=10)
⑼Proxies:字典类型,设定访问代理服务器,可以增加登录认证
>>>pxs = {‘http’:‘http://user:pass@10.10.1.1234’
‘https’: ‘https://10.10.10.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:本地SLL证书路径
①request.get(url, params=None, **kwargs)
url:拟获取页面的url链接
params:url中额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
②request.head(url, **kwargs)
url:拟获取页面的url链接
**kwargs:13个控制访问的参数
③request.post(url, data=None, json=None**kwargs)
url:拟更新页面的url链接
④data:字典、字节序列或文件,request的内容
json:json格式的数据,request的内容
**kwargs:11个控制访问的参数
⑤request.put(url, data=None **kwargs)
url:拟更新页面的url链接
data:字典、字节序列或文件,request的内容
**kwargs:12个控制访问的参数
⑥request.patch(url, data=None **kwargs)
url:拟更新页面的url链接
data:字典、字节序列或文件,request的内容
**kwargs:12个控制访问的参数
⑦request.delete(url, **kwargs)
url:拟删除页面的url链接
**kwargs:13个控制访问的参数
小结
大家先不看上面笔记,通过看以下点回忆笔记内容,记下没记住的部分翻看前面笔记复习巩固
1.Requests库的七个主要方法
2.response对象属性
3.理解requests库的异常
4.爬虫代码框架
5.request7种库解析
作业
1.爬取京东商品页
# -*- coding:utf-8 -*-
import requests
url = "https://item.jd.com/4538873.html#crumb-wrap"
headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36"}
try:
response = requests.get(url, headers=headers) #返回Response对象
response.raise_for_status() #如果状态不是200,则产生HTTPError异常,跳转运行except处代码
response.encoding = response.apparent_encoding #返回抓取内容
print(response.status_code)
print(response.encoding)
print(response.tex)
except:
print("爬取失败")
2.爬取亚马逊
# -*- coding:utf-8 -*-
import requests
url = "https://www.amazon.cn/?tag=baidu250-23&hvadid={creative}&ref=pz_ic_22fvxh4dwf_e"
headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36"}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
response.encoding = response.apparent_encoding
print(response.request.headers)
print(response.status_code)
print(response.encoding)
print(response.text)
except:
print("爬取失败")
4.图片爬取
# -*- coding:utf-8 -*-
import requests
import os
url = "https://www.baidu.com/img/bd_logo1.png" #照片的地址
root = "D://pics//"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root): 如果path存在,返回True;如果path不存在,返回False
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("保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
5.ip地址
# -*- coding:utf-8 -*-
import requests
url = "http://www.ip138.com/ips138.asp?ip="
try:
r = requests.get(url+"202.204.80.112")
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
except:
print("爬取失败")
本笔记为学习嵩天老师视频整理