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地址,则说明设置或您要使用的代理有问题。