溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何用python爬數(shù)據(jù)

發(fā)布時間:2022-02-23 10:37:21 來源:億速云 閱讀:139 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下如何用python爬數(shù)據(jù)的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

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

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


def get(url):  # 將請求方法封裝,方便使用try語句捕捉異常
    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)  # 使用正則匹配對傳入的text文本進(jìn)行正則匹配,并將匹配成功的結(jié)果保存在items
    return items  # 將匹配的結(jié)果返回


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

爬蟲開發(fā)第一步:網(wǎng)頁分析

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

爬蟲開發(fā)第二步,數(shù)據(jù)爬取

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

爬蟲開發(fā)第三步,數(shù)據(jù)處理

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

爬蟲開發(fā)第四步,數(shù)據(jù)保存

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

以上就是“如何用python爬數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI