scrapy配置user-agent中间件和ip代理中间件

scrapy配置user-agent中间件和ip代理中间件使用了 fake 库 fromfake useragentimp 配置 headersclass object 随机更换 user agentdef init self crawler super RandomUserAg self init self ua UserAgent

# 使用了fake库 from fake_useragent import UserAgent # 配置headers class RandomUserAgentMidddlware(object): # 随机更换user-agent def __init__(self, crawler): super(RandomUserAgentMidddlware, self).__init__() self.ua = UserAgent() # 从配置文件读取随机类型 self.ua_type = crawler.settings.get('RANDOM_UA_TYPE', 'random') @classmethod def from_crawler(cls, crawler): return cls(crawler) def process_request(self, request, spider): # 通过配置文件的随机类型进行调用 def get_ua(): return getattr(self.ua, self.ua_type) request.headers.setdefault('User-Agent', get_ua()) # 使用了阿里云的IP代理服务 from myscrapy.aliproxy import get_proxy_ip # 配置代理 class ProxyMiddleware(object): def process_request(self, request, spider): request.meta['proxy'] = get_proxy_ip()

setting中开启中间件:

DOWNLOADER_MIDDLEWARES = { 'myscrapy.middlewares.MyscrapyDownloaderMiddleware': 543, 'myscrapy.middlewares.RandomUserAgentMidddlware': 0, 'myscrapy.middlewares.ProxyMiddleware': 1, }

封装阿里云IP代理:

import urllib.request import json def get_proxy_ip(): host = 'http://zip.market.alicloudapi.com' path = '/devtoolservice/ipagency' method = 'GET' appcode = 'xxxxxxxxxxxx' querys = 'foreigntype=0&protocol=0' bodys = {} url = host + path + '?' + querys request = urllib.request.Request(url) request.add_header('Authorization', 'APPCODE ' + "xxxxxxxxx") response = urllib.request.urlopen(request) content = response.read() if (content): load = json.loads(str(content, encoding='utf8')) address_ = load['result'][0]['address'] return address_ 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218368.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午7:26
下一篇 2026年3月18日 上午7:26


相关推荐

  • 使用Django 测试客户端一起测试视图,模板和URL

    使用Django 测试客户端一起测试视图,模板和URL

    2022年4月2日
    43
  • QComboBox样式设置——Qt

    QComboBox样式设置——Qt前言我对 qss 只会一些简单的 所以每次都得查资料 自己调 好麻烦 特别是之前一篇博客关于菜单样式的设置 这次以为两者相似 结果不是的 这个 QComboBox 下拉框的样式设置有稍微复杂 有些关键点得记住 所以用这篇博客记录下 代码和说明有图有真相 我现在将 QComboBox 样式表中的部分关键词标出来 更直观一些 QComboBox 常规样式图中 QComboBox 我只圈出了上面一部分 按理说整个都是属于 QComboBox 但

    2026年1月16日
    4
  • Linux 云计算运维入门:从 Socket 底层到 Apache 实战,HTTP 服务全知识点拆解

    Linux 云计算运维入门:从 Socket 底层到 Apache 实战,HTTP 服务全知识点拆解

    2026年3月14日
    2
  • 密集人群计数综述

    密集人群计数综述转载自 https www codercto com a 42773 html 交流讨论 901373769 本期我们迎来了编辑团队的新成员 来自复旦大学计算机的在读博士老田和电闪雷鸣 哈哈 邀请不到大牛 把大牛的学生挖过来也不错 本期他们将为我们介绍人群计数的相关技术和进展 欢迎感兴趣的朋友阅读前言

    2026年3月17日
    2
  • pycharm更新python_当我有两个版本的python时,如何更新PyCharm中的pip?

    pycharm更新python_当我有两个版本的python时,如何更新PyCharm中的pip?我已经在 Windows10 上安装了 Python2 7 和 Python3 5 在当前的 PyCharm 项目中使用 python2 7 并且该项目的 python 解释器设置为 python2 7 现在 我打开 PyCharm 设置 并想更新 python2 7 的 pip pip 版本为 8 1 1 我单击了 update 希望将其更新为最新版本 但是 在提示 成功更新 之后 我注意到 pip 的版本仍为 8

    2026年3月27日
    2
  • 目标检测与图像分割的区别_语义分割和实例分割最新论文

    目标检测与图像分割的区别_语义分割和实例分割最新论文计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢?1、ImageClassification(图像分类)图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如下图的例子是含有person、sheep和do…

    2022年8月23日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号