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

python如何扫描proxy并获取可用代理ip?

发布时间:2019年12月17日 来源:互联网

今天咱写一个挺实用的工具,就是扫描并获取可用的proxy


python如何扫描proxy并获取可用代理ip?


首先呢,我先百度找了一个网站:https://www.wanbianip.com/ 作为例子


这个网站里公布了许多的国内外可用的代理的ip和端口


我们还是按照老样子进行分析,就先把所有国内的proxy扫一遍吧


点开国内部分进行审查发现,国内proxy和目录为以下url:


https://www.wanbianip.com/nn/x


这个x差不多两千多页,那么看来又要线程处理了。。。


老样子,我们尝试是否能直接以最简单的requests.get()获取内容


返回503,那么我们加一个简单的headers


返回200,成咯


 


好了我们先进行网页内容分析并获取想要的内容


我们发现,包含ip信息的内容在<tr>标签内,于是我们就能很方便的用bs进行获取标签内容


但是我们随之又发现,ip、端口、协议的内容分别在提取的<tr>标签的第2,3,6三个<td>标签内


于是我们开始尝试编写,一下为编写思路:


  处理页面的时候,是先提取tr标签,再将tr标签中的td标签提取


  所以运用了两次bs操作,并且第二次使用bs操作时需要进行str处理


  因为我们获得tr之后,我们需要其中的2,3,6号的东西,


  但是当我们用一个for循环输出的i并不能进行组的操作


  所以我们干脆分别对每一个td的soup进行第二次操作之后直接提取2,3,6


  提取之后,直接加上.string提取内容即可


复制代码

r = requests.get(url = url,headers = headers)


    soup = bs(r.content,"html.parser")

    data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')})


    for i in data:


        soup = bs(str(i),'html.parser')

        data2 = soup.find_all(name = 'td')

        ip = str(data2[1].string)

        port = str(data2[2].string)

        types = str(data2[5].string).lower() 


        proxy = {}

        proxy[types] = '%s:%s'%(ip,port)

复制代码

这样,我们每次循环都能生成对应的proxy字典,以便我们接下来验证ip可用性所使用


字典这儿有个注意点,我们有一个将types变为小写的操作,因为在get方法中的proxies中写入的协议名称应为小写,而网页抓取的是大写的内容,所以进行了一个大小写转换


 


那么验证ip可用性的思路呢


很简单,我们使用get,加上我们的代理,请求网站:


http://1212.ip138.com/ic.asp


这是一个神奇的网站,能返回你的外网ip是什么


url = 'http://1212.ip138.com/ic.asp'

r = requests.get(url = url,proxies = proxy,timeout = 6)

这里我们需要加上timeout去除掉那些等待时间过长的代理,我设置为6秒


我们以一个ip进行尝试,并且分析返回的页面


返回的内容如下:


复制代码

<html>


<head>


<meta xxxxxxxxxxxxxxxxxx>


<title> 您的IP地址 </title>


</head>


<body style="margin:0px"><center>您的IP是:[xxx.xxx.xxx.xxx] 来自:xxxxxxxx</center></body></html>

复制代码

那么我们只需要提取出网页内[]的内容即可


如果我们的代理可用,就会返回代理的ip


(这里会出现返回的地址还是我们本机的外网ip的情况,虽然我也不是很清楚,但是我把这种情况排除,应该还是代理不可用)


那么我们就能进行一个判断,如果返回的ip和proxy字典中的ip相同,则认为这个ip是可用的代理,并将其写入文件


 


我们的思路就是这样,最后进行queue和threading线程的处理即可


上代码:


复制代码

#coding=utf-8


import requests

import re

from bs4 import BeautifulSoup as bs

import Queue

import threading 


class proxyPick(threading.Thread):

    def __init__(self,queue):

        threading.Thread.__init__(self)

        self._queue = queue


    def run(self):

        while not self._queue.empty():

            url = self._queue.get()


            proxy_spider(url)


def proxy_spider(url):

    headers = {

            .......

        }


    r = requests.get(url = url,headers = headers)

    soup = bs(r.content,"html.parser")

    data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')})


    for i in data:


        soup = bs(str(i),'html.parser')

        data2 = soup.find_all(name = 'td')

        ip = str(data2[1].string)

        port = str(data2[2].string)

        types = str(data2[5].string).lower() 



        proxy = {}

        proxy[types] = '%s:%s'%(ip,port)

        try:

            proxy_check(proxy,ip)

        except Exception,e:

            print e

            pass


def proxy_check(proxy,ip):

    url = 'http://1212.ip138.com/ic.asp'

    r = requests.get(url = url,proxies = proxy,timeout = 6)


    f = open('E:/url/ip_proxy.txt','a+')


    soup = bs(r.text,'html.parser')

    data = soup.find_all(name = 'center')

    for i in data:

        a = re.findall(r'\[(.*?)\]',i.string)

        if a[0] == ip:

            #print proxy

            f.write('%s'%proxy+'\n')

            print 'write down'

            

    f.close()


#proxy_spider()


def main():

    queue = Queue.Queue()

    for i in range(1,2288):

        queue.put('http://www.xicidaili.com/nn/'+str(i))


    threads = []

    thread_count = 10


    for i in range(thread_count):

        spider = proxyPick(queue)

        threads.append(spider)


    for i in threads:

        i.start()


    for i in threads:

        i.join()


    print "It's down,sir!"


if __name__ == '__main__':

    main()

复制代码

这样我们就能把网站上所提供的能用的代理ip全部写入文件ip_proxy.txt文件中了


相关文章内容简介

1 免费代理IP能用于爬虫吗

    免费代理IP能用于爬虫吗?免费代理IP就是不需要花钱,在网络上可以直接提取,然后用来替换IP。并不是所有项目都能用免费代理IP的,例如爬虫就不可以。    免费代理IP的来源比较杂,很多没有用,使用时间短,匿名程度也参差不齐,其中有一些是高度匿名的,但数量有限,也很难挑选。而爬虫工作需要的IP,要求比较高,因为爬虫IP一旦质量不高就会被对方网站发现,被禁止抓取数据,无法完成工作。所以,免费代理IP是不适合爬虫的。但如果免费代理IP的匿名程度够的话,使用效率低,也是符合使用需求的。    爬虫大家都知道,是采集数据的方式。通过采集来的数据分析,可以获取有价值的信息。而代理IP是换IP最方便的工具,爬虫工作是要用代理IP的。    爬虫对被爬的网站来说是毫无利益的,反而会影响到服务器的工作,所以现在都设有反爬程序,IP限制是最基本的。爬虫工作的时候,如果速度快,用同一个IP会有访问的问题,这时网络就会有验证或者直接封锁IP,给爬虫工作带来了很大的困难。 ... [阅读全文]

2 发帖用代理IP有什么好处?

    发帖用代理IP有什么好处?发帖是网络营销的主要途径,在发帖的时候,很多时候都要用到代理IP,这并不奇怪,代理IP给网络营销人员带来了很大的便利。那么,发帖用代理IP有什么好处?    贴吧大家都不陌生,很多人在贴吧交流,一般同一个IP只能发布有限的帖子,评论也是有限制的。如果想大量发帖,就需要用代理IP来解决了。有很多热帖有的是真实评论,有的可能需要代理IP来帮忙,用代理IP去访问网站,用户不会被网站监视限制,或者被封锁了。    随着网络的发展,网络营销是很多公司必须要做的,其中网络影响最重要的途径就是发帖。很多发帖的工作人员都在使用代理IP,但还有很多人并不了解。那么,营销发帖一定要用代理IP吗?    例如贴吧、微博等平台,这些平台发帖可以与其他网友进行交流,起到宣传的作用。但一个IP发帖的数量是有限的,如果想大量发帖,就需要代理IP的帮助。更换IP后,就可以伪装成一个全新的用户,自然不会被平台限制。还有网络营销最常见的问答方式,也需要更换IP后进行自问... [阅读全文]

推荐阅读

  1. 20

    2020-11

    选择代理ip需要注意哪些指标值和基本参数

    选择爬虫免费 代理ip 的六个标准!当我们学习各种计算机语言时,出现各种异常情况是很常见的。以简单基础的web爬虫为例,我们在操作过程中会遇到各种各样的问题,比如IP被屏蔽、限制抓取

  2. 27

    2020-05

    哪种代理IP资源质量最好?

    伴随着互联网技术的飞速发展,人们对各种网络工具的开发与利用也越来越有研究。其中一种网络工具被运用到各行各业

  3. 31

    2020-03

    什么是合租代理IP池?

  4. 09

    2019-12

    HTTP代理IP对4S店网络发展的作用

    HTTP代理IP对4S店网络发展的作用。互联网经济迅速发展,各个行业想要在这个经济背景之下抢占市场,网路模式已经成为必不可少的一种营销手段。4S店更是要这种新模式下迈向行业巅峰。

  5. 11

    2020-07

    爬虫使用代理IP时会遇到什么问题?

    网络爬虫是一种用来自动浏览万维网的程序或者脚本,它极大的方便了网络工作者收集信息的工作效率。爬虫通过对抓取目标的描述或定义,在网页中的数据进行分析和过滤自动抓取数据信息。

  6. 04

    2020-02

    如何化解无线网络IP地址冲突?

    在一些无线网络中,由于客户机数目较多,为方便对这些机器进行管理,很多管理员会使用无线路由器提供的DHCP服务,为客户机提供TCP/IP参数配置,如IP地址、网关地址和DNS服务器等。但

因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨

免费试用