使用python結合各種工具包對網頁信息進行爬取,使用起來非常方便
# -*- coding: utf-8 -*-
"""
Created on Mon Apr 6 15:29:40 2020
@author: lujia
"""
# 爬取ip代理,構建ip代理池
# requests
# parsel
import requests # pip install requests
import parsel
import time
import random
import pandas as pd
proxies_list = []
for page in range(1,3):
time.sleep(random.random()*5) # 防連續爬取機制,所以要加隨機延遲
print('正在獲取第{}頁的數據'.format(page))
# 爬蟲的一般思路
# 1、分析目標網頁,確定爬取的url路徑,headers參數
base_url = 'https://www.kuaidaili.com/free/inha/{}/'.format(str(page))
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
# 2、發送請求 -- requests 模擬瀏覽器發送請求,獲取響應數據
response = requests.get(base_url, headers = headers)
#print(response.request.headers)
data = response.text
#print(data)
#ip格式 {"協議格式":"ip:端口"}
# 3、解析數據 -- parsel 轉化爲Selector對象,Selector對象具有xpath的方法,能夠對轉化的數據進行處理
# 轉換數據類型
html_data = parsel.Selector(data)
# 數據解析
parsel_list = html_data.xpath('//table[@class="table table-bordered table-striped"]/tbody/tr')
# 循環遍歷
for tr in parsel_list:
dict_proxies = {}
http_type = tr.xpath('./td[4]/text()').extract_first() # 協議類型
ip_num = tr.xpath('./td[1]/text()').extract_first() # 協議類型
ip_port = tr.xpath('./td[2]/text()').extract_first() # 協議類型
# 構建ip字典
dict_proxies['type'] = http_type
dict_proxies['IP'] = ip_num
dict_proxies['PORT'] = ip_port
proxies_list.append(dict_proxies)
#print(http_type,ip_num,ip_port)
print('最終獲取的數據: ',proxies_list)
print('獲取到的ip代理數量: ', len(proxies_list))
# 4、保存數據
filename = '1.xlsx'
print('正在導出excel文件:',filename)
df = pd.DataFrame(proxies_list)
df.to_excel(filename, index=False)
print('導出完畢!')