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了!