运行结果如图

代码如下, 发现了正则表达式更为便捷的写法
import requests #导入模块
from bs4 import BeautifulSoup
import re
def request_header():
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
}
return headers
'''
创建两个列表用来存放代理ip
'''
all_ip_list = [] #用于存放从网站上抓取到的ip
usable_ip_list = [] #用于存放通过检测ip后是否可以使用
#发送请求,获得响应
def send_request():
#爬取7页,可自行修改
for i in range(1, 10):
print(f'正在抓取第{i}页……')
response = requests.get(url=f'https://www.kuaidaili.com/free/intr/{i}/', headers=request_header())
text = response.text
soup = BeautifulSoup(text, "html.parser")
all_eva = soup.findAll("tr")
for td in all_eva:
data = []
ip2 = re.search(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', str(td))
if (ip2 != None):
ip_ = ip2.group()
port2 = re.search(r'PORT.*?\d{1,5}', str(td))
if (port2 != None):
port3 = port2.group()
port4 = re.search(r'\d{1,5}', str(port3))
port_ = port4.group()
proxy = ip_ + ':' + port_ # 115.218.5.5:9000
all_ip_list.append(proxy)
test_ip(proxy) #开始检测获取到的ip是否可以使用
print('抓取完成!')
print(f'抓取到的ip个数为:{len(all_ip_list)}')
print(f'可以使用的ip个数为:{len(usable_ip_list)}')
print('分别有:\n', usable_ip_list)
#检测ip是否可以使用
def test_ip(proxy):
#构建代理ip
proxies = {
"http": f"http://{proxy}",
#"https": f"http://{proxy}"
# "http": proxy,
# "https": proxy,
}
try:
response = requests.get(url='https://www.baidu.com/',headers=request_header(),proxies=proxies,timeout=1) #设置timeout,使响应等待1s
response.close()
if response.status_code == 200:
usable_ip_list.append(proxy)
print(proxy, '\033[31m可用\033[0m')
else:
print(proxy, '不可用')
except:
print(proxy,'请求异常')
if __name__ == '__main__':
send_request()
该代码示例展示了如何使用Python的requests和BeautifulSoup库抓取网页上的IP地址,并通过正则表达式提取。然后,它检测这些IP地址是否可用作为HTTP代理,将有效IP添加到一个列表中。
3969

被折叠的 条评论
为什么被折叠?



