学习笔记 爬取X刺代理的小IP们 学完代理,我们发现网上找的很多免费代理IP都用不了,所以这里写一个简单的测试小案例,爬取一下某代理IP网站的免费代理IP,再遍历测试到底这些代
学习笔记
爬取X刺代理的小IP们
学完代理,我们发现网上找的很多免费代理IP都用不了,所以这里写一个简单的测试小案例,爬取一下某代理IP网站的免费代理IP,再遍历测试到底这些代理IP能不能用,哪些能用。
爬取步骤
获取要爬取的代理IP网站地址(http://www.xicidaili.com/nn/)
爬取页面内所有的代理IP及其端口号
测试代理IP
将可以用的代理IP存在一个csv文件里。
因为这个案例不是很复杂,所以我们就不写怎么查看网页源代码,怎么写Xpath,怎么研究URL特征这些步骤了,直接上代码
python代码
为了节省时间,我只测试了19个代理IP:
# -*- coding: utf-8 -*-import requests
from lxml import etree
from fake_useragent import UserAgent
import time
import csv
class IpSpider:
def __init__(self):
self.url = 'http://www.xicidaili.com/nn/'
def get_ua(self):
return UserAgent().random
def get_page(self):
headers = {'User-Agent':self.get_ua()}
res = requests.get(self.url, headers = headers)
html = res.content.decode('utf-8')
print('url:', res.url)
print('code:', res.status_code)
#print(html)
self.get_ip_list(html)
def get_ip_list(self, html):
html_parse = etree.HTML(html)
xpath = '//table[@id="ip_list"]//tr'
r_list = html_parse.xpath(xpath)
#print(r_list)
proxy_list = []
for p in r_list[1:20]:
my_ip = p.xpath('./td[2]/text()')[0]
my_port = p.xpath('./td[3]/text()')[0]
#print('代理IP:', my_ip)
proxy_list.append(
{'http':'http://{}:{}'.format(my_ip, my_port),
'https':'https://{}:{}'.format(my_ip, my_port)})
self.test_ip(proxy_list)
def test_ip(self, proxy_list):
useful_proxy = []
for proxy in proxy_list:
print(proxy)
headers = {'User-Agent':self.get_ua()}
try:
res = requests.get(self.url,
headers = headers,
proxies = proxy,
timeout = 4)
#如果请求超过3秒没有相应则默认该代理不能用
except Exception as e:
print('此代理IP无法使用......')
else:
useful_proxy.append(proxy)
print(proxy)
self.write_ip(useful_proxy)
def write_ip(self, proxy_list):
with open('./test/my_test_proxy.csv', 'w', newline = '') as f:
writer = csv.writer(f)
writer.writerow(['http', 'https'])
for item in proxy_list:
writer.writerow([item['http'], item['https']])
def main(self):
self.get_page()
if __name__ == '__main__':
start = time.time()
spider = IpSpider()
spider.main()
end = time.time()
print('执行时间:%.2f' % (end-start))
部分结果:
此代理IP无法使用......{'http': 'http://111.231.239.143:1081', 'https': 'https://111.231.239.143:1081'}
此代理IP无法使用......
{'http': 'http://115.223.64.38:8010', 'https': 'https://115.223.64.38:8010'}
此代理IP无法使用......
执行时间:70.16
可用的代理IP
我们打开存放可用代理IP的csv文件,看一下有哪些IP:
http,httpshttp://125.126.117.30:60004,https://125.126.117.30:60004
http://125.126.113.184:60004,https://125.126.113.184:60004
http://112.16.217.191:808,https://112.16.217.191:808
好了,这个小案例完结…