這裏對爬蟲的基礎知識就不過多的闡述了,直接上案例。當數據需求被激發後,怎樣利用爬蟲技術區獲取數據?那麼,順藤摸瓜是最好的方法。所需數據是互聯網數據嗎?該數據是公開的嗎?數據是什麼格式?數據的位置有什麼規則?簡單說,把目標網站的結構摸透,寫爬蟲規則便完全沒問題。其他的就看個人的‘修煉’,怎樣擺脫網站的反爬蟲機制了!
獲取代理IP
在爬蟲中,代理IP是高頻詞。它能隱藏爬取者的真實IP,避免真實IP被封禁的發生。代理IP在各大網站有免費的(質量較差),當然,也能花錢買到高質量的代理IP。這裏給大家分享一個從西刺代理獲取大量免費代理IP的爬蟲代碼塊:
`
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
import random
import time
import numpy as np
start=int(input("從第幾頁開始爬取代理IP?請輸入起始頁數值:"))
end=int(input("在第幾頁結束爬取代理IP?請輸入結束頁數值:"))
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
url_1 = 'https://www.xicidaili.com/nn/'
#https://www.xicidaili.com/nn/2
xc_ip_Pool=pd.DataFrame()
for i in range(start,end+1):
try:
print("爬取 總%d頁 剩%d頁......"%(end-start+1,end-i+1))
if i == 0:
url = url_1
else:
url=url_1+str(i)
requests.adapters.DEFAULT_RETRIES = 5
s = requests.session()
s.keep_alive = False
response_ip = s.get(url, headers=header)
soup_ip = BeautifulSoup(response_ip.text,'lxml')
xc_ip_=[]
for i in range(1,len(soup_ip.select('tr'))):
ip=soup_ip.select('tr')[i].find_all('td')[1].text
dk=soup_ip.select('tr')[i].find_all('td')[2].text
IP='http'+ip+':'+dk
Life_time=soup_ip.select('tr')[i].find_all('td')[8].text
Life_time1=int(re.compile(r'[0-9]*').findall(Life_time)[0])
Life_time2=re.compile(r'分鐘|天').findall(Life_time)[0]
xc_ip_.append([IP,Life_time1,Life_time2])
xc_ip=pd.DataFrame(xc_ip_,columns=['IP','Life_time1','Life_time2'])
#關閉上一次服務器請求 釋放內存
response_ip.close()
del(response_ip)
xc_ip_Pool=pd.concat([xc_ip_Pool,xc_ip],ignore_index=True)
time.sleep(random.randint(3,5))
except Exception:
print('An error or warning occurred:')
finally:
time.sleep(random.randint(2,5))
xc_ip_Pool.to_excel("西刺代理池.xlsx",index=False)#將代理ip存入本地路徑
print("爬取取結束,已建立西刺代理池: xc_ip_Pool ,約計%d條IP!"%(xc_ip_Pool.shape[0]))
`
這裏是爬取的部分西刺代理免費IP:
網頁結構的探索
對網頁結構探索的深度決定了爬取數據的準度,數據在網頁中的位置規律被爬取者摸透了,爬到的數據才一定是我們在網頁瀏覽時的可見數據。
探索網站服務的城市城區
爲了能夠深度爬取網站的各城區的租房數據,我們的從網站拿到各城區的網頁鏈接。拿到URL後就能夠嵌入爬蟲框架中獲取整個網站的全部城區的租房數據了。
獲得各城區的url列表如下。
創建爬蟲框架
何謂爬蟲框架?就當做是碼代碼了。這堆代碼能夠向網站發出並獲得鏈接請求,然後解讀獲得html文件。最後從該文件中匹配並儲存規整的目標數據爲表到本地路徑。
在堆代碼的時候,至少要特別注意的問題是:
1.代理ip的替換
2.請求的最大重連接次數設置
3.關閉多餘鏈接以及清空上次請求緩存
4.設置程序休眠時段
5.錯誤接收處理
6.空白網頁的跳躍
7.爬取數據的暫存與合併
最後展示爬取的部分數據:
爬取的網頁數據進行初步清洗,得到較爲乾淨的數據:
對該網站的數據爬取到數據清洗也就基本完成了。在爬蟲的框架構建中,要儘可能的模仿自然網頁點擊模式。也就是反反爬蟲的機制要好,既然是爬蟲,就要捨得時間,只要代碼能正常工作,在能接受的時間段內,速度慢的像蟲子一樣的爬蟲框架纔是好的爬蟲框架。好了,分享就到這裏………………