requests高级用法

代理proxies

  数据采集过程中使用脚本发送请求,请求次数过于频繁,服务器监测到而采用一定的手段禁止此ip的请求,为了解决封ip的问题,我们用代理来处理这个问题。用第三方代理ip进行伪装访问,即使被封也不影响当前ip的使用,构建代理池,封了一个,其他的还可以用,这样就能缓解ip被封无法继续爬取的问题。

  ip代理获取:智联代理全网代理快代理西刺代理等。

  代理匿名度:

    (1)透明:目标服务器知道请求使用了代理服务器,同时能监测到真实的请求ip

    (2)匿名:目标服务器知道请求使用了代理服务器,但无法监测到真实的请求ip

    (3)高匿:目标服务器不知道请求是否使用了代理服务器,也无法监测到真实的请求ip

  代理ip类型:(1)http:只能转发http请求;(2)https:只能转发https请求

  (1)代理指定

 1 import requests
 2 from lxml.html.clean import etree
 3 from fake_useragent import UserAgent
 4 UA=UserAgent()
 5 headers={‘User-Agent‘:UA.random,}
 6 url=‘https://www.baidu.com/s?wd=ip‘
 7 response=requests.get(url=url,headers=headers,proxies={‘https‘:‘111.231.94.44:8888‘},timeout=10)#代理IP指定
 8 response.encoding=‘utf-8‘
 9
10 # print(response.text)#在页面中可以搜索‘本机’找到本次请求的代理服务器
11 #<span class="c-gap-right">本机IP:&nbsp;117.64.251.9</span>安徽省合肥市 电信(代理IP也使用了代理)
12 print(etree.HTML(response.text).xpath(‘//span[@class="c-gap-right"]/text()‘)[0])

代理指定

  (2)手动创建代理池

 1 import random
 2 import requests
 3 from lxml.html.clean import etree
 4 from fake_useragent import UserAgent
 5
 6 UA = UserAgent()
 7 headers = {‘User-Agent‘: UA.random, }
 8 url = ‘https://www.baidu.com/s?wd=ip‘
 9
10 #手动配置ip代理池
11 proxy_list = [
12     {‘https‘: ‘60.13.42.29:9999‘},
13     {‘https‘: ‘111.231.94.44:8888‘},
14     {‘http‘: ‘222.182.188.17:8060‘},
15     {‘https‘: ‘111.231.91.104:8888‘},
16     {‘https‘: ‘221.178.232.130:8080‘},
17 ]
18 #随机选取ip代理
19 proxies = random.choice(proxy_list)
20 print(proxies)
21 response = requests.get(url=url, headers=headers, proxies={‘https‘: ‘111.231.94.44:8888‘}, timeout=10)  # 代理IP指定
22 print(etree.HTML(response.text).xpath(‘//span[@class="c-gap-right"]/text()‘)[0])
23 # {‘https‘: ‘111.231.94.44:8888‘}
24 # 本机IP: 117.64.251.9
25 # {‘http‘: ‘222.182.188.17:8060‘}
26 # 本机IP: 117.64.251.9

手动配置代理池

  (3)自动创建代理池  

 1 import random
 2 import requests
 3 from lxml.html.clean import etree
 4 from fake_useragent import UserAgent
 5
 6 UA = UserAgent()
 7 headers = {‘User-Agent‘: UA.random, }
 8 url = ‘https://www.baidu.com/s?wd=ip‘
 9
10 #http://http.zhiliandaili.cn/Index-getapi.html(注册登录购买获取)
11 #API自动创建代理池
12 proxy_list = []
13 ip_url = ‘http://ip.11jsq.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=53&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=‘
14 page_text = requests.get(ip_url,headers=headers).text
15 tree = etree.HTML(page_text)
16 ip_list = tree.xpath(‘//body//text()‘)
17 for ip in ip_list:
18     ip = {‘https‘:ip}
19     proxy_list.append(ip)
20 print(proxy_list)
21
22 #随机选取ip代理
23 proxies = random.choice(proxy_list)
24 print(proxies)
25 response = requests.get(url=url, headers=headers, proxies={‘https‘: ‘111.231.94.44:8888‘}, timeout=10)  # 代理IP指定
26 print(etree.HTML(response.text).xpath(‘//span[@class="c-gap-right"]/text()‘)[0])

API自动创建代理池

会话对象

  会话对象:会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。

  cookie概念:当用户通过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookie。  

 1 ‘‘‘
 2 雪球网:https://xueqiu.com/
 3 ‘‘‘
 4 import random
 5 import requests
 6 from fake_useragent import UserAgent
 7
 8 UA = UserAgent()
 9 headers = {‘User-Agent‘: UA.random, }
10 proxy_list = [
11     {‘https‘: ‘60.13.42.29:9999‘},
12     {‘https‘: ‘111.231.94.44:8888‘},
13     {‘http‘: ‘222.182.188.17:8060‘},
14     {‘https‘: ‘111.231.91.104:8888‘},
15     {‘https‘: ‘221.178.232.130:8080‘},
16 ]
17 proxies = random.choice(proxy_list)
18
19 #通过抓包工具捕获的基于ajax请求的数据包中提取的url(直接报错,分析原因找到第一次访问主页面时创建了cookie)
20 # url = ‘https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,HKHSI,HKHSCEI,HKHSCCI,.DJI,.IXIC,.INX‘
21 # json_data = requests.get(url=url,headers=headers).json()
22 # print(json_data)
23 #{‘error_description‘: ‘遇到错误,请刷新页面或者重新登录帐号后再试‘, ‘error_uri‘: ‘/v5/stock/batch/quote.json‘, ‘error_code‘: ‘400016‘}
24
25
26
27
28 #创建一个session对象
29 session = requests.Session()
30 #将cookie保存到session对象中
31 first_url = ‘https://xueqiu.com/‘
32 session.get(url=first_url,headers=headers)#为了获取cookie且将cookie存储到session中
33 print(session.cookies)
34
35 url = ‘https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,HKHSI,HKHSCEI,HKHSCCI,.DJI,.IXIC,.INX‘
36 response = session.get(url=url,headers=headers,proxies=proxies)#携带cookie发起的请求(根据需要可以发起各种请求get/post/put...)
37 print(response.json())

Session处理cookie

    

原文地址:https://www.cnblogs.com/open-yang/p/11305687.html

时间: 2024-11-12 03:05:42

requests高级用法的相关文章

python requests 高级用法 -- 包括SSL 证书错误的解决方案

Session Objects会话对象 Session对象在请求时允许你坚持一定的参数.此外,还坚持由Session实例的所有请求的cookie. 让我们坚持在请求时使用 s = requests.Session() s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') r = s.get("http://httpbin.org/cookies") print r.text # '{"cookies&q

python+requests——高级用法——处理cookie——重点

参考网址:https://www.cnblogs.com/xiaobaibailongma/p/12346091.html import requests url = 'http://www.baidu.com' resp = requests.get(url) print(resp.cookies) print('============================================================') for k,v in resp.cookies.item

python+requests——高级用法——将请求打包

原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12355350.html

python+requests——高级用法——超时

原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12355339.html

python+requests——高级用法——代理和认证——重点

原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12355323.html

python+requests——高级用法——会话——重点源码

参考:http://2.python-requests.org/zh_CN/latest/user/advanced.html#advanced 参考:http://2.python-requests.org/zh_CN/latest/api.html#sessionapi 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12355360.html

Python3网络爬虫实战-25、requests:高级用法

在前面一节我们了解了 Requests 的基本用法,如基本的 GET.POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等. 1. 文件上传 我们知道 Reqeuests 可以模拟提交一些数据,假如有的网站需要我们上传文件,我们同样可以利用它来上传,实现非常简单,实例如下: import requests files = {'file': open('favicon.ico', 'rb')} r =

Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试

之前在<关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享>中系统的介绍过 Fiddler 的原理与一些常见技巧,但那篇文章只是入门科普,并不深入,今天要介绍到的内容相对更加高级与深入,扩展性更好,功能更加强大. 1.Fiddler Script 1.1 Fiddler Script简介 在web前端开发的过程中,fiddler是最常使用的一款调试工具.在大多数情况下,通过fiddler默认菜单的功能就可以基本满足开发者的调试需求,然而如果需要满足更复杂的调试场景时,单纯通过fi

jquery on高级用法

on()的高级用法 针对自己处理机制中,不仅有on方法,还有根据on演变出来的live方法(1.7后去掉了),delegate方法等等.这些方法的底层实现部分 还是on方法,这是利用了on的另一个事件机制委托的机制衍变而来的 委托机制 .on( events ,[ selector ] ,[ data ], handler(eventObject) ) 在on的第二参数中提供了一个selector选择器,简单的来描述下 参考下面3层结构 <div class="left">