代理ip软件

您的位置: 首页 > 新闻资讯 > 正文

Scrapy设置自动更新IP代理池的流程

发布时间:2019-12-05 15:12:05 来源:挂机精灵

  在scrapy中新建一个proxies.py文件,执行一下把获取的IP保存到txt文件中去

# *-* 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')

  修改代理文件middlewares.py的内容为如下:(其中with open中要改成你项目中生成的txt文件地址)

import random  
import scrapy  
from scrapy import log 

 
class ProxyMiddleWare(object):
    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('此处为你项目中生成txt文件', 'r') as f:
                proxies = f.readlines()
            if proxies:
                break
            else:
                time.sleep(1)
        proxy = random.choice(proxies).strip()
        return proxy

  修改下settings文件,其中myproxies为你的项目名称

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

相关资讯

Scrapy设置自动更新IP代理池的流程

在scrapy中新建一个proxies.py文件,执行一下把获取的IP保存到txt文件中去# *-* coding:utf-8 *

来源:挂机精灵

2019-12-05 15:12:05

SOCKS代理服务器设置流程

SOCKS代理服务器如何设置?实验室服务器不能联网,于是,如何通过我的电脑给服务器联网安装各种环境成为一大需求。(一)准备条件:硬件:一台可以SSH登录服务器的

来源:挂机精灵

2019-09-21 14:17:32

代理ip地址隐藏自己的IP 保护隐私!

  代理ip地址隐藏自己的IP保护隐私!人们隐藏他们的IP地址的一个主要原因是,他们想在不被追踪的情况下浏览网页信息、下载一些资料等等,当然

来源:互联网

2019-02-15 16:29:03

手机电脑怎么使用全国动态IP的方法

  有些需要更换IP的用户,不知道手机电脑怎么使用全国动态IP,其实方法非常简单,下载个挂机精灵代理IP软件即可,比手动拨号更换IP地址方便

来源:互联网

2019-02-18 17:42:49

七种适用于大部分游戏的防封策略

  智能手机的流行,各种游戏也跟着火爆起来,也有许多人通过游戏来赚钱,但是要注意一个问题,那就是游戏封号。辛辛苦苦练了个号,才开始赚点小钱,

来源:互联网

2019-02-20 15:46:48

挂机精灵是手游挂机的朋友梦寐以求的神器

挂机精灵是手游挂机的朋友梦寐以求的神器,想要挂机玩手游的朋友大致上可以分为两种类型:想要多开的玩家和专业玩手游赚钱的老哥,普通的玩家想通过挂机来减轻自己练级的负

来源:互联网

2019-02-26 16:30:57

为了营销批量注册账号,IP更换是如何操作的?

很多用户在做问答营销时都遇到过这些情况,比如在一些网站上面批量注册帐号、发布留言评论,或在使用一些即时通讯软件频繁发送消息等等这些行为都会遇到系统的IP限制,限

来源:互联网

2019-02-26 17:38:59

挂机精灵代理ip软件解决ip被封

   挂机精灵代理ip软件解决ip被封,现在市面上挂机软件如此之多,该怎么判断这个挂机软件是好用还是不好用呢?我们该如何选择一款适

来源:互联网

2019-02-11 15:16:07

代理IP对爬虫的重要性以及IP池的优质特性

大数据时代,网络数据非常多,我们即使要做个小小的数据分析,也是需要抓取非常多的网页数据来分析结果,这单靠人工获取数据是不现实的,因此大家都是使用各种采集器或者直

来源:互联网

2019-03-25 17:21:57

《完美世界》手游挂机时怎么自动喝药

《完美世界》手游在3月6号上线了,对于喜欢RPG游戏的玩家来说又多了一个可以选择的游戏。这款游戏是由完美世界精心打磨,并由腾讯运营的。通过运用现在最新的技术,完

来源:互联网

2019-03-15 17:04:11

《完美世界》手游挂机怎么设置

在完美世界手游中挂机究竟该怎么设置呢?在完美世界手游中小伙伴们可以在日常副本里解放自己的双手,那么挂机系统究竟该怎么设置呢?下面就来看一下吧!挂机当然是需要对应

来源:互联网

2019-03-13 16:57:42