App下載

怎么用python爬數(shù)據(jù)?python爬蟲(chóng)基礎(chǔ)介紹!

猿友 2021-06-02 16:15:05 瀏覽數(shù) (4605)
反饋

如果說(shuō)當(dāng)下最熱門的語(yǔ)言,那非屬 python 不可。如果說(shuō) python 最火熱的方向是哪個(gè),那么爬蟲(chóng)絕對(duì)有一席之地?,F(xiàn)在的許多 python 培訓(xùn)課程,都喜歡拿 python 爬蟲(chóng)來(lái)增加學(xué)員的學(xué)習(xí)興趣。那么,怎么用 python 爬取數(shù)據(jù)?小編接下來(lái)帶你了解一個(gè) python 爬蟲(chóng)的開(kāi)發(fā)流程。

小編先放上一個(gè)示例代碼(以當(dāng)當(dāng)好評(píng)榜 TOP500 為例),以下介紹基于該代碼進(jìn)行介紹。

import requests  # 引入request庫(kù)進(jìn)行頁(yè)面請(qǐng)求
from requests.exceptions import RequestException  # 引入RequestException來(lái)捕獲request可能出現(xiàn)的異常
import re  # 引入re庫(kù)來(lái)進(jìn)行正則匹配
import json  # 引入json 來(lái)進(jìn)行json格式轉(zhuǎn)化


def get(url):  # 將請(qǐng)求方法封裝,方便使用try語(yǔ)句捕捉異常
    try:
        response = requests.get(url)  # 使用request的get方法獲取響應(yīng)流
        if response.status_code == 200:  # 處理響應(yīng)流,如果不是200響應(yīng),則返回None
            return response.text  # 將響應(yīng)流以文本方式返回
        return None
    except RequestException:
        return None


def parse(text):  # 將正則匹配方法封裝,使代碼模塊化
    pattern = re.compile('<li>.*?list_num.*?>(.*?)</div>.*?pic.*?src="(.*?)".*?/></a>.*?name"><a.*?title="('
                         '.*?)">.*?tuijian">(.*?)</span>.*?publisher_info.*?title="(.*?)".*?biaosheng.*?<span>('
                         '.*?)</span>.*?</li>', re.S)  # 設(shè)定正則表達(dá)式匹配規(guī)則
    items = re.findall(pattern, text)  # 使用正則匹配對(duì)傳入的text文本進(jìn)行正則匹配,并將匹配成功的結(jié)果保存在items
    return items  # 將匹配的結(jié)果返回


if __name__ == "__main__":
    target_url = "http://bang.dangdang.com/books/fivestars/"  # 目標(biāo)爬取的頁(yè)面url
    html = get(target_url)  # 使用封裝好的get方法將整個(gè)目標(biāo)HTML頁(yè)面爬取下來(lái)
    for item in parse(html):  # 使用封裝好的正則匹配方法對(duì)目標(biāo)HTML進(jìn)行正則匹配,然后用一個(gè)循環(huán)將結(jié)果進(jìn)行處理
        print(item)
        # 接下來(lái)是將結(jié)果寫入txt文件的操作
        with open('book.txt', 'a', encoding='UTF-8') as f:
            f.write(json.dumps(item, ensure_ascii=False) + '\n')  # 使用json庫(kù)的dumps方法將列表對(duì)象轉(zhuǎn)變成json對(duì)象(字符串),然后寫入文本
            f.close()

爬蟲(chóng)開(kāi)發(fā)第一步:網(wǎng)頁(yè)分析

爬蟲(chóng)開(kāi)發(fā)的第一步,是對(duì)目標(biāo)網(wǎng)頁(yè)進(jìn)行分析,首先要知道你需要的目標(biāo)數(shù)據(jù)在哪里,這里使用開(kāi)發(fā)者工具查看整個(gè)頁(yè)面結(jié)構(gòu),發(fā)現(xiàn)目標(biāo)數(shù)據(jù)在一個(gè) ?<li>? 元素中,所以開(kāi)發(fā)思路是,將這個(gè)頁(yè)面的數(shù)據(jù)獲取下來(lái),然后獲取數(shù)據(jù)中的 ?<li>? 元素(里面的有用的數(shù)據(jù))。

f12開(kāi)發(fā)者工具進(jìn)行元素定位

爬蟲(chóng)開(kāi)發(fā)第二步,數(shù)據(jù)爬取

經(jīng)過(guò)第一步的分析,我們已經(jīng)大致有了爬蟲(chóng)的思路了,所以現(xiàn)在要做的,就是把這個(gè)頁(yè)面爬取下來(lái)。這時(shí)候 request 庫(kù)出場(chǎng)了。使用 request 的 ?get() ?方法,可以將目標(biāo)頁(yè)面的 html 爬下來(lái)。得到了目標(biāo)頁(yè)面的 html(代碼中將其存儲(chǔ)在 html 字符串中)。就可以進(jìn)行接下來(lái)的操作了。

爬蟲(chóng)開(kāi)發(fā)第三步,數(shù)據(jù)處理

使用正則表達(dá)式,匹配代碼中的目標(biāo)數(shù)據(jù)(也就是之前分析的li元素里的有用的數(shù)據(jù))。并將其放進(jìn)一個(gè) ?items?  列表中。完成到這一步,數(shù)據(jù)的爬取分析也就基本結(jié)束了。只要將爬取的結(jié)果進(jìn)行保存就可以了。

爬蟲(chóng)開(kāi)發(fā)第四步,數(shù)據(jù)保存

小編這里使用python自帶的文件讀寫函數(shù),將數(shù)據(jù)以json的格式保存在一個(gè)叫 ?book.txt? 的文件中。

小結(jié)

現(xiàn)在大多數(shù)網(wǎng)頁(yè)爬蟲(chóng)的開(kāi)發(fā)方式基本都是上面的四步,python 的爬蟲(chóng)結(jié)構(gòu)也大同小異。不過(guò)隨著更多更好的工具出現(xiàn),以及網(wǎng)站反爬意識(shí)的加強(qiáng),最新的爬蟲(chóng)往往需要更好開(kāi)發(fā)工具庫(kù)和更多的配置。更多爬蟲(chóng)知識(shí)學(xué)習(xí),可以前往 python課程進(jìn)行學(xué)習(xí)(內(nèi)有爬蟲(chóng)課程)。

注:小編警告,非法爬取網(wǎng)站數(shù)據(jù),會(huì)對(duì)網(wǎng)站的日常運(yùn)營(yíng)造成一定的負(fù)擔(dān),這種行為也是違法行為,請(qǐng)勿惡意爬取別人的網(wǎng)站數(shù)據(jù),在 python 爬蟲(chóng)的學(xué)習(xí)過(guò)程中也盡量少用較高次數(shù)的循環(huán)語(yǔ)句進(jìn)行爬取!


0 人點(diǎn)贊