Scrapy代理101:如何为Scrapy设置代理

尽管Scrapymake使您轻松开发可扩展的Web爬虫和爬网程序,而无需使用代理,但在许多情况下它们没有用。让我向您展示如何为Scrapy设置代理以及最佳使用代理。

对Web抓取感兴趣或开发人员,我需要您记住,即使Web抓取是合乎道德和法律的,网站也不希望其网页和数据被抓取,他们将在其内部做任何事情处置来阻止你。不幸的是,由于IP地址是计算机网络(例如Internet)中的通用标识手段,因此IP跟踪是最重要的技术,因此只有少数有效的技术可供他们使用。尽管IP跟踪对他们来说似乎有效,但作为网络抓取工具和自动化开发人员,我们很幸运地拥有代理,可以帮助降低IP跟踪和阻止的效率。

Scrapy是一个流行的Web抓取框架,可用于开发可伸缩的抓取器和搜寻器。作为Web抓取工具,Scrapy支持代理,因此您很可能会在抓取项目中使用代理。如果您不知道如何随意设置代理,请继续阅读本文,我将在本文中向您展示如何完成。


Scrapy –概述


与Requests和BeautifulSoup之类的东西不同,Scrapy是一个完整的Web抓取和抓取框架,您不能仅使用它来发送HTTP请求;您还可以使用它来解析HTML文档并执行其他任务。实际上,仅Scrapy就像是Requests,BeautifulSoup和其他抓取库的组合。关于此工具,您会喜欢的一件事是它的功能广泛,并且可以选择添加自定义功能。使用Scrapy,您不仅可以构建Web抓取工具或搜寻器,还可以轻松地将其部署到云中。

这个抓取框架是由Scrapinghub开发的,Scrapinghub是受欢迎的数据服务提供商,也对数据提取工具的开发感兴趣。Scrapy于2008年首次发布。该工具是用Python编写的,用于Python蜘蛛开发。它可以说是最快的Python框架-也是最受欢迎和功能强大的。与Scrapy相关的主要问题是它的学习曲线,以及面对JavaScript丰富的网站时无助的事实。

  • Python Web爬网库和框架
  • 如何使用Javascript从网站抓取HTML?

Scrapy代理设置

与Requests和BeautifulSoup的组合相比,Scrapy的学习曲线更为陡峭。但是,毫无疑问,它更具可伸缩性,更适合复杂的开发。在设置代理时,您可能会想知道该过程实际上非常简单。您可以遵循两种方法在Scrapy中设置代理,这些将在下面讨论。

  • 方法1:通过将其作为请求参数传递来设置代理

在Scrapy中设置代理的最简单方法是将代理作为参数传递。如果您要使用特定的代理,则此方法是完美的。Scrapy中有一个名为Http-Proxy-Middleware的中间件,该中间件从请求中获取代理值并正确设置。以下是如何通过Requests参数在Scrapy中设置代理的示例代码。

def start_requests(self):

    for url in self.start_urls:

        return Request(url=url, callback=self.parse,

                       headers={"User-Agent": "scrape web"},

                       meta={"proxy": "http:/154.112.82.262:8050"})
  • 方法2:创建自定义代理中间件

对于更模块化的方法,我建议您创建一个自定义的中间件。我将向您展示如何创建自定义代理中间件并将其添加到您的中间件列表中。中间件基本上是Scrapy在处理请求时将运行的一段代码。以下是您可以使用的自定义中间件模板。

from w3lib.http import basic_auth_header

class CustomProxyMiddleware(object):

    def process_request(self, request, spider):

request.meta[“proxy”] = "http://192.168.1.1:8050"

request.headers[“Proxy-Authorization”] =

basic_auth_header(“<proxy_user>”, “<proxy_pass>”)

编写完上面的内容之后,您可以启用它并将其放在Http-Proxy-Middleware之前,如下所示。

DOWNLOADER_MIDDLEWARES = {

    'myproject.middlewares.CustomProxyMiddleware': 350,

    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,

}

如何验证Scrapy代理

如果您按照上述任何步骤操作并填写了正确的代理数据,则代表已从Scrapy端设置。但是他们在工作吗?您将需要对其进行测试。为此,请将请求发送到任何代理查询工具(例如Whatismyip.com) –如果它显示您的真实IP地址,则说明设置或您要使用的代理有问题。


Scrapy项目的旋转代理

Scrapinghub有自己的代理服务Crawlera,您可以将其与Scrapy一起使用。Crawlera是按请求定价的。如果您希望使用一般的代理服务,则可以从以下代理提供者之一中进行选择-它们都是住宅代理,并且我们已经测试了它们的代理-并且可以信赖,他们仅出售有效的代理。您将需要旋转代理,以避免旋转代理的障碍,并管理可能很快变坏的代理列表。


Luminati

  • IP池大小:超过7200万
  • 地点:世界所有国家
  • 允许并发:无限
  • 允许的带宽:从40GB开始
  • 费用: 40GB,每月500美元起

Luminati可以说是市场上最好的代理提供商。他们出售住宅代理,移动代理和数据中心代理。您会喜欢这个提供商的一件事是他们提供7天的免费试用期。它们拥有最大的住宅代理池,拥有来自所有国家和每个受支持国家/地区的主要城市的7200万个住宅IP。

就抓取而言,它们是最快的速度之一,并且已证明它们可以与所有流行的Web服务一起使用。它们的代理是旋转代理,并在每次请求或定义的时间段后更改IP地址。


Smartproxy

  • IP池规模:超过4000万
  • 地点:全球195个地点
  • 允许并发:无限
  • 允许的带宽:从5GB开始
  • 费用: 5GB每月75美元起

虽然Luminati代理是安全,可靠和快速的,但最低货币要求会使大多数小型刮板机感到恐惧,因为您至少需要500美元。对于最低货币要求较小的高级提供商,您可以选择Smartproxy。Smartproxy拥有超过4000万个住宅IP的池。

他们同时支持高轮换代理和基于会话的代理,这将帮助您将会话维护长达10分钟。Smartproxy已为全球约195个国家和8个主要城市提供支持。


Shifter

  • IP池大小:超过3100万
  • 地点: 130个国家
  • 允许并发:无限
  • 费用: 10个端口每月249.99美元起

Shifter支持主要城市和全球许多国家。在受支持的位置,它总共有超过3,100万个住宅反向连接IP,使其成为市场上最大的代理网络之一。移位代理的定价是基于端口而非带宽的,就像上面讨论的其他定价一样。

借助Shifter,您将享受无限的带宽使用情况,非常适合抓取消耗大量带宽的任务。移位器反向连接代理每5分钟更改一次IP。您可以将它们的代理用于快速,安全且可靠的大量抓取任务。

结论

使用或不使用Scrapy,如果要爬网,都必须使用代理。Scrapy支持使用代理,在Scrapy中设置代理非常简单。使用上面讨论的方法,您应该能够立即在Scrapy上设置代理。如果您不想使用Crawlera,我还建议了与Scrapy一起使用的最佳旋转代理。