在本文中,我们将介绍如何使用Python的requests和xpath库爬取西刺代理IP,并开启多线程提高爬取效率。我们将使用requests库发送HTTP请求,并使用xpath库解析HTML文档,以实现爬取代理IP的功能。
1. 爬取代理IP
首先,我们需要爬取西刺代理IP的网站。我们可以使用requests库发送GET请求,获取代理IP的网站。以下是一个示例,演示如何爬取西刺代理IP的网站:
import requests
from lxml import etree
# 代理IP的URL
url = 'https://www.xicidaili.com/nn/'
# 发送GET请求
response = requests.get(url)
# 解析HTML文档
html = etree.HTML(response.text)
trs = html.xpath('//table[@id="ip_list"]/tr')
# 遍历所有代理IP
for tr in trs[1:]:
ip = tr.xpath('./td[2]/text()')[0]
port = tr.xpath('./td[3]/text()')[0]
print(f'{ip}:{port}')
在上面的示例中,我们使用requests库发送GET请求,获取代理IP的网站。我们使用xpath库解析HTML文档,并使用xpath表达式获取代理IP和端口号。我们使用循环遍历所有代理IP,并将其打印出来。
2. 开启多线程
接下来,我们需要开启多线程提高爬取效率。我们可以使用Python的threading库开启多线程。以下是一个示例,演示如何开启多线程爬取西刺代理IP:
import requests
from lxml import etree
import threading
# 代理IP的URL
url = 'https://www.xicidaili.com/nn/'
# 线程数
thread_num = 10
# 爬取代理IP的函数
def crawl_proxy():
# 发送GET请求
response = requests.get(url)
# 解析HTML文档
html = etree.HTML(response.text)
trs = html.xpath('//table[@id="ip_list"]/tr')
# 遍历所有代理IP
for tr in trs[1:]:
ip = tr.xpath('./td[2]/text()')[0]
port = tr.xpath('./td[3]/text()')[0]
print(f'{ip}:{port}')
# 开启多线程
threads = []
for i in range(thread_num):
t = threading.Thread(target=crawl_proxy)
threads.append(t)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
在上面的示例中,我们使用Python的threading库开启了多线程。我们定义了一个函数crawl_proxy,用于爬取代理IP。我们使用循环创建多个线程,并将它们添加到threads列表中。我们使用start方法开启线程,并使用join方法等待所有线程结束。
总结
本文介绍了如何使用Python的requests和xpath库爬取西刺代理IP,并开启多线程提高爬取效率。我们使用requests库发送HTTP请求,并使用xpath库解析HTML文档,以实现爬取代理IP的功能。我们还使用Python的threading库开启多线程,提高爬取效率。这些方法可以帮助我们快速爬取代理IP,提高爬取效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用requests xpath 并开启多线程爬取西刺代理ip实例 - Python技术站