Python批量爬取代理ip,并自动插入到Excel表格!

思路:

以“http://www.66ip.cn/”网址为例,使用requests访问,通过xpath解析相关标签数据,将数据以列表的形式提取出来组成新的列表,然后再插入表格。然后再通过每页跳转时URL的变化规律进行URL重组后,进行循环访问爬取。

推荐安装xpath插件,直接将相关标签的数据xpath路径复制即可查看变化,如下图:

附上完整代码:

import requests

from lxml import etree

import pandas as pd

import json

#需要爬取的网址

#base_url = "http://www.66ip.cn/"

#定义存放所有页面URL的列表

all_urls = []

#以10页为例,根据规律拼写每页的URL,变化的只是数字,所以使用format函数来实现数字传参

for i in range(1,11):

    create_url = 'http://www.66ip.cn/{}.html'.format(i)

    all_urls.append(create_url)

#此处可以打印all_url查看是否成功

#print(all_urls)

#定义函数,通过xpath获取数据

def get_result(data):

#定义存放每一个ip列表

    all_xpath = []

    for i in range(1,12):

    #得到每个ip列表的,并追加到all_xpath列表中

        base_xpath = '//*[@id="main"]/div/div[1]/table//tr[{}]//text()'.format(i)

    #    print(base_xpath)

        all_xpath.append(base_xpath)


    results = []

    # for循环使用enumerate,enumerate()函数将可遍历的数据对象(如:列表、元组、字典)组合为一个“索引序列”,同时列出数据与下标

    for index, item in  enumerate(all_xpath):

        res = data.xpath(item)

        if index == 0 or not res:

            continue

        else:

            results.append(res)

          # print(results)

    return results

# 每页循环爬取数据

results = []

for url in all_urls:

    response = requests.get(url)

#    print(url)

    text = response.content

    # print(text)

    data = etree.HTML(text)

    res = get_result(data)

    results.append(res)

# 将获取的每页数据合并在一起

results = sum(results, [])

# 插入数据,并定义表格列名

file = pd.DataFrame(data=results, columns=['ip', '端口号', '代理位置', '代理类型', '验证时间'])

# 保存表格到本地路径,并命名文件名

file.to_csv('全世界ip代理.csv',index=False, header=True, encoding='utf-8-sig')

结果图如下:

再也不用担心被封IP了!

完整代码获取点这里即可