更多Requests的小技巧以及总结

对于requests的爬虫库,我们已经学到了尾声。

我们在这儿可以挖掘出更多的requests的使用小技巧。

一.cookie对象与字典的转换

在爬取目标cookie的时候,我们可以将cookie信息进行简化处理。

现在做一个简单的代码验证看看,使用百度的cookies:

import requests
response=requests.get("http://www.baidu.com")                                      #获取百度的响应
response_cookie=response.cookies                                                         #获取百度的cookies
print(response_cookie)
response_dict=requests.utils.dict_from_cookiejar(response_cookie)      #将百度获取的cookie转换为字典
print(response_dict)
输出结果:

RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}

那么,反过来切换呢?

response_cookie_1=requests.utils.cookiejar_from_dict=(response_dict)

print(response_cookie_1)

输出结果:

<RequestsCookieJar[<Cookie BDORZ=27315 for />]>

我们可以分析此次的输出结果可以知道,重新翻译过来url信息丢失了,具有信息保护性。

 

二.url编码的解码处理

我们在做爬虫的过程中,是经常会遇到我们输入的url被解码成另外一种数据形式。

例如:http://tieba.baidu.com/f?kw=无限法则

我们在对这个网址进行爬虫处理之后,在输出结果显示的时候,已经编码成了这个形式:

http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99

翻译的时候,我们还得上网去翻译过来。那么requests正好也提供了这个功能,能够完成翻译,避免了你去网上翻译的过程。

现在就放一段代码看看:

 

import requests
url_1="http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99"
url_2=requests.utils.unquote(url_1)
print(url_2)

 

输出结果:

http://tieba.baidu.com/f?kw=无限法则

反过来也是一样的:

url_3=requests.utils.quote(url_2)

print(url_3)

输出结果:

http%3A//tieba.baidu.com/f%3Fkw%3D%E6%97%A0%E9%99%90%E6%B3%95%E5%88%99

所以我们总结起来,就是这样:

quote:对URL编码;  unquote:对解码的URL进行解码

 

三.请求SSL证书验证解决

我们在做爬虫的时候,会经常遇到网站请求SSL证书的验证,这将是爬虫遇到的家常便饭。

那么我们如何跳过这个SSL证书呢,在get参数中加入一个参数即可。

假设我们访问百度,遇到了SSL证书问题,我们要做的就是:

response=requests.get("http://www.baidu.com",verify=False)

 

 

以上就是三个requests的使用小技巧,当然,requests库是强大的,能做的不只是这些。

关于其他的用法,我们在今后使用的时候会慢慢探索出来,具有一定的自学能力是最好的。

回顾一下我们学习requests的过程,我们可以做一个总结:

①填写正确的url形式,是有协议,IP地址,端口和路径等组成的,其中协议不能忘了写。

正确的url形式为"http://www.baidu.com"

 

②学会对自己的伪装,准备一堆User-Agent,一堆IP和一堆cookie。

选择代理IP时,选端口跟自己网络端口符合的。

 

③两种请求方式的公式和参数有如下:

requests.get(url,headers=?(存储User-Agent参数),params=?(存储wd访问参数),proxies=?(存储IP地址参数),cookies=?(存储cookies参数),verify=?(解决SSL证书验证))

requests.post(url,headers=?(存储User-Agent参数),data=?(存储form表单参数),proxies=?(存储IP地址参数),cookies=?(存储cookies参数),verify=?(解决SSL证书验证))

当然,这些参数都是以字典的形式而作为参数。

 

④显示源码最好的方式就是respsonse.content.decode(),如果要将json文本转为python文本,使用json库的json.loads()方法。

保存源码的方式是with open,标准的格式为:

with open ("?"(文件的名字),"w"(进入可读模式),encoding="utf-8"(不可缺,不然在编辑器上显示不出来))as f :

    f.write(response.content.decode())

 

那么,requests模块就学到这儿,但是正确的学习方式是学以致用,我将给自己布置下面两个作业:

1.抓取绝地求生贴吧的前5页源码。

已成功完成,运行截图如下:

 

源码如下:

import requests


class TiebaSpider():
def __init__(self, tieba_name):
self.tieba_name = tieba_name
self.url = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"
self.proxies = {"http": "http://139.196.90.80:80"}
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400"}
self.cookies = {
"cookie": "BIDUPSID=ACDA08B4211ABB2C8501DB67D45C6354; PSTM=1511497343; bdshare_firstime=1511786525592; rpln_guide=1; TIEBAUID=0929173e72ad98f36fe7ebc6; TIEBA_USERTYPE=e916512877b43f62b624ed45; BDUSS=RuaHRBTnhZdDY3MTBKaWo3U0lKdkRES2Y0VGEyS2F0RW1BYXYyN3N0bWlIRXRjQVFBQUFBJCQAAAAAAAAAAAEAAABLXgnSxdzF3E1BU1RFUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKPI1yijyNcMj; STOKEN=5fc0d6f6e16857ed3e6abac93bd75cae1cf244d5fd9d4e106b3ecb9d56017894; locale=zh; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=4D17734C04368D8A9BDE5236D01D183E:FG=1; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1547216027,1547272466,1547303935,1547367124; wise_device=0; Hm_lpvt_98b9d8c2fd6608d564bf2ac2ae642948=1547367145"}

def get_url_list(self, url):
url_list = []
for i in range(5):
url_list.append(url.format(i * 50))
return url_list

def parse_url(self, url):
response = requests.get(url, headers=self.headers, proxies=self.proxies, cookies=self.cookies)
return response.content.decode()

def save_html(self, html, page_num):
with open(self.tieba_name + "第" + str(page_num) + "页", "w", encoding="utf") as f:
f.write(html)

def run(self):
# 1.使用url_list成功存储五页源码
url_list = self.get_url_list(self.url)
# 2.获取响应
# 3.保存源码到html文件
page_num = 1
for url in url_list:
html = self.parse_url(url)
self.save_html(html, page_num)
print(self.tieba_name + "第" + str(page_num) + "页爬取成功!")
page_num += 1


if __name__ == "__main__":
tieba_spider = TiebaSpider("绝地求生")
tieba_spider.run()

 

2.使用搜狗翻译将英文翻译成中文。

完成失败。

总结原因:搜狗采取了反爬虫,在表单中去掉了翻译结果的参数。

我尝试使用正则表达式匹配出来结果,但是技术不精,匹配失败。

已经自闭,下次再来。

转载于:https://www.cnblogs.com/Masterpaopao/p/10261558.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进入Undertow Web服务器

随着Java EE 7的到来以及处理诸如Web Sockets API和HTTP升级&#xff08;例如EJB over HTTP&#xff09;之类的高级功能的要求&#xff0c;WildFly开发团队已经做出了重要决定。 在长期致力于JBoss Web服务器&#xff08;Apache Tomcat的一个分支&#xff09;之后&#xff0c;新…

HTTPHandler有什么作用

一 asp.net请求的处理过程&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;Http…

centos 重启网卡_CentOS6 网络管理之网卡配置及简单路由设置

CentOS6中关于网络配置的命令有很多&#xff0c;本文将介绍几个平时最长用的几个命令&#xff0c;以及网卡IP地址的配置和简单路由配置。1、经常使用的查看IP地址命令为 ifconfig&#xff0c;不跟参数的情况下默认查看所有已启用的网卡信息&#xff0c;如下图所示&#xff1a;如…

绝地求生 android版支持蓝牙吗,《绝地求生》吃鸡必须要顶配吗?这些配置也能畅玩...

导读《绝地求生》火爆之余&#xff0c;很多人在想要加入这款游戏时&#xff0c;却被游戏传闻中的超高配置要求给吓到了&#xff0c;然后心生退意。事实上&#xff0c;吃鸡的配置要求真的这么高吗&#xff1f;其实并不是&#xff01;传言1&#xff1a;8G内存不能玩这则传言的说法…

《美团机器学习实践》高清PDF+思维导图+美团算法团队

在美团的搜索、推荐、计算广告、风控、图像处理等领域&#xff0c;相关的人工智能技术得到广泛的应用。《美团机器学习实践》包括通用流程、数据挖掘、搜索和推荐、计算广告、深度学习以及算法工程6大部分内容&#xff0c;全面介绍了美团在多个重要方面对机器学习的应用。通过本…

如何使用HttpModule来实现我们日常的应用:

1、向每个页面动态添加一些备注或说明性的文字&#xff1a; 有的网站每一个页面都会弹出一个广告或在每个页面都以注释形式&#xff08;<!-- -->&#xff09;加入网站的版权信息。如果在每个页面教编写这样的JS代码的话&#xff0c;对于大一点的网站&#xff…

Java 8中的java.util.Random

Java 8中java.util.Random类的简洁功能之一是对其进行了改进&#xff0c;现在可以返回随机的数字流 。 例如&#xff0c;要生成一个介于0&#xff08;含&#xff09;和1&#xff08;不含&#xff09;之间的随机双精度数的无限流&#xff1a; Random random new Random(); Do…

appium判断元素是否存在_Python+selenium自动化之判定元素是否存在

在测试过程中&#xff0c;我碰到过这类的问题&#xff0c;使用find_element却找不到某个元素而产生异常&#xff0c;这就需要在操作某个元素之前判定该元素是否存在&#xff0c;而selenium中没有判定元素是否存在的方法&#xff0c;或者判定相同的元素有几个&#xff0c;需要操…

棋盘DP三连——洛谷 P1004 方格取数 洛谷 P1006 传纸条 Codevs 2853 方格游戏

P1004 方格取数 题目描述 设有N $\times N$NN的方格图(N $\le 9$)(N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字00。如下图所示&#xff08;见样例&#xff09;: A0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 …

html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

this.p{ m:2,b:2,loftPermalink:,id:fks_082065087087086069087082087095083084084067083083082065,blogTitle:HTML图片CSS滤镜—灰度效果,blogAbstract: ,blogTag:html,blogUrl:blog/static/72507542200941384735902,isPublished:1,istop:false,type:2,modifyTime:13288029920…

将动态aspx页面转换成为静态html页面的几种方法

1. 模版法 该方法历史悠久&#xff0c;具体处理流程为采用一个html模版&#xff0c;将其中的关键字替换为我们希望的信息。 优点: 缺点: 所有的信息都要采取字符串批凑的方式来实现&#xff0c;比如需要一个列表&#xff0c;就需要拼凑字符串。问题是开发周期长&…

SSH协议详解

简介 SSH只是一个协议&#xff0c;基于这个协议有不同的实现&#xff0c;这些实现中有开源&#xff0c;也有收费。 原理 普通网络通信一般是明文通信&#xff0c;数据容易被中间人拦截并且解析&#xff0c;而SSH协议则提供了基于内容加密服务。 流程&#xff1a; 第一种&#x…

怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

「谁用激光雷达&#xff0c;谁完蛋&#xff01;」在去年特斯拉举办的 Autonomy Day 上&#xff0c;特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达。「昂贵的传感器是不必要的&#xff0c;这就像是一大堆昂贵的附属品。」「像阑尾一样。一个阑尾不好——那么&#xff0c;一大堆阑…

JBoss Fuse 6.1 + HawtIO第一部分

它是开源的&#xff01; JBoss Fuse是开源ESB &#xff0c;是Red Hat收购FuseSource之后Fuse ESB的发展。 它是开源的 &#xff0c; Apache v2许可的 &#xff0c; 并由Red Hat完全支持 。 最好的部分之一是&#xff0c;您可以免费下载并使用它&#xff0c;并且在生产或订阅中支…

html5新增的js api,对HTML5新增JS Api的思考

1.为什么javascript的变量名不使用css中的命名方法&#xff0c;而选择使用驼峰命名法因为在javascript中“-”表示减法&#xff0c;所以如果使用“-”的话会出现不必要的问题。2.在javascript中已经有className方法添加类名&#xff0c;为什么还要新增加classList.add方法因为c…

什么是URL转发和一个IP建多个Web站点--主机头名法

什么是URL转发&#xff1f; 所谓 URL 转发&#xff0c;是中企资源对在中企资源注册的域名&#xff0c;所提供的一项特别的域名增值服务&#xff0c;此服务是通过中企资源服务器的特殊技术设置&#xff0c;实现当访问您的域名时&#xff0c;将会自动跳转到您所指定的另一个网络地…

eval()

eval() 接收一个字符串&#xff0c;这个字符串必须是一个表达式&#xff0c;然后执行并返回表达式的值 In [6]: x 7In [7]: eval(3 x) Out[7]: 10 In [8]: eval(pow(2, 3)) Out[8]: 8 In [9]: eval(2 3) Out[9]: 5 转载于:https://www.cnblogs.com/pzk7788/p/10264105.h…

ajax html页面传参数,jQuery AJAX:如何将大型HTML标记作为参数传递?

如何使用jQuery AJAX将大型HTML标记数据传递给我的PHP&#xff1f;当我收到结果时&#xff0c;这是错误的。jQuery AJAX代码&#xff1a;$(#saveButton).click(function() {// do AJAX and store tree structure to a PHP array//(to be saved later in database)var treeInner…

使用Drools 6.0进行部署

KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系&#xff1b; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上进行部署&#xff0c;也可以在运行时动态进行…

activemq安装与配置_ActiveMQ(消息队列)从入门到了解

一、 ActiveMQ 简介 1 什么是 ActiveMQ ActiveMQ 是 Apache 出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现&#xff0c;尽管 JMS 规范出台已经是很久 的事情了&#xff0c;但是 JMS 在当…