scrapy 解决ip问题

Scrapy抓取西刺高匿代理ip 如题:因为想试试代理ip,所以就想着在西刺上爬一些ip用用如上两节所示,具体如何建立Scrapy工程的细节不在赘述。scrapy startproject xiciscrapy genspider xici http://www.xicidaili.com/nn/ 建立工程后,使用IDE打开,首先编辑item#items.py # -*- coding: utf-8 -*-# Define here 阅读详情

1、首先写一个脚本proxies.py 自动获取代理ip

# *-* coding:utf-8 *-*
import requests
from bs4 import BeautifulSoup
import lxml
from multiprocessing import Process, Queue
import random
import json
import time
import requests

class Proxies(object):


    """docstring for Proxies"""
    def __init__(self, page=3):
        self.proxies = []
        self.verify_pro = []
        self.page = page
        self.headers = {
        'Accept': '*/*',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8'
        }
        self.get_proxies()
        self.get_proxies_nn()

    def get_proxies(self):
        page = random.randint(1,10)
        page_stop = page + self.page
        while page < page_stop:
            url = 'http://www.xicidaili.com/nt/%d' % page
            html = requests.get(url, headers=self.headers).content
            soup = BeautifulSoup(html, 'lxml')
            ip_list = soup.find(id='ip_list')
            for odd in ip_list.find_all(class_='odd'):
                protocol = odd.find_all('td')[5].get_text().lower()+'://'
                self.proxies.append(protocol + ':'.join([x.get_text() for x in odd.find_all('td')[1:3]]))
            page += 1

    def get_proxies_nn(self):
        page = random.randint(1,10)
        page_stop = page + self.page
        while page < page_stop:
            url = 'http://www.xicidaili.com/nn/%d' % page
            html = requests.get(url, headers=self.headers).content
            soup = BeautifulSoup(html, 'lxml')
            ip_list = soup.find(id='ip_list')
            for odd in ip_list.find_all(class_='odd'):
                protocol = odd.find_all('td')[5].get_text().lower() + '://'
                self.proxies.append(protocol + ':'.join([x.get_text() for x in odd.find_all('td')[1:3]]))
            page += 1

    def verify_proxies(self):
        # 没验证的代理
        old_queue = Queue()
        # 验证后的代理
        new_queue = Queue()
        print ('verify proxy........')
        works = []
        for _ in range(15):
            works.append(Process(target=self.verify_one_proxy, args=(old_queue,new_queue)))
        for work in works:
            work.start()
        for proxy in self.proxies:
            old_queue.put(proxy)
        for work in works:
            old_queue.put(0)
        for work in works:
            work.join()
        self.proxies = []
        while 1:
            try:
                self.proxies.append(new_queue.get(timeout=1))
            except:
                break
        print ('verify_proxies done!')


    def verify_one_proxy(self, old_queue, new_queue):
        while 1:
            proxy = old_queue.get()
            if proxy == 0:break
            protocol = 'https' if 'https' in proxy else 'http'
            proxies = {protocol: proxy}
            try:
                if requests.get('http://www.baidu.com', proxies=proxies, timeout=2).status_code == 200:
                    print ('success %s' % proxy)
                    new_queue.put(proxy)
            except:
                print ('fail %s' % proxy)


if __name__ == '__main__':
    a = Proxies()
    a.verify_proxies()
    print (a.proxies)
    proxie = a.proxies
    with open('proxies.txt', 'a') as f:
       for proxy in proxie:
             f.write(proxy+'\n')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

2、接下来修改代理文件middlewares.py的内容为如下:

import random  
import scrapy  
from scrapy import log  


# logger = logging.getLogger()  

class ProxyMiddleWare(object):  
    """docstring for ProxyMiddleWare"""  
    def process_request(self,request, spider):  
        '''对request对象加上proxy'''  
        proxy = self.get_random_proxy()  
        print("this is request ip:"+proxy)  
        request.meta['proxy'] = proxy   


    def process_response(self, request, response, spider):  
        '''对返回的response处理'''  
        # 如果返回的response状态不是200,重新生成当前request对象  
        if response.status != 200:  
            proxy = self.get_random_proxy()  
            print("this is response ip:"+proxy)  
            # 对当前reque加上代理  
            request.meta['proxy'] = proxy   
            return request  
        return response  

    def get_random_proxy(self):  
        '''随机从文件中读取proxy'''  
        while 1:  
            with open('G:\\Scrapy_work\\myproxies\\myproxies\\proxies.txt', 'r') as f:  
                proxies = f.readlines()  
            if proxies:  
                break  
            else:  
                time.sleep(1)  
        proxy = random.choice(proxies).strip()  
        return proxy  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

3、修改下settings文件

DOWNLOADER_MIDDLEWARES = {  
   'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware':None,  
     'youx.middlewares.ProxyMiddleWare':125,  
     'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware':None  
}



或者

DOWNLOADER_MIDDLEWARES = { 'haodf.middlewares.ProxyMiddleWare':400 }

想要ip应用起来,还要在配置文件 settings 中添加 DOWNLOADER_MIDDLEWARES = { 'demo.proxy.proxMiddleware':400 } 这里的demo是工程的名字,proxy是py文件的名,proxMiddleware是类的名字
如何解决Scrapy中的反爬虫问题:策略与实战 Scrapy反爬虫解决方案摘要 面对网站日益复杂的反爬机制,本文探讨了Scrapy框架中的常见反爬虫问题及应对策略。主要反爬手段包括IP封禁、User-Agent检测、验证码、行为监测和请求头/Cookies检查。解决方案涵盖:使用IP代理池轮换、设置真实浏览器User-Agent和请求头、通过API或Selenium处理验证码、模拟用户行为、管理Cookies以及控制请求频率。这些技巧能有效提升爬虫稳定性,帮助开发者突破反爬限制,确保数据采集顺利进行。掌握这些方法将显著提高Scrapy爬虫在复杂环境中的实 阅读详情

相关推荐

Python-爬虫-爬取二手房数据-scrapy+IP代理池

按照上面的步骤,设置好scrapy就能顺利的获取到需要的数据了获取到的数据也会保存到Excel表中通过这次用scrapy获取二手房信息,使我深深感受到了scrapy的方便与快捷,它能帮我们省下一些功夫,不用把所有的注意力都花在写爬虫上,它还提供了许多可扩展的接口和插件,如中间件、管道等,方便用户根据需求进行自定义开发;scrapy采用异步IO的方法进行网络请求和数据处理,运行速度快且效率高。

cwx_1201的博客 2712

【scrapy ip代理池】如何解决ip被限制的问题

1、首先写一个脚本proxies.py 自动获取代理ip# *-* coding:utf-8 *-* import requests from bs4 import BeautifulSoup import lxml from multiprocessing import Process, Queue import random import json import time import req

赖德发的博客 9071

Reality Capture控制点修复/合并模型

通过增加控制点/修改对齐设置参数来修复模型被分为两个部分的解决方法

草履虫建模的博客 5239

scrapy 解决IP代理池的三种方法

一.手动更新ip池 1.1在setting配置文件中新增ip池 IPPOOL=[ {“ipaddr”:”61.129.70.131:8080”}, {“ipaddr”:”61.152.81.193:9100”}, {“ipaddr”:”120.204.85.29:3128”}, {“ipaddr”:”219.228.126.86:8123”}, {“ipaddr”:”61.152.8...

guan_coder的博客 1万+

实战解析:利用Wireshark解密QQ通信协议

本文提供了一份利用Wireshark工具分析QQ通信协议的实战指南。文章详细介绍了从环境准备、捕获数据包到解析协议层的完整流程,重点演示了如何识别QQ号码字段、观察加密数据特征以及区分不同通信类型(如文本、文件传输)。通过此实践,读者可以深入理解网络分层模型和现代应用加密通信机制,提升网络协议分析与安全诊断能力。

weixin_29210727的博客 407

嵌入式学习笔记- 关于电容的纹波电流

纹波电流是导致电解电容发热、影响其寿命的关键交流电流成分。它不是一种特殊的电流,而是电路中必然存在的现象。要重视,不能忽视。必须保证电路中的纹波电流 < 电容的额定纹波电流。电容鼓包爆浆,要怀疑是否是纹波电流过大或电容ESR变大所致。希望这个解释能帮助您彻底理解这个概念!二 电容纹波电流与频率的关系在大多数情况下,频率越高,电容所能承受的额定纹波电流值越大。【个人理解:因为频率越低ESR越大,具体见第三节ESR与频率的关系】下面我为您详细解释为什么会这样,以及在实际应用中如何考虑。

qq_35771411的博客 2188

Scrapy如何设置持久化代理

本文解决问题 因为代理ip的API每次请求的ip都不一样,所以说,我们在scrapy直接使用代理时,会出现每次都要请求代理IP的API,这样的话,会大大降低爬虫的效率。 本文的代码思路是: 请求到有效的代理ip后,接下来爬取的url都会使用该代理Ip,而不再请求代理IP的API,直到代理ip不可用时,再请求代理IP的API。 代码实现 1. 配置文件settings.py 添加一个变量:USE_PROXY,用来记录当前有效的代理ip。 代码如下: USE_PROXY = None 2. 中间件层middl

h1773655323的博客 740

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6962

scrapy怎么使用代理ip?详细步骤

使用代理IP是在Scrapy爬虫中实现反反爬虫的一种常见方法,可以有效地隐藏你的真实IP地址,防止被目标网站封锁。

1423

协方差矩阵

对两个类内协方差矩阵进行对角化,可以将它们变换为对角矩阵。这个过程可以通过对每个协方差矩阵进行特征值分解来实现,从而得到它们的特征向量和特征值,进而得到它们的对角矩阵形式。这个过程的意义在于,它可以帮助我们找到一个新的坐标系,使得在这个坐标系下,每个特征之间都是独立的,从而简化了计算。具体来说,当我们使用对角协方差矩阵作为特征向量的坐标系时,它意味着每个特征之间都是相互独立的,从而方便了进一步的分析和处理。在实际应用中,对角化协方差矩阵可以用于降维、特征选择和分类等任务。

m0_55196097的博客 1万+

后仿真中的关于延时问题(物理特性角度)

大家都知道,后仿真讲究仿真时序。那么,在网表阶段,接触到后仿延时问题。今天总结一下。

那么菜的博客 1771

scrapy中设置代理的三种方式(内置(2),自定义(1))

爬虫经常会用到代理ip如果你用你的ip可能用不了多久就会被封掉的,这时候就要使用代理ip了: scrapy里面其实有内置的代理拓展,源码这边我就不一一说明了直接说如何使用: 要使用代码必须要在爬虫开始前:所以第一种的使用是在我们的start_request里面: 内置(1): def start_requests(self): # 这里是代理ip import o...

Apy 1万+

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

Qoder AI 编程工具从部署到深度使用实战详解

congge 8333

Scrapy爬虫代理配置指南:让你的爬虫如虎添翼

代理IP,顾名思义,就是代理服务器的IP地址。当我们通过代理IP访问目标网站时,目标网站看到的并不是我们真实的IP地址,而是代理服务器的IP地址。这样一来,不仅可以隐藏我们的真实IP,还可以绕过一些IP限制,提高爬虫的成功率。

2401_87251497的博客 1262

第14.10章 高翔博士最新开源框架Lightning-LM源码解读(十):在线定位run_loc_online涉及到的核心模块总结

本文对Lightning-LM激光SLAM定位框架进行了全面剖析。该框架是一个轻量高效的激光雷达建图与定位系统,支持3D SLAM、动态图层管理等功能。文章首先介绍了项目概况和源码结构,包括核心模块如定位系统(loc_system)、激光匹配(lidar_loc)和位姿图优化(pose_graph)等。接着详细解析了各模块的关键函数和运行流程,如数据接收处理、NDT匹配和位姿优化等。最后总结了学习该框架所需的C++知识要点,包括智能指针、多线程编程等现代C++特性。该分析为SLAM开发者提供了实用的架构参考

行知SLAM 799

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Scrapy爬虫设置代理ip

在应用爬虫的时候我们经常会遇到ip被封的情况,这样我们想要的数据就不能及时下载下来,那么怎么办呢?当然是使用代理ip了,下面来看看scrapy中怎么使用代理ip。 一、开放代理 import random class IpProxyDownloadMiddleware(object): ''' 定义代理ip的类,这是开放代理的应用 ''' PROXIES = [ ...

python菜菜~博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

scrapy-redis+selenium+webdriver解决动态代理ip和user-agent的问题(全网唯一完整代码解决方案)

scrapy-redis+selenium+webdriver解决动态代理ip和user-agent的问题(全网唯一完整代码解决方案)

runwuwushengxiyu的博客 406

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Python scrapy设置代理ip

应用scrapy爬虫的时候,经常遇到ip被封的问题,直接导致无法获取数据,所以要使用代理ip。 在网上有很多大神写的案例,我选择了一个进行使用,不知道是ip的原因还是我写的有问题,还是会报错,但是思路总是有的,先记下来再熟悉一遍慢慢就会了。 首先第一步是在settings文件里设置好proxy_list PROXIES_LIST = { 'http://112.85.168.96:9999', 'http://1.197.203.234:9999', 'http://120.

dashujs的博客 7992

python post 请求超时_scrapy.FormRequest使用代理请求超时,但是requests请求正常

同样的代理ip,用requests请求正常,用scrapy.FormRequest请求就超时相关代码In [11]: r = requests.post('http://httpbin.org/post', proxies={'http': proxy_server, 'https': proxy_server})2018-07-10 14:10:04 [urllib3.connectionpoo...

weixin_39787606的博客 511

Scrapy

@Scrapy学习 Scrapy使用异步网络库处理网络通讯, 安装Scrapy pip install Scrapy 可以遇到的坑 报错1 VC++14.0 Twisted 解决方法 离线安装,访问网站: https://www.lfd.uci.edu/~gohlke/pythonlibs/ 根据版本选择文件 使用命令进行安装离线文件 pip install xxx.whl 报错2 scrapy bencn 运行报错 解决方法 pip install pywin32 Scrapy原理

weixin_45718715的博客 7万+

scrapy-redis+selenium+webdriver解决动态代理ip和user-agent的问题(全网唯一完整代码解决方案)...

问题描述:在爬取一些反爬机制做的比较好的网站时,经常会遇见一个问题就网站代码是通过js写的,这种就无法直接使用一般的爬虫工具爬取,这种情况一般有两种解决方案 第一种:把js代码转为html代码,然后再使用html代码解析工具爬取,目前常用的工具是selenium和scrapy-splash,我使用的是第一个工具,第二个还有搞个docker服务,太麻烦 第二种:自己观察js代码,找到存放数据的地...

weixin_30845171的博客 736

【纪念,大年三十,IP第一次被封】IP被封,没法练习。用代理?太麻烦了,教你一招简单粗暴的解决办法!!!

爬虫练习时,IP被封,不用代理,给你一个简单粗暴的解决办法!!!

weixin_45573945的博客 376

探索高效爬虫利器:Scrapy_IPProxyPool

探索高效爬虫利器:Scrapy_IPProxyPool 去发现同类优质开源项目:https://gitcode.com/ 在大数据时代,网络爬虫已成为获取信息的重要工具。然而,频繁的数据抓取往往需要依赖代理IP以避免被目标网站封禁。 是一个专门为此目的设计的Python项目,它结合了Scrapy框架和强大的IP代理池,为你的数据挖掘工作提供稳定的支持。 项目简介 Scrapy_IPProxyPoo...

gitblog_00083的博客 505

scrapy 学习总结

scrapy入门 创建scrapy爬虫 1.新建项目 scrapy startproject xx 2.初始化爬虫实例 scrapy genspider xx "xxxx.com" 3.运行爬虫 scrapy crawl xx scrapy 中间件 下载中间件 (DOWNLOADER_MIDDLEWARES) DOWNLOADER_MIDDLEWARES = { 'opticsjour...

h2gg666的博客 422

实践出真知-scrapy集成ip代理(以阿布云为例)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33719619的博客 291
上一篇: scrapy配置
下一篇: python 八大排序的优缺点
唐僧不爱八戒
博客等级 码龄9年 158粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值