当前位置 : 主页 > 编程语言 > python >

利用python爬虫(案例5)--X刺代理的小IP们

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记 爬取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,https
http://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

好了,这个小案例完结…


网友评论