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/

    说书人的脚本

原文地址:https://www.cnblogs.com/sunny11/p/14745407.html