利用Python爬取可用的代理IP是一个非常有用的应用场景,可以帮助用户快速获取可用的代理IP,提高爬虫效率和准确性。本攻略将介绍Python爬取可用的代理IP的完整攻略,包括数据获取、数据处理、数据存储和示例。
步骤1:获取数据
在Python中,我们可以使用requests库获取网页数据。以下是获取代理IP页面的示例:
import requests
url = 'https://www.xicidaili.com/nn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
html = response.text
在上面的代码中,我们使用requests库发送HTTP请求,获取代理IP页面的HTML文本。
步骤2:解析数据
在Python中,我们可以使用BeautifulSoup库解析HTML文本。以下是解析代理IP数据的示例代码:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table', id='ip_list')
proxies = []
for row in table.find_all('tr')[1:]:
columns = row.find_all('td')
ip = columns[1].text
port = columns[2].text
protocol = columns[5].text.lower()
proxies.append({'ip': ip, 'port': port, 'protocol': protocol})
在上面的代码中,我们使用BeautifulSoup库解析HTML文本,查找代理IP表格,并将每个代理IP的IP地址、端口和协议添加到列表中。
步骤3:筛选可用的代理IP
在Python中,我们可以使用requests库测试代理IP是否可用。以下是测试代理IP是否可用的示例代码:
import requests
def is_proxy_available(proxy):
try:
response = requests.get('https://www.baidu.com/', proxies={proxy['protocol']: f'{proxy["protocol"]}://{proxy["ip"]}:{proxy["port"]}'}, timeout=5)
return response.status_code == 200
except:
return False
available_proxies = []
for proxy in proxies:
if is_proxy_available(proxy):
available_proxies.append(proxy)
在上面的代码中,我们使用requests库测试每个代理IP是否可用,并将可用的代理IP添加到列表中。
示例1:获取单页代理IP
以下是一个示例代码,用于获取单页代理IP:
import requests
from bs4 import BeautifulSoup
url = 'https://www.xicidaili.com/nn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table', id='ip_list')
proxies = []
for row in table.find_all('tr')[1:]:
columns = row.find_all('td')
ip = columns[1].text
port = columns[2].text
protocol = columns[5].text.lower()
proxies.append({'ip': ip, 'port': port, 'protocol': protocol})
available_proxies = []
for proxy in proxies:
if is_proxy_available(proxy):
available_proxies.append(proxy)
print(available_proxies)
在上面的代码中,我们使用requests库获取代理IP页面的HTML文本,并使用BeautifulSoup库解析HTML文本,获取代理IP列表。然后,我们测试每个代理IP是否可用,并将可用的代理IP添加到列表中。
示例2:获取多页代理IP
以下是一个示例代码,用于获取多页代理IP:
import requests
from bs4 import BeautifulSoup
def get_proxies(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table', id='ip_list')
proxies = []
for row in table.find_all('tr')[1:]:
columns = row.find_all('td')
ip = columns[1].text
port = columns[2].text
protocol = columns[5].text.lower()
proxies.append({'ip': ip, 'port': port, 'protocol': protocol})
available_proxies = []
for proxy in proxies:
if is_proxy_available(proxy):
available_proxies.append(proxy)
return available_proxies
urls = ['https://www.xicidaili.com/nn/', 'https://www.xicidaili.com/nt/', 'https://www.xicidaili.com/wn/', 'https://www.xicidaili.com/wt/']
all_proxies = []
for url in urls:
all_proxies += get_proxies(url)
print(all_proxies)
在上面的代码中,我们定义了一个函数get_proxies,用于获取单页代理IP,并测试每个代理IP是否可用。然后,我们遍历多个代理IP页面,获取所有可用的代理IP,并将它们添加到列表中。
结论
本攻略介绍了Python爬取可用的代理IP的完整攻略,包括数据获取、数据处理、数据存储和示例。使用Python可以方便地获取可用的代理IP,提高爬虫效率和准确性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python爬取可用的代理IP - Python技术站