这些年职业爬虫师教会我的技巧(一)-程序员宅基地

640?wx_fmt=png

阅读文本大概需要 4 分钟。


随着 Python 越来越火爆爬虫这个行业也逐渐被人所重视起来,但市面上教的一些爬虫的技巧大多是一些基础类的知识,然而在实际的爬虫工作中你会遇到各种各样的问题。比如抓取到的网页字体显示乱码、某个网站使用了滑块验证码、某个网站使用了短信验证

如何高效的解析数据、各个解析库又有什么区别、如何把数据插入到各个数据库中等等。


所以我想把我在实际爬虫工作中会使用到的技巧,都分享给大家。让一些日后想走上爬虫这条职业道路的人,学习到真正实用的知识。这些技巧都是我实际工作中会一直使用,有些是从爬虫老师傅那学到的,有些是自己磕磕碰碰总结出来的经验。这个系列我会一直更新下去,也是总结自己的一些爬虫经验。话不多说,今天就先教大家一个非常实用的爬虫技巧。


随机构造请求头


反爬是爬虫非常重要的内容之一,爬虫有很大精力是在跟反爬做斗争,而最常见的反爬手段就是构造一个浏览器的请求信息。但大多数人写一个带有请求头的爬虫会是这样写。



headers = { "User-Agent""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome"}
req = request.get(url, headers=headers)


首先去网上找下或者复制浏览器中的请求头信息,然后复制到自己程序里,在构造一个 headers 字典,最后加到请求体中。这样写法非常的耗时费力,甚至每次写程序你还要去浏览器上复制下请求头信息。


而且这样写最大的缺点是每个请求都带的是同个请求头,而对于一些反爬措施比较强的网站来说就有可能检测到你的爬虫程序,直接把你的 ip 给封锁。


在实际的工作中我每次发起的请求都会用不同的请求头,并且是随机的选取一个请求头。而且用法非常的简单,你只需要两行代码就可以完成。


这里就要给大家介绍一个简单实用的库「fake-useragent」,它可以伪装生成 headers 请求头中的 User Agent 值。使用方法也很简单,大家看下代码就懂的了。



from fake_useragent import UserAgent

for i in range(10):
    ua = UserAgent()
    headers = { 'User-Agent': ua.random}
    print(headers)


首先你需要先安装下 fake_useragent 库,然后在导入 UserAgent 类,使用它的 random 函数,每次运行后就会随机给你返回一个请求头,随机性非常的强,而且都不带重复。


640?wx_fmt=png


甚至你可以制定生产某种浏览器的请求头


from fake_useragent import UserAgent
ua = UserAgent()
# ie user agent
print(ua.ie)
# opera user agent
print(ua.opera)
# chrome user agent
print(ua.chrome)
# firefox user agent
print(ua.firefox)
# safri user agent
print(ua.safari)


640?wx_fmt=png


现在我工作中每个爬虫都会使用到这个库,非常的好用。希望大家看完这篇文章之后,也能使用到自己的爬虫程序里。


推荐阅读:



人必有痴,而后有成


640?wx_fmt=jpeg

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33570092/article/details/102921145

智能推荐

怎么在unity3D工程中导入Newtonsoft.Json_unity newtonsoft.json-程序员宅基地

文章浏览阅读3.7k次。怎么在unity3D工程中导入Newtonsoft.Json_unity newtonsoft.json

大文件切片上传,断点续传_分片上传文件, waiting for server response 耗时太长-程序员宅基地

文章浏览阅读103次。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,文件切片和核心是使用 Blob 对象的 slice 方法blob.slice(startByte, endByte),上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。文件妙传,秒传指的是文件在传输之前计算其内容的散列值,也就是 Hash 值,将该值传到后台,如果后台存在 Hash 值一致的文件,认为该文件上传完成。3、由于各种网络原因上传失败,且失败之后需要从头开始。_分片上传文件, waiting for server response 耗时太长

博图sodt定时器的用法_西门子plc定时器指令 西门子S7-1200系列PLC定时器指令-程序员宅基地

文章浏览阅读4.9k次。定时器指令是在PLC程序设计中非常常见的一种指令,S7-1200系列PLC的定时器的指令格式及使用方式都不同于S7-200系列PLC。S7-1200系列PLC的采用的是IEC标准的定时器指令,用户程序中可以使用的定时器数仅受CPU存储器容量限制,每个定时器均使用16个字节的 IEC_TIMER 数据类型的DB结构来存储功能框或线圈指令顶部指定的定时器数据,如下图所示。S7-1200系列PLC的定时..._sodt

hibernate实体属性为布尔类型时命名应注意的地方-程序员宅基地

文章浏览阅读237次。一个对象中的属性有布尔类型时,命名的时候尽量不要把前缀定为is,因为在使用HQL查询的时候,属性必须去掉is前缀,然后小写首字母才能查询出结果,否则查询不到任何数据;例如,有一个User对象,里面有一个标识这个用户是否激活的属性,然后将其命名为isActivated,在查询的时候,根据HQL的规则,使用 user.isActivated = true去查询,将得到错误的提示:isActivat..._hibernate不能包含is

MapReduce中文翻译_for v in values: result += v-程序员宅基地

文章浏览阅读226次。MapReduce: 超大机群上的简单数据处理 ..._for v in values: result += v

【VUE】关于VUE环境配置问题导致IIS发布之后Create与Mounted方法的执行问题_vue create未加载完就进入页面-程序员宅基地

文章浏览阅读960次。写在前面的   最近在IIS发布了我们的项目之后发现,原本写在代码中的Create方法与Mounted方法在执行的时候,生命周期完全不按照应有的逻辑顺序来。相反,每一次在路有种push了新的url之后,无论怎样都会重新执行Create方法,然后再执行Mounted,这就出现了一个非常影响用户体验度的问题:当用户在一个页面中选择了某个数据之后,通过标签,切换到另外一个页面,当重新点击之..._vue create未加载完就进入页面

随便推点

java开发C语言编译器:JVM 的基本操作指令介绍及其程序运行原理_jvm和c语言-程序员宅基地

文章浏览阅读1.2k次。本文介绍了java虚拟机所能运行的基础指令,同时讲解了虚拟机是如何基于堆栈和队列配合相关基础指令,运行字节码程序的。最后我们给出了一段C语言代码,并详细讲解了我们的编译器如何把代码编译成能在java虚拟机上执行的java汇编语言_jvm和c语言

图像算法:Difference of Gaussian(DOG) 高斯函数差分-程序员宅基地

文章浏览阅读2.5w次,点赞17次,收藏103次。概念Difference of Gaussian(DOG)是高斯函数的差分。它是可以通过将图像与高斯函数进行卷积得到一幅图像的低通滤波结果,即去噪过程,这里的Gaussian和高斯低通滤波器的高斯一样,是一个函数,即为正态分布函数。同时,它对高斯拉普拉斯LoG的近似,在某一尺度上的特征检测可以通过对两个相邻高斯尺度空间的图像相减,得到DoG的响应值图像。基本理论首先,高斯函数..._difference of gaussian

数据库学习笔记第一弹——MySQL8.0和MySQL5.7的下载、安装与配置(图文详解步骤2022)-程序员宅基地

文章浏览阅读1k次,点赞10次,收藏9次。数据库学习笔记第一弹——MySQL8.0和MySQL5.7的下载、安装与配置

C语言枚举类 口袋中有红、黄、蓝、白、黑5种颜色的球若干个_利用枚举类型编写程序:口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋-程序员宅基地

文章浏览阅读3.2k次。口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况#include<stdio.h>int main(){ enum Color {red, yellow, blue, white, black};//枚举类声明,分别对应0,1,2,3,4 enum Color i, j, k, pri..._利用枚举类型编写程序:口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋

php 心跳检测,Swoole 实例四(心跳检测)-程序员宅基地

文章浏览阅读1k次。服务器端 server.php

windows学习历程-IPC之互斥对象_windows ipc 互斥锁-程序员宅基地

文章浏览阅读458次。利用互斥对象实现线程的互斥对于互斥对象的操作包括:(1)创建互斥对象(CreateMutex)CreateMutex函数功能: 创建互斥量来确保一个线程独占对一个资源的访问。互斥量对象包含一个使用计数、线程ID以及一个递归计数。线程ID用来标识当前占用这个互斥量的是系统中的那个线程,递归计数表示这个线程占用该互斥量的次数。互斥量可以确保正在访问内存块中的任何线程会独占对_windows ipc 互斥锁

推荐文章

热门文章

相关标签