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