这里爬取西拉代理的高匿服务器列表 先分析页面的格式
这里可以看出来页面的第几页就是链接后面加数字和斜杠 然后测试下第一页也是可以的,2000页就是一个循环即可调整url 需要的数据在网页源代码的table里面,用BeautifulSoup即可选择 出来
代码:
import codecs
import re
import requests
from bs4 import BeautifulSoup as bfs
import csv
f = codecs.open('daili.csv','a','gbk')
w = csv.writer(f)
w.writerow(["IP",'协议'])
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
for ii in range(1,2001):
r = requests.get("http://www.xiladaili.com/gaoni/"+str(ii)+'/')
soup=bfs(r.text,'html.parser')
trs=soup.select('tbody > tr')
for tr in trs:
tds= tr.find_all('td')
ip=tds[0].get_text()
type=tds[1].get_text()
http = ''.join(re.findall(r'[A-Za-z]', type))
print(http)
if http=='HTTPHTTPS':
http='HTTP'
proxies = {http: f'{http}://' + ip}
try:
r = requests.get('https://www.ip.cn/', headers=headers,
proxies=proxies, timeout=3)
html = r.text
except:
print('fail-%s' % ip)
else:
print('success-%s' % ip)
soup = bfs(html, 'lxml')
div = soup.find(class_='well')
if div:
print(div.text)
w.writerow([ip, http])
print(ip + '写入成功')
解析:
T1部分是设置保存到的文件 T2开始爬取,设置用户代理,爬取每一个页面里面的tbody下面的tr列表,这是根据页面的格式选择的
T3开始逐个解析这个tr,这里相当于解析每页上面的这个表格 取出前两个单元格的值 第二的格子表示的是代理的类型,提取其中的英文,或者直接根据网页上的几个字进行判断来区分类型 T4测试这个代理,如果成功就把这个代理写入到文件里 步骤就是这样了
这个测试有时候一个ip会有问题,第一次不通过,第二次又能通过,所以 并不能保证所有的可用ip都被保存了下来 这里可以先不写进文件里,保存到 列表里,然后通过循环多运行几遍,每次 判断是否存在或者 直接最后转换为集合,再写入到文件里面 。 如果追求的是高质量ip,那么可以对取得的ip再重新测试几遍 ,去掉出过错的ip,这样留下来的就 都是好用的ip了。
ip的通畅与否和当前时点的状态有关,所以 不保证以后用起来是一样的。
|