zoukankan      html  css  js  c++  java
  • python-关于代理IP的测试

    之前在网上找到代理IP和端口,填在浏览器中代理服务器设置选项中,总是不能成功联网。

    今天想试试端口转发,先是用windows自带的netsh

    netsh interface portproxy add v4tov4 listenport=80 listenaddress=myserver connectport=80 connectaddress=www.baidu.com
    
    netsh interface portproxy show all
    
    netsh interface portproxy delete v4tov4 listenport=80 listenaddress=myserver protocol=tcp

    测试发现只能转发TCP,而不能转发http

    又找到PortMap1.6,真的也很好用,也可实现http端口转发。但发现不符合我的需求,我是想找网的代理IP,用于访问网站。最后在这里https://blog.csdn.net/qq_45097959/article/details/97303034?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    import requests
    from lxml import etree
    import time
    from multiprocessing import Pool
    import multiprocessing
    import sys
    
    def get_single(url):         #爬出单页上的所有代理ip
        r=requests.get(url,headers=head)
        if r.status_code==503:
            print('由于爬取次数过多,你的Ip已经被封')
            sys.exit(0)
        content=etree.HTML(r.text)
        ip=content.xpath('//table[@id="ip_list"]/tr/td[2]/text()')
        duankou=content.xpath('//table[@id="ip_list"]/tr/td[3]/text()')
        for i in range(0,len(ip)):
            ip_list.append(ip[i]+":"+duankou[i])
    
    def input_urls():     #防止ip被封每三秒访问一页
        for i in range(1,21):
           get_single(url+str(i))
           print('爬取第'+str(i)+'',end="")
           time.sleep(3)
    
    def verify_ips(ip,ip_valid_list):    #验证代理ip
        poxie="http://"+ip
        proxies={
                'http':poxie,
                'https':poxie
            }
        try:
            requests.get('https://www.baidu.com',headers=head,proxies=proxies,timeout=3)
            ip_valid_list.append(ip)
        except Exception as e :
            print(e)
    ip_list=[]
    url="https://www.xicidaili.com/nn/"
    head={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
    if __name__ == "__main__":
        print(
            """
            程序结束后会在当前文件夹生成一个ip_proxies_valid.txt文件,
            防止ip被封,控制爬取频率
            """
        )
        mlist=multiprocessing.Manager()
        ip_valid_list=mlist.list()
        input_urls()
        print("总共爬取到"+str(len(ip_list))+"个ip,接下来准备验证ip有效性")
        print("验证倒计时3s")
        time.sleep(1)
        print("验证倒计时2s")
        time.sleep(1)
        print("验证倒计时1s")
        time.sleep(1)
        print("开始验证!")
        p=Pool(15)
        for ip in ip_list:
            p.apply_async(verify_ips,(ip,ip_valid_list)) #多进程验证
        p.close()
        p.join()
        f=open('ip_proxies_valid.txt','a')
        for ip in ip_valid_list:   #写入txt文件
            f.write(ip)
            if ip!=ip_valid_list[-1]:
                f.write('
    ')
        f.close()
        print("完成")

    抓取2000多个IP,经验证仅5个有效。

    填入浏览器的代理服务器设置中,可以成功访问。从baidu.com查找myip,显示为广东的IP。

    终于明白以前为什么总不成功!因为有效IP太少了,手工选的基本上是失效的!

    ——

  • 相关阅读:
    global和$GLOBALS[]的区别
    【PHP设计模式】行为型之命令(Command)
    【PHP设计模式】行为型之访问者(Vistor)
    【转】PHP基础知识系列:heredoc
    【转】有趣儿的PHP文件操作常用函数总结
    PHP基础知识系列:对象串行化serialize与unserialize
    javascript疑难习题
    【PHP设计模式】行为型之适配器(Adapter)
    【PHP设计模式】创建型之建造者(Builder)
    Ambry: LinkedIn’s Scalable Geo-Distributed Object Store
  • 原文地址:https://www.cnblogs.com/pu369/p/12402679.html
Copyright © 2011-2022 走看看