需要的网站网址
url不能说,需要私聊我
需要的python包
import requests
import parsel
抓取思路
1.访问网站,将网站转换为html
2.解析网站的数据,使用xpath对ip以及端口进行分析(难点)
3.数据的清洗以及保存
抓取代码
访问网站
def request(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
response = requests.get(url = url,headers = headers)
# print(type(response.text))
# 把一个字符串对象装换为一个selector对象
# <class 'str'>
return response
xpath数据分析
def data_anaylise(response, url):
selector = parsel.Selector(response.text)
# //*[@id="list"]/table/tbody/tr[1]/td[1]/text()
# //从任意节点开始选择,‘[]’表示的是选中一个区块,从这个区块里面寻找数据,[]里面的@id="list",表示这是一个
# id = "list"的一个区块,选择区块中的第一个table的第一个tbody的第一个tr的第一个td的全部文本
#因为需要返回很多个tr标签,把tr[1]中的[1]去掉
ip_lsit = selector.xpath('//*[@id="list"]/table/tbody/tr/td[1]/text()').getall()
port_lsit = selector.xpath('//*[@id="list"]/table/tbody/tr/td[2]/text()').getall()
for ip, port in zip(ip_lsit, port_lsit):
proxy = ip + ":" + port
proxies_dict = {
"http" : "http://" + proxy,
"https" : "https://" + proxy,
}
# print(proxies_dict)
#因为请求代理可能会出现报错的情况,这里进行了一个异常处理
try:
requests.get(url = url,proxy = proxies_dict, timeout = 2)
if response.status_code ==200:
print("可用")
ip_lsit.append(proxies_dict)
except:
pass
#<Selector xpath=None data='<html>\n<head>\n<meta http-equiv="X-UA-...'>
主函数调用
if __name__=='__main__':
global ip_lsit
ip_lsit = []
for i in range(1,100):
i = str(i)
print(i)
url = f"https://www.kuaidaili.com/free/inha/" + i +"/"
response = request(url)
data_anaylise(response,url)
print(ip_lsit)