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/

        说书人的脚本

  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/sunny11/p/14745407.html
Copyright © 2011-2022 走看看