zoukankan      html  css  js  c++  java
  • Python制作ip代理爬取与验证脚本(学会这个你就表格啥的都会爬了)

    题记

        今天上午看大佬文章又学到新东西了,这是是关于爬虫的,我感觉我已经会爬任何东西了(骄傲脸)。本来打算爬个代理ip试试水,半路突发奇想说书人那个验证ip的脚本,于是就一起来吧,我这比说书人那个简陋一些。我把我的脚本起名为上天入地无敌简单又看似很好的代理ip神经病脚本。感谢那个大佬写的文章让我接触到xpath helper插件,谁用谁知道。

    正文

        看完文章首先我安装了个xpath helper插件(商店一搜就有),他写的edusrc的爬取内容,我为了变通想起来前几天看到一个高匿代理的网站,于是尝试爬爬这个网站。

    1 确定要爬的数据

        点插件会弹个框,然后我们按住shift+x选择我们心怡的数据,这里我选择ip,多选几个查看变化,可以看到tr管行变化,td管列变化。

        我们取值的时候这么取_element.xpath("//tbody/tr[" + str(k) + "]/td[1]/text()"),看到变化没删掉前面无用的,最后要多加一个/,要不获取不到数据。

    2 编写脚本思路

        我们的思路是把ip和端口获取到并且用:链接起来存到ip.txt文件,然后验证爬取的ip是否能用,把能用的存在ok.txt文件中。

        http://ip.jiangxianli.com/?page=1这个网站page后控制页数。

    3 效果截图

        1、爬取页数设置

        2、爬取完开始验证代理是否可用,我输的6页爬了90个ip。

        3、验证成功的存到ok.txt,一般来说国内的快,如果想看哪个是国内的,就复制可用ip搜索一下,前面有ip带国籍的。

    4 完整代码

    from lxml import etree
    
    import urllib3
    
    import requests
    
     
    
    #爬取ip
    
    def school(i, k):
    
    manager = urllib3.PoolManager()
    
    http = manager
    
    print(""+str(i)+"")
    
    r = http.request(
    
    'GET',
    
    "https://ip.jiangxianli.com/?page=" + str(i),
    
    headers={
    
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0",
    
    'Host': "ip.jiangxianli.com",
    
    'Cookie': "PSTM=1607346916; BIDUPSID=69AFB78A1A2E7FC19402DB7E41C448A8; BAIDUID=0A9A83EB086E30AD2E7AE714FAEF98A8:FG=1; __yjs_duid=1_b16d973dfef393feee90346dbe82f0d51619579133037; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; ab_sr=1.0.0_MTU2NjJhNzIwOWMzM2EyNjM4NmZhOGNhOWQxYzI5YTAwZDQ1MmI3M2Y0NjE0NTY5MmJjMjFhMTQ5ODIzNzU2NzVhM2FlYTg4OWQ1OGNjYzI0YjQ4ODIwM2ExYWQ0OGQz; BDRCVFR[CfxpvPKvC2b]=mk3SLVN4HKm; delPer=0; PSINO=1; BDUSS=cweXRYaUlCSklGWFBoeG5VS3QyZERZdEpMYUR4Y1pjeW50ZWdhZm53MndoYjFnRUFBQUFBJCQAAAAAAAAAAAEAAABlbIWtstDR9LK7wM~QxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD4lWCw-JVgQj; BDUSS_BFESS=cweXRYaUlCSklGWFBoeG5VS3QyZERZdEpMYUR4Y1pjeW50ZWdhZm53MndoYjFnRUFBQUFBJCQAAAAAAAAAAAEAAABlbIWtstDR9LK7wM~QxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD4lWCw-JVgQj; BDRCVFR[pNjdDcNFITf]=mk3SLVN4HKm; H_PS_PSSID=33985_33966_31254_34004_33759_33675_33607_26350_33996; BA_HECTOR=a48g810h8k810124f01g9bvg30r"
    
    },
    
    timeout=4.0
    
    )
    
    html = r.data.decode('utf-8', 'ignore')
    
    _element = etree.HTML(html)
    
    text = _element.xpath("//tbody/tr[" + str(k) + "]/td[1]/text()")
    
    port = _element.xpath("//tbody/tr[" + str(k) + "]/td[2]/text()")
    
    coun = _element.xpath("//tbody/tr[" + str(k) + "]/td[6]/text()")
    
    su = _element.xpath("//tbody/tr[" + str(k) + "]/td[8]/text()")
    
    ipdata = '
    '.join(text)
    
    port2 = '
    '.join(port)
    
    coun2 = '
    '.join(coun)
    
    su2 = '
    '.join(su)
    
    ipt=ipdata+":"+str(port2)
    
    ipo=ipdata+":"+str(port2)+"---------->"+coun2+"---------->"+su2
    
    print(ipo)
    
    return ipt
    
    #检测代理是否可用
    
    def check_proxy():
    
    for ip in open('ip.txt'):
    
    ip_port = ip.replace('
    ', '')
    
    proxy = {
    
    'https': ip_port
    
    }
    
    headers = {
    
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    
    }
    
    try:
    
    r = requests.get('http://www.baidu.com', headers=headers, proxies=proxy, timeout=3)
    
    if r.status_code == 200:
    
    print(ip_port+'----验证成功')
    
    with open(r'ok.txt', 'a+', encoding='utf-8') as a:
    
    a.write(ip_port + '
    ')
    
    a.close()
    
    except:
    
    print(ip_port+'----超时')
    
    #介绍
    
    def title():
    
    print('+------------------------------------------')
    
    print('+ 33[1;34m所有数据来源:https://ip.jiangxianli.com 33[0m')
    
    print('+ 33[1;34mTitle: ip代理验证v1.0 33[0m')
    
    print('+ 33[1;36m使用格式: python3 ipdaili.py 33[0m')
    
    print('+ 33[1;36m作者By >>> 11阳光 33[0m')
    
    print('+ 33[1;33m座右铭:不是杰出者才做梦,而是善梦者才杰出。33[0m')
    
    print('+------------------------------------------')
    
    #主函数
    
    if __name__ == '__main__':
    
    title()
    
    page=str(input("33[1;35m请输入你想爬的页数,一页15个ip,爬取的ip会存在ip.txt里面
    page >>> 33[0m"))
    
    for i in range(1, int(page)+1):
    
    for k in range(1, 16):
    
    text2=school(i,k)
    
    print(text2)
    
    with open(r'ip.txt','a+',encoding='utf-8') as f:
    
    f.write(text2+'
    ')
    
    f.close()
    
    print('+ 33[1;33mip爬取完毕,下面将进行验证是否可用,可用的将被放在ok.txt,祝您旅途愉快!33[0m')
    
    check_proxy()
    
    print('+ 33[1;33m完毕,快去ok.txt查看吧33[0m')

    参考文章

        利用xpath爬取edu漏洞列表:http://0dayhack.net/index.php/1979/

        说书人的脚本

  • 相关阅读:
    java学习(19-IO高级)
    java学习(18-异常)
    java学习(17-Map和Set)
    java学习笔记(16-集合)
    java学习笔记(15-高级api)
    java学习笔记(14-包和权限修饰符)
    Deno文件处理详解:如何写入文件、如何读文件、如何创建删除以及检查文件和目录。
    2020年12月8日建站随笔:IPlayIO中文网从上线到现在的一些总结
    2020 FreeBSD如何更换国内仓库源
    推荐11个值得研究学习的Python开源项目(从入门到python高级开发)
  • 原文地址:https://www.cnblogs.com/sunny11/p/14745407.html
Copyright © 2011-2022 走看看