/1 前言/
requests 是Python里面的一个爬虫模块,它可以进行一个简单的get和post请求,它是对Python基础爬虫模块urllib的一个封装,所以,学爬虫学他就好了,高效易学。安装方式也很简单,只需运行下面的安装命令:
pip install requests
或者运行下面的安装命令:
easy_install requests
即可进行安装了。
/2 基本用法/
基本用法如下表所示:
方法 | 说明 |
---|---|
requests.request() | 构造一个请求 |
requests.get() | 该方法用于向目标网址发送请求,接收响应. |
requests.head() | 只请求页面的首部。 |
requests.post() | 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 |
requests.put() | 从客户端向服务器传送的数据取代指定的文档的内容。 |
requests.patch() | 向URL提交局部更新请求。 |
requests.delete() | 请求服务器删除指定的页面。 |
/3 request方法/
该方法用于构造一个请求,可以是get post put等任意一种
该方法的参数列举如下:
/4 get方法/
get方法一般用于请求返回数据。
该方法返回一个 Response 对象,其常用的属性和方法列举如下:
/5 post方法/
post 一般用于表单提交,我这里为了偷懒用了个不存在的表单数据元素,嘿嘿,不过还是返回结果了。
post 还可用于上传文件,如图:
成功上传,不过如果你没找到上传文件接口,并没什么用。
post 发送json 数据,如图:
/6 put方法/
一般是从客户端向服务器传送的数据取代指定的文档的内容。
/7 patch方法/
一般就是向URL提交局部更新请求。
/8 delete方法/
一般就是请求服务器删除指定的页面。
/9 高级操作/
1)会话持久
#模拟淘宝登陆
import requests
url='https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fai.taobao.com%2F%3Fpid%3Dmm_26632323_6762370_25910879'
headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
formdata={'TPL_username':'fsdafdfasf','TPL_password':'fsadfasf'}
se=requests.session() #建立session会话
ss=se.post(url=url,headers=headers,data=formdata) #发送post请求
if ss.status_code==200: #判断登陆状态
print('登录成功')
else:
print('登录失败')
2)异常处理
exceptions 是requests中负责处理异常的模块,常见的有:
Timeout:请求超时
ConnectionError:网络问题,例如 DNS 故障,拒绝连接等
TooManyRedirects:请求超过配置的最大重定向数
注意 :所有显式抛出的异常都继承自 requests.exceptions.RequestException
在这里我使用了一个不存在的网址,所以他会报错,如图:
3)证书验证
verify是在请求网站时需要输入证书时使用,平时很少用,他是个布尔类型。
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
rep = requests.get("https://www.baidu.com",verify=False)
print(rep.status_code)
4)解析cookies
cookie={
'Cookie':'_NTES_PASSPORT=aOEPpKnlDYXUXQSkcZFQZBXoYvnlgVcVZFmcHjyVB_IJHglxHydKU4wq82VtzowQcq5ImZw__GXXKzljpyKX.GM8tzWOyErtUh1m6wuxM0uJWSwCeDqVunr2aaQhRJhk0qM3Bbga1reKecRS4htGKsQqPLizIXyXo9Dtalv2UQvZTrTYuKDdXduKFW8APOGSe'}
for i in Cookie.split(';'):
k,v =i.split('=')
cookie[k]=v
for k,v in cookie.items():
print(k,":",v)
#将字典转为CookieJar:
cookiesJar = requests.utils.cookiejar_from_dict(self.cookies, cookiejar=None,overwrite=True)
#CookieJar转为字典
requests.utils.dict_from_cookiejar(cookiesJar)
/10 爬虫伪装浏览器/
常见字段1:
Accept: text/htnl, application/xhtml+xml, application/xmlq=0.9,中/*;q=08
Accept字段主要用来表示浏览器能够支持的内容类型有哪些。
text html表示HTMⅡL文档。
application/ xhtml+xm表示 XHTML文档。
application/xml表示XMAL文档。
q代表权重系数,值介于0和1之间。
所以这一行字段信息表示浏览器可以支持 text/html,application/xml、/等内容类型,支持的优先顺序从左到右依次排列。
常见字段2:
accept-encoding:gzip, deflate
accept-encoding字段主要用来表示浏览器支持的压缩编码有哪些。
gzip是压缩编码的一种。
deflate是一种无损数据压缩算法。
这一行字段信息表示浏览器可以支持gzp、 deflate等压缩编码。
常见字段3:
Accept- Language:zhCN,zh;q=0.8,en-US;q=0.5,cnq=0.3
Accept-language主要用来表示浏览器所支持的语言类型。
zh-CN表示简体中文语言。zh表示中文,CN表示简体
en-Us表示英语(美国)语言
en表示英语语言
所以之一行字段表示浏览器可以支持zh-CN、zh、en-US、cn等语言。
常见字段4:
User- Agent: Mozilla5.0( Windows NT61;WOw64;rv:47.0) Gecko20100101Firefox/47.0
user-agent字段主要表示用户代理,服务器可以通过该字段识别出客户端的浏览器类客户端的操作系统及版本号型、浏览器版本号主要以伪造该字段进行网页排版引擎等客户端信息。所以之前要模拟浏览器登录,主要以伪造该字段进行。
Mozilla5.0表示浏览器名和版本号
Windows NT61;WOw64;rv:47.0 表示客户端操作系统对应信息
Gecko表示网页排版引擎对应信息。
Firefox/47.0表示火狐浏览器
所以这一行字段表示信息为对应的用户代理信息是Mozilla5.0( Windows NT61;WOw64;rv:47.0) Gecko20100101Firefox/47.0
常见字段5:
Connection:keep-alive
Connection表示客户端与服务器的连接类型,对应的字段值主要有两种
keep-alive表示持久性连接。
close表示单方面关闭连接,让连接断开。
所以此时,这一行字段表示客户端与服务器的连接是持久性连接。
常见字段6:
Host: wwwyouku.con
Host字段表示请求的服务器网址是什么,此时这一行字段表示请求的服务器网址是www,youku,con。
常见字段7: Referer:网址
Referer字段主要表示来源网址地址,比如我们从htp:/ www,youku.conm网址中访问了该网址下的子页面http/tvyouku.com?spm=0.0.topnav.5-1-3!2-A.Onqoef,那么此时来源网址为htp:/ www,youku,con,即此时 Referer字段的值为http://www.youku. co
/11 使用代理服务器/
代码如下所示:
import urllib.request
import http.cookiejar
url = "https://www.baidu.com"
# 以字典的形式设置headers
headers ={
‘Accept’:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3’,
‘Accept-Encoding’: ‘gzip, deflate, br’,
‘Accept-Language’: ’zh-CN,zh;q=0.9‘,
‘Cache-Control’: ’max-age=0‘,
‘Connection’: ‘keep-alive’,
’Cookie‘: ‘BAIDUID=167421B2A215854D04495CD1BF100157:FG=1; cflag=13%3A3; BIDUPSID=167421B2A215854D04495CD1BF100157; PSTM=1587911884; __guid=136081015.2148238240541301000.1587911412950.4026; BD_UPN=12314353; BDUSS=94RFdLQ21qZnZKUnNXczZaWERxbWVIM3ZFSXVFb2V1RlJyV3RGRnFoZG9TTk5lSUFBQUFBJCQAAAAAAAAAAAEAAABeBv1hyfG56rjCuMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi7q15ou6teUm; ZD_ENTRY=other; BD_HOME=1; H_PS_PSSID=1422_31326_21078_31421_31341_31270_31464_30824_26350_31164_31475_22160; monitor_count=1; BDSVRTM=300’,
‘Host’: ‘www.baidu.com’,
‘Sec-Fetch-Mode’: ‘navigate’,
‘Sec-Fetch-Site’: ’cross-site‘,
'Sec-Fetch-User': ‘?1’,
’Upgrade-Insecure-Requests‘: ‘1’,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’
}
#设置cookie
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
head= []
# 将制定格式的headers信息添加好
for k,v in headers.items():
item = (k,v)
head.append(item)
opener.addheaders = head
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
hand = open(r"C:\Users\Administrator\Desktop\te.html", "wb")
hand.write(data)
hand.close()
/12 不使用代理服务器/
代码如下所示:
import urllib.request
import http.cookiejar
url ="https://www.baidu.com"
# 以字典的形式设置headers
headers = {
‘Accept’:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3’,
‘Accept-Encoding’: ‘gzip, deflate, br’,
‘Accept-Language’: ’zh-CN,zh;q=0.9‘,
‘Cache-Control’: ’max-age=0‘,
‘Connection’: ‘keep-alive’,
’Cookie‘: ‘BAIDUID=167421B2A215854D04495CD1BF100157:FG=1; cflag=13%3A3; BIDUPSID=167421B2A215854D04495CD1BF100157; PSTM=1587911884; __guid=136081015.2148238240541301000.1587911412950.4026; BD_UPN=12314353; BDUSS=94RFdLQ21qZnZKUnNXczZaWERxbWVIM3ZFSXVFb2V1RlJyV3RGRnFoZG9TTk5lSUFBQUFBJCQAAAAAAAAAAAEAAABeBv1hyfG56rjCuMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi7q15ou6teUm; ZD_ENTRY=other; BD_HOME=1; H_PS_PSSID=1422_31326_21078_31421_31341_31270_31464_30824_26350_31164_31475_22160; monitor_count=1; BDSVRTM=300’,
‘Host’: ‘www.baidu.com’,
‘Sec-Fetch-Mode’: ‘navigate’,
‘Sec-Fetch-Site’: ’cross-site‘,
'Sec-Fetch-User': ‘?1’,
’Upgrade-Insecure-Requests‘: ‘1’,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’
}
#设置cookie
jar = http.cookiejar.CookieJar()
proxy = urllib.request.ProxyHandler({'http': "127.0.0.1:8000"})
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler, urllib.request.HTTPCookieProcessor(jar))
# 建立空列表,为了以制定格式存储头信息
head = []
for k,v in headers.items():
item = (k, v)
head.append(item)
# 将制定格式的headers信息添加好
opener.addheaders = head
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
# data = data.decode("utf-8")
fhandle = open(r"C:\Users\Administrator\Desktop\et.html", "wb")
hand.write(data)
hand.close()
/8 小结/
------------------- End -------------------
本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!