你想避免在使用Python从网上爬取数据或执行其他任务时被拦截吗?那么你就来对了,因为下面的文章讨论了在Python中避免拦截的关键方法。

网络自动化使我们在互联网上的任务更容易。有些任务甚至在没有网络自动化的情况下是不可能进行的,特别是在需要大规模的时候。

即使网络自动化对网络很重要,但一般来说,网络自动化却被大多数网络服务所讨厌。没有网站想要自动化访问–不是为了搜刮其数据或以自动化方式进行购买。

如果你从事网络爬取或其他形式的自动化,你会同意我的观点,即阻断是正常的,除非你采取有意识的措施来避免它们。对我们来说,幸运的是,你实际上可以避免被屏蔽。

如果你是一个Python开发人员,希望避免被Python封锁,这篇文章是为你写的。重要的是你要知道,你需要考虑一些事情,并使用一些技术手段来成功地避免被封锁,因为网站在检测与机器人有关的活动方面正变得越来越聪明。

如果你知道一个网站是如何检测机器人活动的,你可以绕过检查,使你的机器人看起来尽可能的人性化。


避免被Python封锁的8个经验之谈

Python只是用于开发网络搜刮器的编程语言之一。然而,它实际上是一般的机器人开发的流行语言之一。即使你不是Python开发者,这里描述的方法也可以应用于你选择的编程语言。下面是一些你可以避免被Python封锁的方法。

1. 使用轮换代理服务器

在网络上进行自动化操作时,最基本的方法是通过使用代理服务器来避免屏蔽。代理服务器就是为你提供替代IP地址的中介服务器。

对于他们的轮换同行来说,你不只是提供一个IP地址–分配给你的IP地址是经常改变的。如果你必须避免被封锁,频繁地更换IP地址是相当重要的。

事实证明,每个网站的每个IP地址都有一个请求限制许可。如果你试图从同一个IP地址发送更多的请求,你很可能会被阻止。这个请求限制不为公众所知,并且根据网站和任务的不同而不同。

但有一点我们知道是肯定的–经常更换IP将帮助你避免因从一个IP地址发送太多的请求而被阻止。从本质上讲,机器人会在短时间内发送太多的请求,他们需要轮流代理来通过网站的反垃圾邮件系统。

我们建议你使用支持自动IP轮换的高质量住宅代理。Bright Data和Smartproxy是一些最值得推荐的住宅代理网络,具有巨大的IP池,良好的位置支持,而且相当不易被发现。

  • BrightData–最佳代理服务器 <专家评比中排名第一>
  • Smartproxy– 快速住宅代理服务器 <最佳价值选择>
  • Soax– 最好的移动代理池<Instagram自动化的最干净IP>。

对于某些任务,住宅代理将无法工作 – 你将需要移动代理。你也可以从Bright Data购买轮流移动代理。Soax是另一个能工作的旋转移动代理的供应商。在Python代码中使用代理很简单。下面是一个使用第三方请求库的示例代码。

import requests proxies = { 'http':'http://proxy.example.com:8080', 'https': 'http://secureproxy.example.com:8090', } url = 'http://mywebsite.com/example' response = requests.post(url, proxies=proxies)

2. 使用验证码解决方法

网站正日益变得越来越聪明,仅仅使用代理是不够的。即使使用代理,他们也能猜出你是否是一个机器人。作为一个机器人开发者,你会遇到的一些流行的阻止形式是Captchas

当你被击中时,除非你能够解决它,否则你的任务将在那一刻结束。如何处理这个问题很简单–利用验证码解决器。有了验证码解决器,你就能够解决出现的验证码,从而使你能够继续你的自动化任务而不受阻碍。

说到解决验证码,市场上有许多解决验证码的服务。2Captcha和DeathByCaptcha是一些流行的选择,供你选择。虽然有些验证码可以通过人工智能来解决,但现在大多数验证码都需要人类,因此,这些验证码解决者空有来自第三世界国家的人类验证码解决者来帮助解决验证码。

出于这个原因,不要指望得到免费的验证码解决方法,特别是在处理复杂的验证码时,不能用人工智能来解决。


3. 设置自定义用户代理和其他相关标题–并旋转它们

网络服务检测机器人的一个最简单的方法是通过他们的用户代理和其他相关头信息。Python是一种流行的网络搜刮编程语言,网站知道Python及其流行的HTTP库所设置的默认头信息。

以请求库为例,使用 “python-requests/2.25 “作为默认用户代理字符串。这将使你马上得到。过去,我试着在没有设置自定义用户代理头的情况下使用Python来搜刮亚马逊,结果被阻止了。在将用户代理设置为我的Chrome浏览器的用户代理后,请求通过了。

用户代理是为了识别客户端。由于网站只允许普通用户,你最好使用流行浏览器的用户代理。这里有一个网页,你可以找到流行网络浏览器的用户代理的详细信息。同样重要的是,你要知道除了用户代理之外,还有其他相关的头信息需要设置。

这因网站不同而不同。使用你的浏览器 “开发工具 “中的网络工具,检查你的浏览器在向你的目标网站发送请求时设置的必要标头。

一些流行的请求头包括 “Accept”、”Accept-Encoding “和 “Accept-Language”。如果你使用开发者工具,那些对你的目标网站来说是独特的、必须的请求头将会向你揭示。仅仅设置用户代理是不够的。你还需要旋转用户代理。下面是一个关于如何在Python中设置用户代理字符串的代码。

import requests headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36" } response = requests.get("http://www.kite.com", headers=headers)

4. 使用无头浏览器

你可以使用的另一个避免被屏蔽的方法是使用无头浏览器。无头浏览器是一种像真正的浏览器一样的软件,但没有浏览器的用户界面(UI)。它们大多用于自动化测试和一般的网络自动化。

在过去,你需要利用无头浏览器进行网络刮擦或其他形式的自动化的唯一原因是,如果目标网站依赖于JavaScript来渲染其内容。在当今时代,网站使用JavaScript来收集各种数据,用于生成浏览器指纹或简单的监控行为。

如果你使用常规的HTTP库,比如用于Python的request HTTP库,你的目标网站可以看出你使用的是机器人而不是浏览器。对于Python开发者来说,Selenium是工作的工具。Selenium将网络浏览器自动化,这样你的机器人就能像一个真正的浏览器一样。

它可以触发事件,就像点击、滚动和所有种类的事件。这甚至会减少验证码的发生,因为你的活动将是如此真实。使用Selenium或任何其他工具实现浏览器自动化的唯一主要问题是,与使用常规HTTP库相比,它的速度较慢。


5. 设置请求之间的随机延迟

你容易被封锁的原因之一是,你的机器人在短时间内发送了太多的网络请求。如果你在一个网站上登录了一个账户,那么只要知道代理不会帮助你–你被知道了。与其尝试使用代理,你还不如节制你发送请求的速度。

如前所述,如果你超过了他们的请求限制,大多数网站会阻止你。处理这个问题的唯一主要方法是在你的代码中设置延时。对于python,你可以使用 “时间 “类中的 “睡眠 “方法来设置请求之间的延迟。除了看到延迟之外,你最好让延迟随机化,因为以相同的时间间隔发送请求也会让你成为一个机器人。


6. 避免Honeypots

网站的反刮擦技术正变得狡猾。他们检测网络搜刮者的方法之一是设置Honeytraps。Honeytraps基本上是在一个页面上添加无形的链接。链接是经过伪装的,所以普通网民不会看到它们。

该链接将其CSS属性显示为none {display:none}或可见性为hidden {visibility:hidden}。有了这些属性值,这些链接对眼睛来说是不可见的,但自动机器人会看到它们。一旦有对这种URL的访问,网站将阻止进一步的请求。

有时,他们可以变得更加聪明。他们不使用任何上述属性,而只是在背景的冷色调为白色时,将URL的冷色调设置为白色。这样一来,希望避开显示或可见度值设置为不可见的URL的网络刮削者仍然会被困住。

出于这个原因,你应该以编程方式获得所有要抓取的URL,并确保它没有会使它们被隐藏的属性或CSS设置。应避免任何被检测到的人,以避免被检测到和被阻止。


7. 取而代之的是搜刮谷歌缓存

有时,你的目标网站可能只是一个难以破解的坚果。如果你不想处理试图避免被封锁的麻烦,你可以从谷歌索引中搜刮。

对我们来说,幸运的是,谷歌保留了其索引中可用页面的缓存。好消息是,它不像谷歌搜索平台本身那样受到保护。你可以从这个索引中抓取信息,省去了对付反垃圾邮件系统的麻烦。要从谷歌的缓存中获取信息,请使用这个URL。“http://webcache.googleusercontent.com/search?q=cache:YOUR_URL”。将YOUR_URL替换为你的目标页面的URL。

但是,您必须知道,并不是所有的网页都可以在Google Cache中找到。任何在谷歌上无法使用的网页,如受密码保护的网页,都无法在谷歌缓存中找到。

同样重要的是,有些网站即使在谷歌上可以找到,但却阻止谷歌缓存其网页供公众访问。新鲜度的问题也是需要考虑的。如果一个页面的数据经常变化,在这种情况下,谷歌的缓存就没有用了–对于不受欢迎的网站来说,这种情况就更糟糕了,因为抓取的时间间隔很长。


8. 使用Scraping APIs

你避免被封杀的最后手段是使用Scraping API。 Scraping API是REST API,可以帮助你从网站上提取数据,而不需要你处理封杀的问题。大多数搜刮API处理代理管理、无头浏览器和验证码。有些甚至带有分析器,使你更容易提取数据点。

刮削API的一个好处是,你只需为成功的请求付费–这使他们更加努力地提供服务,因为只有在他们赚钱的时候才会这样。使用刮削API,你只需要关注数据而不是区块。

它还可以帮助你避免为管理网络爬虫和网站变化而烦恼。目前,ScraperAPI、ScrapingBee和WebScraperAPI是最好的搜刮API。它们的价格也很合理。

最好的3个网络爬虫API


总    结

上面描述的方法是一些最好的方法,你可以用来避免在Python中自动化任务时受阻。上面描述的方法的一个好处是,它们不是Python所独有的。

在进行网络刮削或其他形式的自动化时,避免被阻止的方法不是任何编程语言所独有的。你也可以在其他语言中应用它们。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles