【Python实战】Python采集代理IP信息

94 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天点击查看活动详情

前言

我们今天继续重点讲解关于parsel解析库的实战技巧,通过实战,我们来学习其强大的功能。

我们先来认识一下什么是parsel库。

Parsel是一个用于解析JSON数据的Python库。它提供了一个简单易用的API,可以轻松地从JSON文件或字符串中解析数据。可以对 HTML 和 XML 进行解析,并支持使用 XPath 和 CSS Selector 对内容进行提取和修改,同时它还融合了正则表达式提取的功能。功能灵活而又强大。

采集数据

我们上一篇介绍了,如何采集当当网里面的商品信息。今天,我们使用parsel方法来获取数据。通过这个案例来加深大家对这个的理解。我们来采集代理IP的相关信息。

发送请求

我们首先确定我们的目标网址,对我们需要获取的数据。这个是我们爬取任何网页都要做的第一步。

5.png

我们要把每一行的数据获取下来,我们接下来用到开发者工具。我们看IP,post,匿名度,位置等信息是在什么位置。是不是在网页源代码中。接下来,我们发送请求,获取网页源代码。

6.png

我们可以观察到,每一行的相关信息都放在<tr>标签里面。我们只要提取<tr>标签里面的内容即可。

我们现在开始写代码。

url = f'https://www.kuaidaili.com/free/inha/1'

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

res = requests.get(url,headers=headers)

代码使用requests库的get()函数来请求这个URL,并将结果存储在变量res中。

获取数据

selector = parsel.Selector(res.text)

trs = selector.css('#list > table > tbody > tr')

我们使用 parsel.Selector() 函数创建一个 Selector 对象,并使用 css() 方法获取 #list > table > tbody > tr 元素的所有子元素。然后,我们使用 css() 方法获取这些子元素中的所有 <tr> 元素,并将它们存储在 trs 变量中。也就是我们上面提到的<tr>标签里面的内容。 我们看看效果怎么样。

7.png

获取内容

for tr in trs:
    ip_num = tr.css('td:nth-child(1)::text').get()
    ip_port = tr.css('td:nth-child(2)::text').get()
    proxies_dict ={
        "http":"http://" + ip_num + ':' + ip_port,
    }
    print(proxies_dict)

trs 是一个包含所有 <tr> 元素的列表。我们使用 css() 方法获取每个元素中的属性值,其中包括 IP 地址、端口。我们把其拼接成一个字典。我们看看效果。

8.png

保存内容

我们之前都是保存成csv文件,这里,我们把它保存成txt文件。

with open('IP.TXT',mode='a',encoding='utf-8')as f:
    f.write(json.dumps(proxies_dict))
    f.write('\n')

我们使用 with open() 语句打开文件,并使用 mode='a' 参数指定文件模式为追加模式(即将内容添加到文件末尾)。然后,我们使用 json.dumps() 函数将 PROXIES_DICT 对象转换为 JSON 格式的字符串,并将其写入文件中。最后,我们使用 write() 方法将字符串写入文件中,并在每行末尾添加一个换行符。

总结

本文介绍了如何使用parsel方法采集代理IP相关信息。通过发送请求并使用parsel.Selector()函数获取网页源代码,然后使用css()方法获取#list > table > tbody > tr 元素的所有子元素,并提取其中的内容。最后,将提取的内容写入文件中并关闭文件。