Scrapy
按照分步 Python 指南将 Oxylabs 网页解锁器与 Scrapy 集成
集成 Scrapy 并使用 Oxylabs 网页解锁器 以改善网页访问、处理 CAPTCHA,并自动执行 JavaScript 渲染。本指南涵盖请求元数据和自定义下载中间件。
1
选择集成方式
Scrapy 支持通过网页解锁器路由流量的两种方法:Request Meta 参数(按请求配置)和自定义下载中间件(项目级配置)。
方法 1:请求 Meta 参数
将网页解锁器身份验证详情直接传入单个 scrapy.Request 实例,使用 meta 字典。你也可以在请求的网页解锁器功能标头中提供自定义 请求头 参数。
import scrapy
class UnblockerSpider(scrapy.Spider):
name = "unblocker_spider"
def start_requests(self):
url = "https://sandbox.oxylabs.io/products"
proxy_uri = "http://YOUR_USERNAME:YOUR_PASSWORD@unblock.oxylabs.io:60000"
# 可选的网页解锁器自定义标头
headers = {
"x-oxylabs-render": "html", # 启用 JavaScript 渲染
"X-Oxylabs-Geo-Location": "Germany", # 设置地理定位
}
yield scrapy.Request(
url=url,
callback=self.parse,
headers=headers,
meta={"proxy": proxy_uri}
)
def parse(self, response):
for product in response.css(".product-card"):
yield {
"title": product.css(".title::text").get(),
"price": product.css(".price-wrapper::text").get(),
}方法 2:自定义下载中间件(推荐)
要通过 网页解锁器 全局路由所有蜘蛛请求,而无需修改单个请求方法,请实现一个自定义的 Scrapy 下载中间件。
打开 Scrapy 项目的 middlewares.py 文件并添加 OxylabsWebUnblockerMiddleware 类:
class OxylabsWebUnblockerMiddleware:
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.settings)
def __init__(self, settings):
self.username = settings.get("OXYLABS_UNBLOCKER_USER")
self.password = settings.get("OXYLABS_UNBLOCKER_PASS")
self.endpoint = settings.get("OXYLABS_UNBLOCKER_ENDPOINT", "unblock.oxylabs.io:60000")
def process_request(self, request, spider):
proxy_uri = f"http://{self.username}:{self.password}@{self.endpoint}"
request.meta["proxy"] = proxy_uri然后注册中间件,并指定你的凭据 settings.py:
# 网页解锁器 设置
OXYLABS_UNBLOCKER_USER = "YOUR_USERNAME"
OXYLABS_UNBLOCKER_PASS = "YOUR_PASSWORD"
OXYLABS_UNBLOCKER_ENDPOINT = "unblock.oxylabs.io:60000"
# Enable Downloader Middleware
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.OxylabsWebUnblockerMiddleware": 100,
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 110,
}2
3
最后更新于
这有帮助吗?

