如何使用Python爬虫案例5中的X刺代理,高效管理小IP池?
- 内容介绍
- 文章标签
- 相关推荐
本文共计704个文字,预计阅读时间需要3分钟。
学习笔记+爬取X代代理的小IP们,学完代理,我们发现网上的很多免费代理IP都用不了。所以这里写一个简单的测试小案例,爬取某个代理IP网站的免费代理IP,再逐一测试这些IP。
学习笔记
爬取X刺代理的小IP们
学完代理,我们发现网上找的很多免费代理IP都用不了,所以这里写一个简单的测试小案例,爬取一下某代理IP网站的免费代理IP,再遍历测试到底这些代理IP能不能用,哪些能用。
爬取步骤
获取要爬取的代理IP网站地址(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 = '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(
{'{}:{}'.format(my_ip, my_port),
'{}:{}'.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(['111.231.239.143:1081', '111.231.239.143:1081'}
此代理IP无法使用......
{'115.223.64.38:8010', '115.223.64.38:8010'}
此代理IP无法使用......
执行时间:70.16
可用的代理IP
我们打开存放可用代理IP的csv文件,看一下有哪些IP:
125.126.117.30:60004,125.126.117.30:60004125.126.113.184:60004,125.126.113.184:60004
112.16.217.191:808,112.16.217.191:808
好了,这个小案例完结…
本文共计704个文字,预计阅读时间需要3分钟。
学习笔记+爬取X代代理的小IP们,学完代理,我们发现网上的很多免费代理IP都用不了。所以这里写一个简单的测试小案例,爬取某个代理IP网站的免费代理IP,再逐一测试这些IP。
学习笔记
爬取X刺代理的小IP们
学完代理,我们发现网上找的很多免费代理IP都用不了,所以这里写一个简单的测试小案例,爬取一下某代理IP网站的免费代理IP,再遍历测试到底这些代理IP能不能用,哪些能用。
爬取步骤
获取要爬取的代理IP网站地址(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 = '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(
{'{}:{}'.format(my_ip, my_port),
'{}:{}'.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(['111.231.239.143:1081', '111.231.239.143:1081'}
此代理IP无法使用......
{'115.223.64.38:8010', '115.223.64.38:8010'}
此代理IP无法使用......
执行时间:70.16
可用的代理IP
我们打开存放可用代理IP的csv文件,看一下有哪些IP:
125.126.117.30:60004,125.126.117.30:60004125.126.113.184:60004,125.126.113.184:60004
112.16.217.191:808,112.16.217.191:808
好了,这个小案例完结…

