爬虫的一个小案列

需要的网站网址

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)
   

猜你喜欢

转载自blog.csdn.net/SDSsdsSDsSSSDDDS/article/details/127151875
今日推荐