鱼C论坛

 找回密码
 立即注册
查看: 1681|回复: 2

[技术交流] python爬取xicidaili的代理IP

[复制链接]
发表于 2020-3-4 16:46:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
"""
* 完成时间:2020-03-04 *
* 作者:惜言 *
* 功能:自动爬取xicidaili.com的高匿代理 *
"""
from urllib import request
import re
import pickle
import easygui

#代理信息获取模块
def getmessage():
    ip_list = []
    message = ""
    with open("./proxy.html","r",encoding="UTF-8") as fp:
        for each in fp.readlines():
            # 抓取IP信息
            ip = re.search("[\d]+\.[\d]+\.[\d]+\.[\d]+",each)
            if None != ip:
                message += "ip address:" + ip.group()
                continue
            # 抓取端口信息
            port = re.search(">[\d]{1,5}<",each)
            if None != port:
                message += " port:" + re.sub("[<>]","",port.group())
                continue
            #抓所在地
            address = re.search('href="/[\d]{4,4}-[\d][\d]-[\d][\d]/[\w]*">[\w]*</a>',each)
            if None != address:
                address = address.group()
                message += " 所在地:" + re.sub('[a-zA-Z/0-9="<>]|-',"",address)
                continue
            #匿名度
            anonymous = re.search('td class="country">[\w]{2,2}</td>',each)
            if None != anonymous:
                anonymous = anonymous.group()
                message += " 匿名度:" + re.sub('[a-zA-Z/<>="]',"",anonymous)
                continue
            #协议
            protocol = re.search('<td>[HTPS]{4,5}</td>',each)
            if None != protocol:
                protocol = protocol.group()
                message += " 协议:" + re.sub('[<>td/]',"",protocol)
                continue
            #存活天数
            time = re.search('<td>[\w]*[天时分秒]</td>',each)
            if None != time:
                time = time.group()
                message += " 存活时间:" + re.sub("[td<>/]","",time)
                continue
            #测试时间
            test = re.search('[\d]{2,2}-[\d]{2,2}-[\d]{2,2} [\d]{2,2}:[\d]{2,2}',each)
            if None != test:
                test = test.group()
                message += " 最后测试时间:" + test
                ip_list.append(message)
                message = ""
    return ip_list   

#页面请求模块     
def myrequest():
    proxy_url = "https://www.xicidaili.com/nn/"
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
        "Referer":"https://www.xicidaili.com/wn/"
    }
    req = request.Request(proxy_url,headers=headers,method="GET")
    resp = request.urlopen(req)
    with open("./proxy.html","w",encoding="UTF-8") as fp:
        fp.write(resp.read().decode("UTF-8"))
#把获取的代理信息写入文件
def writeproxy():
    global proxy_list
    with open("./proxy","wb") as px:
        pickle.dump(proxy_list,px)
#从文件中读取代理信息
def getproxy():
    with open("./proxy","rb") as px:
        lists = pickle.load(px)
    return lists

if __name__ == '__main__':
    #爬取页面
    myrequest()
    #获取代理信息
    proxy_list = getmessage()
    #把获取的代理信息写入
    writeproxy()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-4 16:47:22 | 显示全部楼层
我总觉得正则方面还能简化,但是我今天刚学正则,实在是顶不住,有大佬有哪些好的建议可以教教我阿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 22:26:33 From FishC Mobile | 显示全部楼层
萌新问一下,为什么要把地点和匿名度都搞下来,代理IP不是只需要IP,端口,和协议吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 02:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表