【Python】爬蟲案例——租房網站房間信息的全量抓取

  這裏對爬蟲的基礎知識就不過多的闡述了,直接上案例。當數據需求被激發後,怎樣利用爬蟲技術區獲取數據?那麼,順藤摸瓜是最好的方法。所需數據是互聯網數據嗎?該數據是公開的嗎?數據是什麼格式?數據的位置有什麼規則?簡單說,把目標網站的結構摸透,寫爬蟲規則便完全沒問題。其他的就看個人的‘修煉’,怎樣擺脫網站的反爬蟲機制了!

獲取代理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.爬取數據的暫存與合併

在這裏插入圖片描述
  最後展示爬取的部分數據:
在這裏插入圖片描述
  爬取的網頁數據進行初步清洗,得到較爲乾淨的數據:
在這裏插入圖片描述
  對該網站的數據爬取到數據清洗也就基本完成了。在爬蟲的框架構建中,要儘可能的模仿自然網頁點擊模式。也就是反反爬蟲的機制要好,既然是爬蟲,就要捨得時間,只要代碼能正常工作,在能接受的時間段內,速度慢的像蟲子一樣的爬蟲框架纔是好的爬蟲框架。好了,分享就到這裏………………

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章