scrapy爬虫实战:伪装headers构造假IP骗过ip138.com

article/2025/10/16 3:25:34

scrapy爬虫实战:伪装headers构造假IP骗过ip138.com

  • Middleware 中间件伪造Header
    • Util.py
    • middlewares.py
    • settings.py
    • ip138.py

我们在爬虫的过程中,经常遇到IP被封的情况,那么有没有伪装IP的方案呢,对于一些简单的网站我们只要伪造一下headers就可以了。

我们一般来说想知道自己的IP,只需要访问一下 http://www.ip138.com/ 就可以知道自己的IP了
ip138.com

使用浏览器检查工具,具体查看一下
检查

就可以发现,实际上,IP信息来源于 http://2018.ip138.com/ic.asp

2018.ip138.com

最终来说就是,我们只需要访问 http://2018.ip138.com/ic.asp 就可以知道自己的IP了。那么我们今天的目标就是伪造一下headers骗过 ip138.com

Middleware 中间件伪造Header

Util.py

编写一个可以动态伪造ip和agent的工具类

#! /usr/bin/env python3
# -*- coding:utf-8 -*-import random
from tutorial.settings import USER_AGENT_LISTclass Util(object):def get_header(host='www.baidu.com',ip=None):if ip is None:ip = str(random.choice(list(range(255)))) + '.' + str(random.choice(list(range(255)))) + '.' + str(random.choice(list(range(255)))) + '.' + str(random.choice(list(range(255))))return {'Host': host,'User-Agent': random.choice(USER_AGENT_LIST),'server-addr': '','remote_user': '','X-Client-IP': ip,'X-Remote-IP': ip,'X-Remote-Addr': ip,'X-Originating-IP': ip,'x-forwarded-for': ip,'Origin': 'http:/' + host,"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.5,en;q=0.3","Accept-Encoding": "gzip, deflate","Referer": "http://" + host + "/",'Content-Length': '0',"Connection": "keep-alive"}

middlewares.py

middlewares.py 设置动态headers

from scrapy import signals
from backend.libs.Util import Util
from scrapy.http.headers import Headersclass TutorialDownloaderMiddleware(object):def process_request(self, request, spider):request.headers = Headers(Util.get_header('2018.ip138.com'))

settings.py

settings.py 配置动态Agent 启用middlewares

USER_AGENT_LIST=["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {'tutorial.middlewares.TutorialDownloaderMiddleware': 1,
}

ip138.py

# -*- coding: utf-8 -*-
import scrapyclass Ip138Spider(scrapy.Spider):name = 'ip138'allowed_domains = ['www.ip138.com','2018.ip138.com']start_urls = ['http://2018.ip138.com/ic.asp']def parse(self, response):print("*" * 40)print("response text: %s" % response.text)print("response headers: %s" % response.headers)print("response meta: %s" % response.meta)print("request headers: %s" % response.request.headers)print("request cookies: %s" % response.request.cookies)print("request meta: %s" % response.request.meta)

运行查看效果
在这里插入图片描述

伪造成功。

GitHub源代码


http://chatgpt.dhexx.cn/article/l0iB59kM.shtml

相关文章

搭建IP代理池伪装IP地址

1、下载开源IP代理池源代码 https://github.com/Python3WebSpider/ProxyPool 2、安装Redis https://github.com/MicrosoftArchive/redis/releases 3、安装相关所需的 python 模块 Windows PowerShell 版权所有 (C) Microsoft Corporation。保留所有权利。PS C:\Windows\sys…

linux如何伪装ip,如何伪装你的IP(二)

Linux上使用 IP Masquerade l 核心 2.0.x 的原始程式码可以从这里取得 ftp://ftp.funet.fi/pub/Linux/kernel/src/v2.0/ l 可载入核心模组,最好是 2.0.0 或更新的版本,可以从这里取得 http://www.pi.se/blox/modules/modules-2.0.0.tar.gz (至少需要 modules-1.3.57 ) l 设定…

PHP 伪装IP地址 数据采集 GET、POST请求

大家都知道,你采集别人的网站,可能封掉你的IP地址,那么肯定就不能用自己的真实IP地址了,今天我们就浅谈PHP伪装IP地址,进行数据采集! 首先,我用的是TP5框架,把IP伪装及数据采集封装…

android伪装mac地址,安卓手机如何伪装ip或者mac地址

满意答案 kgcvzz 2015.12.14 采纳率:45% 等级:9 已帮助:515人 android 是Linux内核,linux中mac地址是保存在/etc/init.d/networ 文件中的 但是在android中mac地址是直接写在硬件中的,需要通过API 才能获取 1、Android 获取本机Mac 地址方法…

ip地址伪装php,技术教程:如何使用浏览器插件伪装IP地址

步骤: 1、安装插件Modify Headers 进入 2、在浏览器右上角点小图标,选择打开“Open ModifyHeaders”,如下图所示。 3、如图依次选择 Add → 输入 X-Forwarded-For → 自定义IP地址 → 点Add按钮完成添加。 举一反三:可添加其他HTT…

08_基于IP的伪装

文章目录 爬虫的伪装动态IP接入指南IP代理中间件编写Setting中配置Middleware 博文配套视频课程:24小时实现从零到AI人工智能 爬虫的伪装 如果不进行伪装则我们每次采用相同IP抓取数据时可以会被目前服务器的防火墙之别,伪装有两种:配置代理I…

如何通过反向代理实现伪装IP?

首先说明什么是反向代理? 一句话解释,就是隐瞒真实IP让代理服务器IP暴露,客户在访问资源的时候,以为是从这个暴露IP获得的资源。 不好理解的话,先想想正向代理的实例——虚拟专用网络: 反向代理&#xff…

vscode+web_网页预览插件live preview/live server preview/live server

文章目录 live preview启动内部预览窗口vscode内启动浏览器dev tool窗口 pity live server preview启动 live server启动 live preview download 插件不错,支持实时预览,还支持调试工具 启动 内部预览窗口 或者用command palette: command palette: vscode内启动浏览器dev t…

【vue】 接口返回的preview是张图片,前端如何渲染

文章目录 问题解决第一种第二种 效果 接口返回的preview是张图片,前端如何渲染 问题 可以看到这里接口返回的preview是一张图片,response里什么也没有 前端(vue2)如何将图片渲染到页面上呢? 解决 第一种 也是最简单…

WinDbg Preview简单使用

WinDbg Preview简单使用 CLR程序调试入门dump包的抓取WindowsLinux 基本dump包分析SOS 调试扩展获取对应的clr.dll以及sos.dll加载基于sos的符号加载sos异常及处理方法 CLR程序调试入门 程序不光要能跑,还要能一直稳定的跑。前段时间线上接口时不时就会整体Down一下…

android studio preview 不显示

我们在使用android studio开发的时候,可以直接预览页面,右上角 preview 非常方便。 但是有时候我们会碰到一些问题 1.点开不显示预览画面 解决:默认第一次是不显示的,需要成功编译一次后可显示。如果编译后不显示 ,…

VS Code Python预览插件Python preview的使用

VS Code Python预览插件的名称为Python preview,作者为dongli,当前版本0.0.4。该插件可提供简单的调试工具和代码预览。 安装与使用 安装 在插件搜索框输入Python preview安装。 简易使用 插件安装成功后,编辑器右上角将添加一个预览按钮…

Android Camera APP preview buffer 总体流程

文章目录 前言Camera preview 总体概括Establish snapdragon surfaceview surfaceCamera Device Create Preview Session Camera preview 详细流程Camera Buffer FlowCamera Service dequeue bufferGraphic buffer is transmit by binder to surfaceflinger process Display mo…

微软 Visual Studio 2022 Preview 3 发布

本文转载自IT之家 IT之家 8 月 13 日消息 时隔近一个月,微软终于发布了 Visual Studio 2022 Preview 3 版本,本次更新带来了关于个人和团队生产力、现代开发和不断创新为主题的新功能。 个人和团队生产力 在 Visual Studio 2022 Preview 3 中&#xff…

VMware Workstation创建Windows 10 Insider Preview (Release Preview Channel) - Build 19045.1826虚拟机

大家好,还记得我们上次干了什么?没错,我们创建了一个Windows 11 Insider Preview (Dev Channel) - Build 25179的虚拟机,那我们这次就来创建一个Windows 10 Insider Preview (Release Preview Channel) - Build 19045.1826的虚拟机…

VS code Markdown Preview Enhanced 预览白色改为黑色

VS code Markdown Preview Enhanced 预览白色改为黑色 1. 预览默认为白色2. 预览改为黑色参考 1. 预览默认为白色 2. 预览改为黑色 参考 Markdown Preview Enhanced doc

配置LiveServer时没有use browser preview设置栏目

在配置VScode显示html文件时,出现了use browser preview设置栏不存在: 在最新的VScode中: 由于此扩展已经弃用,所以在配置Live Server时只有20个设置项 解决方法: 打开Live Server扩展: 点击卸载下的下拉选…

Android 简单使用studio preview(预览)

简单使用studio preview(预览) 创建对应分辨率的设备 1.打开AVD Manager,开始创建所要适配的设备 2.添加硬件配置 3.添加屏幕尺寸和分辨率,其他默认即可。 4.创建完成以后,选择这个的硬件配置 5.接着选择一个System Image 6.…

windows11补充——Insider Preview 10.0.22623.1028 (ni_release)

大家好,我是涵子。大家应该知道了上次的windows11了吧!这一次,我的电脑升级成了——Windows 11 Insider Preview 10.0.22623.1028 (ni_release)!这个版本中的一些内容是关于windows12的! 注意:本次文章较短…

Visual Studio Code实时预览插件live preview的安装和使用

初学前端时,要是频繁的预览写好的页面,未免会显得繁琐而且拉低学习效率。 这里推荐使用liver preview这个VScode插件,实现在VScode内部实现边写边预览的效果。 1.安装插件: 打开VScode》点击‘拓展’》搜索‘live preview’》点…