Python手拉手教你爬取貝殼房源數(shù)據(jù)的實(shí)戰(zhàn)教程
一、爬蟲是什么?
在進(jìn)行大數(shù)據(jù)分析或者進(jìn)行數(shù)據(jù)挖掘的時候,數(shù)據(jù)源可以從某些提供數(shù)據(jù)統(tǒng)計(jì)的網(wǎng)站獲得,也可以從某些文獻(xiàn)或內(nèi)部資料中獲得,但是這些獲得數(shù)據(jù)的方式,有時很難滿足我們對數(shù)據(jù)的需求,而手動從互聯(lián)網(wǎng)中去尋找這些數(shù)據(jù),則耗費(fèi)的精力過大。此時就可以利用爬蟲技術(shù),自動地從互聯(lián)網(wǎng)中獲取我們感興趣的數(shù)據(jù)內(nèi)容,并將這些數(shù)據(jù)內(nèi)容爬取回來,作為我們的數(shù)據(jù)源,從而進(jìn)行更深層次的數(shù)據(jù)分析,并獲得更多有價(jià)值的信息。 在使用爬蟲前首先要了解爬蟲所需的庫(requests)或者( urllib.request ),該庫是為了爬取數(shù)據(jù)任務(wù)而創(chuàng)建的。
二、使用步驟
1.引入庫
代碼如下(示例):
import os import urllib.request import random import time class BeikeSpider: def __init__(self, save_path="./beike"): """ 貝殼爬蟲構(gòu)造函數(shù) :param save_path: 網(wǎng)頁保存目錄 """
2.讀入數(shù)據(jù)
代碼如下 :
# 網(wǎng)址模式 self.url_mode = "http://{}.fang.ke.com/loupan/pg{}/" # 需爬取的城市 self.cities = ["cd", "sh", "bj"] # 每個城市爬取的頁數(shù) self.total_pages = 20 # 讓爬蟲程序隨機(jī)休眠5-10秒 self.sleep = (5, 10) # 網(wǎng)頁下載保存根目錄 self.save_path = save_path # 設(shè)置用戶代理,是爬蟲程序偽裝成瀏覽器 self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"} # 代理IP的信息 self.proxies = [ {"https": "123.163.67.50:8118"}, {"https": "58.56.149.198:53281"}, {"https": "14.115.186.161:8118"} ] # 創(chuàng)建保存目錄 if not os.path.exists(self.save_path): os.makedirs(self.save_path) def crawl(self): """ 執(zhí)行爬取任務(wù) :return: None """
該處使用的url網(wǎng)絡(luò)請求的數(shù)據(jù)。
3.隨機(jī)選擇一個ip地址構(gòu)建代理服務(wù)器
for city in self.cities: print("正在爬取的城市:", city) # 每個城市的網(wǎng)頁用單獨(dú)的目錄存放 path = os.path.join(self.save_path, city) if not os.path.exists(path): os.makedirs(path) for page in range(1, self.total_pages+1): # 構(gòu)建完整的url url = self.url_mode.format(city, page) # 構(gòu)建Request對象, 將url和請求頭放入對象中 request = urllib.request.Request(url, headers=self.headers) # 隨機(jī)選擇一個代理IP proxy = random.choice(self.proxies) # 構(gòu)建代理服務(wù)器處理器 proxy_handler = urllib.request.ProxyHandler(proxy) # 構(gòu)建opener opener = urllib.request.build_opener(proxy_handler) # 使用構(gòu)建的opener打開網(wǎng)頁 response = opener.open(request) html = response.read().decode("utf-8") # 網(wǎng)頁保存文件名(包含路徑) filename = os.path.join(path, str(page)+".html") # 保存網(wǎng)頁 self.save(html, filename) print("第%d頁保存成功!" % page) # 隨機(jī)休眠 sleep_time = random.randint(self.sleep[0], self.sleep[1]) time.sleep(sleep_time)
該處除隨機(jī)選擇ip地址以外還會限制爬取數(shù)據(jù)的速度,避免暴力爬取。
4.運(yùn)行代碼
def save(self, html, filename): """ 保存下載的網(wǎng)頁 :param html: 網(wǎng)頁內(nèi)容 :param filename: 保存的文件名 :return: """ f = open(filename, 'w', encoding="utf-8") f.write(html) f.close() def parse(self): """ 解析網(wǎng)頁數(shù)據(jù) :return: """ pass if __name__ == "__main__": spider = BeikeSpider() spider.crawl()
運(yùn)行結(jié)果就會這樣,會保存在你的文件夾中。
總結(jié)
這里對文章進(jìn)行總結(jié):今天分析這波代碼目的是為了讓大家清晰明亮的了解python爬蟲的運(yùn)作,和大家一起學(xué)習(xí)
以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了pandas的使用,而urllib.request提供了大量能使我們快速便捷地爬取數(shù)據(jù)。
相關(guān)文章
利用Python通過獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能
大家是不是嫌棄每次打開百度太麻煩?今天教大家利用Python通過獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能,用程序直接打開網(wǎng)頁,需要的朋友可以參考下2021-06-06matplotlib在python上繪制3D散點(diǎn)圖實(shí)例詳解
這篇文章主要介紹了matplotlib在python上繪制3D散點(diǎn)圖實(shí)例詳解,首先介紹了官網(wǎng)的實(shí)例,然后分享了本文簡單代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12Python的輸出格式化和進(jìn)制轉(zhuǎn)換介紹
大家好,本篇文章主要講的是Python的輸出格式化和進(jìn)制轉(zhuǎn)換介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01Python PyQt5實(shí)戰(zhàn)項(xiàng)目之查詢器的實(shí)現(xiàn)流程詳解
PyQt5以一套Python模塊的形式來實(shí)現(xiàn)功能。它包含了超過620個類,600個方法和函數(shù)。它是一個多平臺的工具套件,它可以運(yùn)行在所有的主流操作系統(tǒng)中,包含Unix,Windows和Mac OS。PyQt5采用雙重許可模式。開發(fā)者可以在GPL和社區(qū)授權(quán)之間選擇2021-11-11python構(gòu)建自定義回調(diào)函數(shù)詳解
在工作中,回調(diào)函數(shù)使用的場景是非常多的,下面我們就來通過例子程序來詳細(xì)了解利用了Python的屬性機(jī)制構(gòu)建了一個自定義回調(diào)函數(shù)的使用2017-06-06Pyinstaller打包Scrapy項(xiàng)目的實(shí)現(xiàn)步驟
這篇文章主要介紹了Pyinstaller打包Scrapy項(xiàng)目的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python hashlib庫數(shù)據(jù)安全加密必備指南
這篇文章主要為大家介紹了Python hashlib庫數(shù)據(jù)安全加密的使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01