终极:爬虫进阶--神级程序员:让你的爬虫就像人类的用户行为! 你敢封我IP吗?
优采云 发布时间: 2022-11-26 01:09终极:爬虫进阶--神级程序员:让你的爬虫就像人类的用户行为! 你敢封我IP吗?
除了处理网站表单外,请求模块还是设置请求标头的强大工具。HTTP 请求标头是每次向 Web 服务器发送请求时传递的一组属性和配置信息。HTTP定义了十几种古怪的请求标头类型,但其中大多数都不常用。
每个网站都有不同的请求标头,如何获取此请求标头?我们可以使用我前面提到的小提琴手或审查元素,我们可以根据实际情况进行配置。例如,在GET百度的根目录下,需要添加请求头信息,如下所示:
部分参数说明:
2.2 饼干设置
虽然 Cookie 是一把双刃剑,但正确处理 Cookie 可以避免许多采集
问题。网站使用 Cookie 来跟踪您的访问,如果它们发现异常行为(例如特别快速地填写表格或浏览大量页面),则会中断您的访问。虽然这些操作可以通过关闭并重新连接或更改您的 IP 地址来伪装,但如果 cookie 显示您的身份,任何努力都将付诸东流。
在采集
某些网站时,Cookie 是必不可少的。要保持网站登录状态,您需要在多个页面上保存一个 Cookie。有些网站不需要每次登录时都获取新的cookie,只需保存旧的“登录”cookie即可访问它。
如果您要采集
一个或多个目标网站,建议您检查这些网站生成的 cookie,并考虑爬虫需要处理哪些 cookie。有一些浏览器插件可以向您展示在您访问网站和离开网站时如何设置 cookie。例如:EditThisCookie,可以从Google Play下载。网址:
Cookie 信息也可以更真实地填写。但是,请求已经封装了许多操作,自动管理 cookie 并保持会话连接。我们可以先访问目标网站,建立会话连接,然后获取cookie。代码如下:
运行结果如下:
使用请求。Session 对象允许您跨请求保留某些参数,并且它还在一段时间内使用 urllib3 的连接池功能维护同一会话实例发出的所有请求的 cookie。有关详细信息,请参阅请求的高级用法:
因为请求模块不能
执行JavaScript,它无法处理现代跟踪软件生成的许多cookie,例如Google Analytics,它仅在执行客户端脚本时设置cookie(或基于用户浏览页面时的网页事件,例如单击按钮)。要处理这些操作,您需要使用 Selenium 和 PhantomJS 包。
Selenium的安装已经在上一篇文章中介绍过,所以今天让我们谈谈PhantomJS。URL:PhantomJS是一个“无头”浏览器。它将网站加载到内存中并在页面上执行JavaScript,但不向用户显示页面的图形界面。结合Selenium和PhantomJS来运行一个非常强大的网络爬虫,可以处理cookie,JavaScript,header和你需要做的任何其他事情。
PhantomJS可以根据自己的开发平台选择不同的软件包下载:很容易在媒体外使用。
接下来,我们先从一个例子开始,调用 webdriver 的 get_cookie() 方法到网站查看 cookie(D:/phantomjs-2.1.1-windows/bin/phantomjs.exe 是我的 PhantomJS 路径,这里你需要改成你自己的路径):
这为您提供了一个非常典型的谷歌分析cookie列表:
您还可以调用 delete_cookie()、add_cookie() 和 delete_all_cookies() 方法来处理 Cookie。Cookie 也可以保存以供其他网络爬虫使用。
使用Selenium和PhantomJS,我们可以处理一些需要获取事件执行的cookie。
2.3 正常访问速度
保护良好的网站可能会阻止您快速提交表单或快速与网站交互。即使没有这些安全措施,以比普通人快得多的速度从网站下载大量信息也会使自己被网站阻止。
因此,虽然多进程程序可能是快速加载页面的好方法——在一个进程中处理数据,在另一个进程中加载页面——但对于编写良好的爬虫来说,这是一种可怕的策略。您仍应尝试保持页面加载一次,并将数据请求最小化。如果可能,请尝试为每次页面访问添加一点时间间隔,即使您添加两行代码也是如此:
合理控制速度是你不应该打破的规则。过多地消耗别人的服务器资源会使您处于非法境地,更糟糕的是,它可能会导致小型网站瘫痪甚至离线。关闭一个网站是*敏*感*词*的,也是彻头彻尾的错误。所以请控制采集速度!
2.4 注意隐含输入字段
在 HTML 表单中,“隐含”字段使字段的值对浏览器可见,但对用户不可见(除非您查看网页的源代码)。随着越来越多的网站开始使用cookie来存储状态变量来管理用户状态,隐藏字段主要用于防止爬虫自动提交表单,直到找到另一个最佳用途。
" />
下面显示的示例是 Facebook 登录页面上的隐含字段。尽管表单只有三个可见字段(用户名、密码和确认按钮),但表单会在源代码中向服务器发送大量信息。
那里
是防止使用隐式字段采集
网络数据的两种主要方法。首先,表单页面上的字段可以由服务器生成的随机变量表示。如果提交时此值不在表单处理页面上,则服务器有理由相信提交不是从原创
表单页面提交的,而是由机器人直接提交到表单处理页面的。规避此问题的最佳方法是首先捕获表单所在页面上生成的随机变量,然后将它们提交到表单处理页面。
第二种方式是蜜罐。如果表单收录
具有公用名(设置蜜罐陷阱)的隐式字段,例如“用户名”或“电子邮件地址”,则设计不佳的机器人通常会直接填写此字段并将其提交给服务器,而不管此字段是否对用户可见,因此服务器将落入蜜罐陷阱。服务器忽略所有隐含字段的真实值(或与表单提交页面上的默认值不同的值),填写隐含字段的访问者可能会被网站阻止。
简而言之,有时有必要检查表单所在的页面,以查看服务器是否预设了任何缺失或错误的隐藏字段(蜜罐陷阱)。如果您看到一些隐藏字段,通常带有较大的随机字符串变量,那么 Web 服务器很可能会在提交表单时检查它们。此外,还有其他检查来确保这些当前生成的表单变量只使用一次或最近使用(以便变量简单地存储在程序中并重复使用)。
2.5 爬虫如何避开蜜罐
虽然在执行网络数据采集
(例如,通过读取 id 和类标记)时,使用 CSS 属性来区分有用和不需要的信息很容易,但这样做有时可能会出现问题。如果通过CSS将Web表单的字段设置为对用户不可见,则可以假设普通用户在访问网站时无法填写此字段,因为它未显示在浏览器上。如果填写了此字段,则可能由机器人完成,因此提交将失效。
这可以是
不仅适用于网站上的表单,还适用于链接、图像、文件以及机器人可以读取但普通用户在浏览器上看不到的任何其他内容。如果访问者访问网站上的“隐式”内容,服务器脚本可以触发服务器脚本来阻止用户的 IP 地址、将用户踢出网站或采取其他步骤禁止用户访问网站。事实上,许多商业模式就是这样做的。
以下示例使用一个网页,该网页是我们向python爬虫学习的网站。此页面收录
两个链接,一个由 CSS 暗示,一个可见。此外,页面上还包括两个隐藏字段:
这三个元素以三种不同的方式对用户隐藏:
由于Selenium可以获取访问页面的内容,因此它可以区分页面上的可见元素和隐式元素。 is_displayed() 允许您确定元素在页面上是否可见。
例如,
下面的代码示例是获取上一页的内容,然后查找隐含的链接和隐含的输入字段(同样,您需要更改PhantomJS路径):
Selenium抓取了每一个隐含的链接和字段,结果如下:
虽然您不太可能访问找到的隐含链接,但请务必在提交之前确认表单中已有并准备好提交的隐含字段的值(或让 Selenium 自动为您提交)。
2.6 创建自己的代理 IP 池
启用远程平台的人通常有两个目的:需要更大的计算能力和灵活性,以及需要可变的 IP 地址。有些网站设置了访问阈值,
即如果某个IP访问速度超过这个阈值,那么网站就会认为这是一个爬虫,而不是用户行为。为了避免远程服务器阻止 IP 或加快爬网速度,一种可能的方法是使用代理 IP,我们需要做的就是创建自己的代理 IP 池。
思路:通过免费的IP代理网站抓取IP,构建容量为100的代理IP池。从代理 IP 池中选择一个随机 IP 地址,并在使用该 IP 之前检查该 IP 是否可用。如果可用,请使用该 IP 访问目标页面,如果 IP 不可用,则丢弃该 IP。当代理 IP 池中的 IP 数量少于 20 个时,更新整个代理 IP 池,即从免费的 IP 代理网站重新抓取 IP,并构建容量为 100 的新代理 IP 池。
或使用
前面的笔记中提到的西支代理,URL:,如果你想更方便,可以使用他们提供的 API 直接获取 IP。但是这些IP的更新速度有点慢,每15分钟一次,如果需求得到满足,使用这个API也无妨,如果需求不满足怎么办?打嗝。。。需求。。。不能满足...咳咳!
我们可以自己抓取 IP。但是,要小心,不要爬得太快!很容易被服务器阻止!
比如我要抓取国内高调代理,第一页的URL是:,第二页的URL是:,其他页面一次类似,一页IP正好100个,够我们了。
通过查看元素,可以看出这些 IP 存储在 id 属性 ip_list 的表中。
" />
我们可以结合使用lxml的xpath和Beutifulsoup来抓取所有IP。当然,也可以使用正则表达式,有很多种方式。代码如下:
如您所见,通过这种方法,很容易获得这100个IP,包括它们的协议,IP和端口号。这里我用“#”符号分隔,在使用之前,只有spilt()方法,就可以提取信息。
我已获得一个 IP,如何验证该 IP 是否可用?一种解决方案是请求一个网页并设置超时超市时间,如果超时服务器没有响应,则IP不可用。有关此处的实现,请参阅请求的高级用法:
这种设置超时的验证方法是常用方法,很多人都是这样验证的。于是博主想到了一个问题,还有别的办法吗?想了想,我想出了一个方法,测试了一个,验证一个IP大约需要3秒。打嗝。。当然,这个方法是我自己想出来的,没有参考,所以如果有错误,或者更好的方法,我希望能改正!在
Windows下,您可以通过在CMD中输入以下命令来检查IP连接(可以在中断中查看Mac和Linux):
代理 IP
从免费代理网站获得非常不稳定,几分钟后测试这个代理IP,你可能会发现这个IP不再可用。所以在使用代理 IP 之前,我们需要测试代理 IP 是否可用。
从上面可以看出,通过测试本地机器和代理 IP 地址之间的连接性,我们可以大致了解代理 IP 的运行状况。如果机器可以ping这个代理IP,那么我们也可以使用这个代理IP访问其他网站。这个过程是在CMD中执行的,那么Python是否提供了一种以编程方式执行此操作的方法呢?答案是肯定的,有!Subprocess.Popen() 可以创建一个在 shell 参数为 true 时通过 shell 执行的进程:
运行结果如下:
我们可以得到回报
结果,类似于在cmd中,然后我们可以根据返回信息制定相应的规则来消除不符合要求的IP。
整体代码如下:
从上面的代码中可以看出,我制定的规则是,如果丢包数大于 2,则认为 IP 不可用。大于 200ms 的平均 ping 时间也被放弃。当然,我的要求有点严格,规则可以酌情放宽:
从打印结果可以看出,第一个随机选择的IP被丢弃,第二个随机选择的IP可用。
我刚刚实现,建立一个代理IP
池并检查IP是否可用,如果有兴趣,也可以将获取到的IP放入数据库,但是我没有这样做,因为我觉得免费获取的代理IP,失败速度很快,随便用。当然,你也可以自己编写代码来尝试 reqeusts 的 GET 请求,并通过设置 timeout 参数来验证代理 IP 是否可用,因为方法很简单,所以这里不再赘述。
此外,我们还可以创建一个用户代理列表并列出更多点。它也与代理 IP 相同,每次访问随机选择一个。在一定程度上,还可以避免被服务器阻止。
3 小结
如果您被阻止并且找不到原因,请参阅以下清单来帮助您诊断问题所在。
使用免费的代理IP也是有限的,即不稳定。更好的方法是花钱购买可以动态切换 IP 的阿里云服务器,这样 IP 就可以动态无限变化!
以上内容整理自《Python网络数据集》,对自己一点点谨慎。重要的事情要再说一遍:当我们抓取别人的网站时,我们也会想到他们!
技巧:*敏*感*词*教你如何关联谷歌站长工具
不知道如何优化您的网站?针对搜索引擎优化您的网站的一个重要步骤是将您的 WordPress 网站添加到 Google 网站站长工具。今天小鲸鱼就来给大家讲讲谷歌站长工具的一些小知识。
谷歌搜索控制台
谷歌搜索控制台
是Google搜索引擎下的一款免费站长工具,类似于我们目前国内的百度资源平台和其他搜索引擎的站长平台。
通过注册和验证网站域名,您可以直观的看到网站在搜索引擎中的一些点击显示数据,以及该工具提供的其他管理功能。
同时,您还可以收到搜索引擎对网站检测的一些提示或通知,有利于在搜索引擎中越来越好地管理站点性能,也是每个站长和网站SEOer必备的工具。
1.如何关联谷歌站长工具
方法一:
第一步是将HTML文件安装到你的Siteground网站的根目录文件夹中并下载它的文件包,然后打开你的Siteground找到你的网站域名,点击进入旁边的“Sitetools”;
第二步,在“站点”中找到“文件管理器”,在右侧找到“public_html”文件夹,点击右上角的“文件上传”,将之前保存的html文件上传到“public_html”文件夹中;
第三步回到谷歌站长工具验证
第四步,将HTML标签添加到您网站的GA代码中
第五步,复制上面的标记,然后到你的网站后台,找到外观>自定义布局>GA代码;
第六步,进入后,如果里面没有代码,则删除提示代码,将复制的代码放在这里;如果有代码,直接放在现有代码后面。
第七步,完成以上操作并保存后,返回谷歌站长工具页面进行验证。
" />
第八步,关联服务器中的DNS记录,复制上面的记录值,到你的域名服务器购买处(这里以阿里云为例),找到你的网站域名管理,点击解析你的域名name,点击下面的Analysis,进入后,点击下面的new record value,添加一条TXT记录值;
Step 9,然后将刚刚复制的TXT记录值放入下方的记录值框中,并保存;
第十步,同理,完成以上操作后,返回谷歌站长工具进行验证。
验证成功后,您的谷歌网站管理员工具将被安装。
方法二:
首先,你需要安装一个谷歌分析工具,然后我们进入正题。
第一步,如果是在Google Analytics工具页面设置的,直接在“管理”页面找到“产品关联”,找到并点击“所有产品”;
第二步,找到“Search Console”,点击下方的“Associate Search Console”;
第3步,然后点击下面的“添加”
第四步,点击下面的“添加资源”开始添加你的站长工具。
第五步,在右下方的站长工具中填写你需要分析的网址,点击“继续”
第六步,如果你之前的Google Analytics代码添加正确,那么站长工具会自动帮你验证成功
2. Google Webmaster 的功能
1定位与语言
" />
如果您的网站有不同的语言版本或特定的目标国家,您可以使用此功能向 Google 识别您的网站:具有不同语言版本的 URL 并告诉 Google 它是哪个目标国家?当有人打开您的网站时,它可以自动识别该地区的语言。
一个。在谷歌站长工具左侧边栏,打开国际定位功能
b. 也可以设置网站主要服务于哪个国家或地区,但是外贸网站都是面向所有海外国家开放的,所以如果没有特殊需求可以不用设置。
2 检查网站加载速度
单击“网站工具集”并在下面的“其他资源”下找到此功能。点击输入网址
3 抓取统计
在里面,你可以看到你的网站每天被谷歌抓取的页面数量、下载的数据量和下载页面所花费的时间。如果您的网站是新网站,此处的信息还可以让您了解 Google 是否已开始抓取您的网站。
4 检查网站安全问题
点击左侧边栏的“安全问题”,查看网站是否存在影响SEO的安全问题。不过一般是没有问题的,保险起见还是检查一下吧。
5 链接数
在工具中查找“链接数”后,它可以显示您网站的外部和内部链接数
6提交网站地图网站地图
网站站点地图可以帮助 Google 更快地抓取我们的网站。我们可以输入Sitemap地图的URL,点击提交。
提交成功后会在下方显示,可以看到网址数量、状态、阅读时长等信息。
7网址查询
一切搞定后,直接在顶栏输入你要检测的网址,就会出现如下图:
结合以上,谷歌站长功能强大。它可以有效直观地感受用户数据。通过网站和用户数据,可以帮助我们优化网站,进一步优化网站细节,提高搜索排名和用户体验。看完这篇讲解,相信大家已经有所了解了,赶快来尝试一下吧。