原理分析:
- 分析下网站的html结构
- 用request获取网页内容,自动翻页
- 用xpath获取到每个列表的内容
- 存入到txt中备用。
网页结构:
打开网页后查看IP列、端口列的元素路径
代码实现:
# CopyRight@ 【一番码客】 - 效率软件推荐
import requests
from lxml import etree
def get_url(page):
'''
从快代理网站获取有效的免费代理ip列表
'''
proxy_fd = open("ip-proxy.txt", 'a+', encoding='utf-8')
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding":"gzip, deflate",
"Connection":"keep-alive"
}
url_str ='https://www.kuaidaili.com/free/inha/'+ str(page)
# url_str ='https://www.kuaidaili.com/free/intr/'+ str(page)
html = requests.get(url=url_str, timeout=20, headers = headers, verify=False).text
html = etree.HTML(html)
trs = html.xpath('//*[@id="list"]/table/tbody/tr')
# print(trs)
for tr in trs:
ip = tr.xpath('./td[@data-title="IP"]/text()')[0]
port = tr.xpath('./td[@data-title="PORT"]/text()')[0]
print(str(ip) + ':' + str(port) + ',')
url ='http://{}:{}'.format(ip,port)
try:
result = requests.get(url, timeout=2, headers = headers, verify=False)
print(url +" 可用")
proxy_fd.write('\'' + '{}:{}'.format(ip, port) + '\',\n')
except:
print(url +' 不可用')
proxy_fd.close()
for i in range(100, 200):
get_url(i)
结果展示:
可以看到获取的数据已经在文本文档中了,拿来用就是,当然免费的不太稳定,好在免费。