一、基本库的使用requests
这是我参与更文挑战的第3天,活动详情查看: 更文挑战
1.下载
1. 对于第三方模块需要手动下载
pip install 第三方库名
pip install requests
复制代码
2.requests中的属性
a.响应对象.text 返回字符串数据类型
b.响应对象.content 返回字节数据类型
c.响应对象.request.headers 查看请求头
响应头:是发送网络请求自动携带身份验证
相见的请求头/响应头
host主机和端口
Connection 链接形式(长链接和短链接)
User—Agent 当前浏览器用户(用户身份)
Referer 页面跳转
(浏览器世界大战)
Cookie:用来保存用户所有的基本信息
Set-Cookie:服务器设置用户信息
Upgrade-Insecure-Requests:升级为HTTPS请求
Accept:传输文件类型
Referer:页面跳转处
Accept-Encoding:文件编解码格式
x-requested-with:XMLHttpRequest:是Ajax异步请求
d.响应对象.headers 查看响应对象
e.响应对象.status_code 查看响应状态码
f.响应对象.request._cookies 请求头中携带的cookies信息
g.响应对象.cookies 查看响应头中的cookies
f.响应对象.json 返回的是json的数据类型
复制代码
3. get请求和post请求
3.1. get请求
get请求是HTML中最常见的请求,就如同访问一个页面
复制代码
实例
# 1.导入爬虫的请求模块 requests
# 导入request模块的全部功能
import requests
# 2.确定目标
url = "https://www.baidu.com/"
# 浏览器上访问百度使用什么请求过程: get
# 3.发送网络请求并接收响应
response = requests.get(url) # 返回响应对象
# 4.处理数据并入库
print(response)
复制代码
但是如果要在get请求中添加数据,也是可以的就要用到parms这个参数
# 可以向网页中的args{} 参数添加信息
import requests
url = "https://httpbin.org/get"
data = {
'name':'germey',
'age':22
}
response = requests.get(url,params=data)
print(response.text)
复制代码
3.2. post请求
如果网站判断请求是post方式,就该请求方式为post(如网站判断是否登录,是不是爬虫等)
复制代码
用法
response = requests.post(url,heaaders= headers,data = data)
data的形式:字典
pycharm中:Code--Reformat Code调整格式
复制代码
3.3 添加headers
添加headers的目地的让服务器认为我们是正常访问
参数的形式:字典
kw = {'wd':'长城'}
用法:requests.get(url,params=kw)
复制代码
可以按F12,或者鼠标右键查看源代码(打开后刷新网页)
3.4 添加cookies
爬虫中使用cookie的利弊 好处:能够访问登录后的页面,用cookies保存登录状态 实现部分反反爬 坏处:一套cookie往往对应的是一个用户的信息,请求太频繁有更大的可能性被对方识别为爬虫,封号 那么上面的问题如何解决 ?使用多个账号
复制代码
使用
怎么使用cookies 1.直接将cookies信息放入到headers中 2.直接封装cookies requests.请求方式(cookies={}) 3.使用session信息保持用户登录 cookie 和 session:浏览器世界大战 cookie是用来保存用户状态信息的,页面和页面直接不能共享 session用来在浏览器上保存cookie,并且session可以在同一域名下共享使用 session的意义:可以保持用户的登录会话 requests.请求方式()不带任何访问记录请求 requests.session().请求方式() 可以将浏览器产生的cookies信息 保存在爬虫的session 1.为爬虫创建一个session机制 s = requests.session() 返回的是和浏览器session机制一样的对象
复制代码
实例 封装cookies
# 登录人人网爬取,先自己登录后,在发送请求中找到cookies登录信息import requestsurl = "http://www.renren.com/972994466/profile"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}cookies = {"Cookie": "anonymid=k3n4bdx2-2ouv0m; depovince=ZGQT; _r01_=1; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680820; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680825; ln_uact=15729346258; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; JSESSIONID=abcrk-jYV07bXgoGwAe7w; ick_login=b46a1369-61fb-4f7c-a8fc-a5d4eb4c331a; first_login_flag=1; wp_fold=0; jebecookies=f578d5cc-ed70-4492-805f-1c4729f644b3|||||; _de=441F637FD42BDC2C1F90E79AB0D2FDF8; p=fb77a6b7d07408ab565c61446c0034146; t=6fffb2965b04d697458451c4bb5ac3ef6; societyguester=6fffb2965b04d697458451c4bb5ac3ef6; id=972994466; xnsid=3b8ac2ba; ver=7.0; loginfrom=null"}response = requests.get(url, headers=headers, cookies=cookies)print(response.content.decode("utf-8"))#打印字节码数据
复制代码
实例 使用session保存用户信息
import requestsurl = "http://www.renren.com/972994466/profile"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}cookies = {"Cookie": "anonymid=k3n4bdx2-2ouv0m; depovince=ZGQT; _r01_=1; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680820; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680825; ln_uact=15729346258; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; JSESSIONID=abcrk-jYV07bXgoGwAe7w; ick_login=b46a1369-61fb-4f7c-a8fc-a5d4eb4c331a; first_login_flag=1; wp_fold=0; jebecookies=f578d5cc-ed70-4492-805f-1c4729f644b3|||||; _de=441F637FD42BDC2C1F90E79AB0D2FDF8; p=fb77a6b7d07408ab565c61446c0034146; t=6fffb2965b04d697458451c4bb5ac3ef6; societyguester=6fffb2965b04d697458451c4bb5ac3ef6; id=972994466; xnsid=3b8ac2ba; ver=7.0; loginfrom=null"}response = requests.get(url, headers=headers, cookies=cookies)# print(response.content.decode("utf-8"))#打印字节码数据import requests# 1.为爬虫创建session机制s = requests.session()# 2.登录网址login_url = "http://www.renren.com/ajaxLogin/login"data = {"email": "","password": "",}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36",}response = s.post(login_url, headers=headers, data=data) # 参数cookies自动保存在sessionprint(response.text)url = "http://www.renren.com/972994466/profile"response = s.get(url, headers=headers)print(response.text)
复制代码
3.5. SSL证书验证
当发送HTTP请求的时候,它会检查SSL证书,我们可以使用verify参数控制是否检查此证书。其实不加verify参数的话默认为True,会自动验证。只需在请求里面加一个verify=FalseResponse = request.get(url,verify=False)
复制代码
3.6. 代理的设置
什么是代理:借助别人的IP地址和端口访问其他网站(可以看一下免免费的ip的网站 西刺代理)反向代理 : 浏览器--->nginx--->服务器正向代理 : 浏览器--->代理--->google服务器
复制代码
用法
# requests.请求方式(proxies={"代理方法": "IP:PORT"})# 为什么传递字典:使用代理需要这只是什么样的代理方法,比如http代理或者https代理 socket代理 response = requests.get(url,proxies = proxies)proxies的形式:字典proxies = { 'http':'http://', 'https':'https}
复制代码
为什么要使用代理
1.让服务器以为不是同一个客户端在请求2.防止我们的真实地址被泄露,防止被追究a.访问服务器时,对方服务器会保留访问者的ip地址和端口 10秒 访问了人家阿里云1000次,使用100个ip 10次反向代理: 浏览器通过代理ip地址访问另一个主机程序,该主机程序可以正常接收浏览器请求方式和访问地址,主机程序再通过自己的ip地址访问用户的目标网站,但是目标网站无法获取主机程序的访问地址,该地址是匿名的 服务器根本不知道浏览器的真实IP地址正向代理: 直接使用代理ip访问服务器,代理ip会在自己的主机上保留使用者的真实ip 服务器知道使用代理的用户的真实IP地址
复制代码
怎么实现反反爬
使用多个代理
复制代码
IP被封了怎么办?
凉拌
复制代码
实例
import requestsurl = "https://www.baidu.com"proxies = { "https": "https://114.239.146.116:808"}response = requests.get(url, proxies=proxies)print(response.content.decode("utf-8"))
复制代码
如果url是https,那么proxies里面就要设置https。
如果url是http,那么proxies里面就要设置http.
4. 美化输出
1.导包 from pprint import pprint2.输出 pprint(response)
复制代码
5. 保存原样输出
with open("douban.json",'w',encoding='utf-8') as f: f.write(json.dumps(response,ensure_ascii=False,indent = 4))#原样输出
复制代码
6. json使用注意点
json中的字符串都是双引号引起来的 如果不是双引号 用eval:能实现简单的字符串和python类型的转换 replace:把单引号替换为双引号 往一个文件中写入多个json串,不再是一个json串,不能直接读取
复制代码
7. retrying
1.导入包 from retrying import retry2.@retry(stop_max_attempt_number=3)@retry(stop_max_attempt_number=3)def cc(url): response = requests.get() #获取三次,如果3次不行就报销
复制代码
示例
import requestsfrom retrying import retryheaders = { 'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50', 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',}@retry(stop_max_attempt_number=3)def _parse_url(url,method,data,proxies): print("相应失败")
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END