如何實(shí)現(xiàn)Python小爬蟲(chóng)-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比榮縣網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式榮縣網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋榮縣地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

本篇文章為大家展示了如何實(shí)現(xiàn)Python小爬蟲(chóng),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

所謂網(wǎng)絡(luò)爬蟲(chóng),通俗的講,就是通過(guò)向我們需要的URL發(fā)出http請(qǐng)求,獲取該URL對(duì)應(yīng)的http報(bào)文主體內(nèi)容,之后提取該報(bào)文主體中我們所需要的信息。所以,想要學(xué)習(xí)python爬蟲(chóng),需要具備一些http的基礎(chǔ)知識(shí),熟悉http請(qǐng)求的基本過(guò)程。在本文中,首先會(huì)簡(jiǎn)單的介紹一下http請(qǐng)求的基本流程,之后介紹python的requests庫(kù),requests庫(kù)可以方便地幫助我們完成http請(qǐng)求。因?yàn)楸疚慕榻B的是爬取靜態(tài)網(wǎng)頁(yè),所以請(qǐng)求相應(yīng)的URL之后,我們需要對(duì)其中的信息進(jìn)行提取,這時(shí)候就需要BeautifulSoup庫(kù),它可以輕松的找出我們需要的信息,當(dāng)然,有時(shí)候借助正則表達(dá)式會(huì)更快地幫助我們抽取網(wǎng)頁(yè)中我們需要的信息。最后,我們會(huì)通過(guò)一個(gè)例子,對(duì)靜態(tài)網(wǎng)頁(yè)的爬取過(guò)程做一個(gè)具體的實(shí)現(xiàn)。

http基本知識(shí)

當(dāng)我們通過(guò)瀏覽器訪問(wèn)指定的URL時(shí),需要遵守http協(xié)議。本節(jié)將介紹一些關(guān)于http的基礎(chǔ)知識(shí)。

http基本流程

我們打開(kāi)一個(gè)網(wǎng)頁(yè)的過(guò)程,就是一次http請(qǐng)求的過(guò)程。這個(gè)過(guò)程中,我們自己的主機(jī)充當(dāng)著客戶機(jī)的作用,而充當(dāng)客戶端的是瀏覽器。我們輸入的URL對(duì)應(yīng)著網(wǎng)絡(luò)中某臺(tái)服務(wù)器上面的資源,服務(wù)器接收到客戶端發(fā)出的http請(qǐng)求之后,會(huì)給客戶端一個(gè)響應(yīng),響應(yīng)的內(nèi)容就是請(qǐng)求的URL對(duì)應(yīng)的內(nèi)容,當(dāng)客戶端接收到服務(wù)器的響應(yīng)時(shí),我們就可以在瀏覽器上看見(jiàn)請(qǐng)求的信息了。這一過(guò)程如下圖所示:

如何實(shí)現(xiàn)Python小爬蟲(chóng)

通過(guò)requests發(fā)起http請(qǐng)求

我們可以通過(guò)python的requests模塊很方便的發(fā)起http請(qǐng)求。requests模塊是第三方模塊,安裝完成之后直接import就能使用。下面介紹一些簡(jiǎn)單的用法

發(fā)起請(qǐng)求

import requests
# 請(qǐng)求的首部信息
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
    Chrome/65.0.3325.146 Safari/537.36'
}
# 例子的url
url = 'https://voice.hupu.com/nba' # 虎撲nba新聞
# 利用requests對(duì)象的get方法,對(duì)指定的url發(fā)起請(qǐng)求
# 該方法會(huì)返回一個(gè)Response對(duì)象
res = requests.get(url, headers=headers)
# 通過(guò)Response對(duì)象的text方法獲取網(wǎng)頁(yè)的文本信息
print(res.text)

上面的代碼中,我們向虎撲的服務(wù)器發(fā)送了一個(gè)get請(qǐng)求,獲取虎撲首頁(yè)的nba新聞。headers參數(shù)指的是http請(qǐng)求的首部信息,我們請(qǐng)求的url對(duì)應(yīng)的資源是虎撲nba新聞的首頁(yè)。獲取到對(duì)應(yīng)的網(wǎng)頁(yè)資源之后,我們需要對(duì)其中的信息進(jìn)行提取。

通過(guò)BeautifulSoup提取網(wǎng)頁(yè)信息

BeautifulSoup庫(kù)提供了很多解析html的方法,可以幫助我們很方便地提取我們需要的內(nèi)容。我們這里說(shuō)的BeautifulSoup指的是bs4。當(dāng)我們成功抓取網(wǎng)頁(yè)之后,就可以通過(guò)BeautifulSoup對(duì)象對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行解析。在BeautifulSoup中,我們最常用的方法就是find()方法和find_all()方法,借助于這兩個(gè)方法,可以輕松地獲取到我們需要的標(biāo)簽或者標(biāo)簽組。關(guān)于其他的方法,可以參考bs4的官方文檔:BeautifulSoup

find()方法和find_all()方法的用法如下

find(name , attrs , recursive , string , **kwargs )
# find_all()方法將返回文檔中符合條件的所有tag,
find_all(name , attrs , recursive , string , **kwargs )
from bs4 import BeautifulSoup
# BeautifulSoup對(duì)象接收html文檔字符串
# lxml是html解析器
soup = Beautiful(res.text, 'lxml')
# 下面的方法找出了所有class為hello的span標(biāo)簽
# 并將所有的結(jié)果都放入一個(gè)list返回
tags = soup.find_all('span', {'class': 'hello'})

靜態(tài)網(wǎng)頁(yè)爬蟲(chóng)實(shí)戰(zhàn)

在本節(jié)的例子里面,我們將對(duì)虎撲nba首頁(yè)所有新聞的標(biāo)題和來(lái)源進(jìn)行爬取。首先我們導(dǎo)入我們所需要的requests和bs4模塊,然后向目標(biāo)url發(fā)出get請(qǐng)求獲取首頁(yè)的html文檔。具體如下:

import requests
from bs4 import BeautifulSoup

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
    Chrome/65.0.3325.146 Safari/537.36'
}
url = 'https://voice.hupu.com/nba' # 虎撲nba新聞
res = requests.get(url, headers=headers)

如何實(shí)現(xiàn)Python小爬蟲(chóng)

畫(huà)紅線的部分就是我們要爬取的信息,下面通過(guò)chrome控制臺(tái)對(duì)DOM結(jié)構(gòu)進(jìn)行分析。結(jié)果如下圖:

如何實(shí)現(xiàn)Python小爬蟲(chóng)本著從特殊到一般的思路進(jìn)行搜索,通過(guò)一個(gè)新聞信息進(jìn)行分析,找出所有新聞的共性。通過(guò)分析發(fā)現(xiàn),我們需要的標(biāo)題信息是一個(gè)a標(biāo)簽對(duì)應(yīng)的內(nèi)容,然后我們需要向上進(jìn)行搜索,可見(jiàn)標(biāo)題信息的上一級(jí)是一個(gè)h5標(biāo)簽,h5標(biāo)簽的上一級(jí)是一個(gè)class屬性值為list-hd的div標(biāo)簽,這個(gè)div的上一級(jí)是一個(gè)li標(biāo)簽。用通過(guò)同樣的思路對(duì)來(lái)源信息進(jìn)行分析,我們發(fā)現(xiàn),新聞標(biāo)題信息和新聞來(lái)源信息都在一個(gè)li標(biāo)簽下面,進(jìn)一步可以發(fā)現(xiàn),其他的新聞信息都在這類(lèi)li標(biāo)簽下,這些li標(biāo)簽都在class屬性值為news-list的div標(biāo)簽下,而且整片文檔中,class屬性值為news-list的div標(biāo)簽也只有這一個(gè)。

因此,我們可以從這個(gè)div入手,找到這個(gè)標(biāo)簽下的每一個(gè)li標(biāo)簽,對(duì)每一個(gè)li標(biāo)簽進(jìn)行遍歷,每一個(gè)li標(biāo)簽下有唯一的h5標(biāo)簽,該標(biāo)簽的文本即為我們要找的標(biāo)題信息;另外,每一個(gè)li標(biāo)簽下也僅僅有一個(gè)class屬性值為comeFrom的span標(biāo)簽,該span標(biāo)簽下的a標(biāo)簽對(duì)應(yīng)的文本就是來(lái)源信息。分析結(jié)束之后,我們就可以通過(guò)bs4進(jìn)行信息提取了。代碼如下:

soup = BeautifulSoup(res.text, 'lxml')

# 找出class屬性值為news-list的div
news_list = soup.find('div', {'class': 'news-list'})
# 找出news_list下的所有l(wèi)i標(biāo)簽
news = news_list.find_all('li')
news_titles = []
news_source = []

# 遍歷news
for i in news:
    try:
        # 提取新聞標(biāo)題
        title = i.find('h5').get_text().strip()
        # 提取新聞來(lái)源
        source = i.find('span', {'class': 'comeFrom'}).find('a').get_text().strip()
        # 存儲(chǔ)爬取結(jié)果
        news_titles.append(title)
        news_source.append(source)
        print('新聞標(biāo)題:', title)
        print('新聞來(lái)源:', source)
        print()
    except AttributeError as e:
        continue

爬取結(jié)果如下

如何實(shí)現(xiàn)Python小爬蟲(chóng)

上述內(nèi)容就是如何實(shí)現(xiàn)Python小爬蟲(chóng),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

本文名稱:如何實(shí)現(xiàn)Python小爬蟲(chóng)-創(chuàng)新互聯(lián)
文章鏈接:http://muchs.cn/article10/cosodo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化品牌網(wǎng)站建設(shè)、微信小程序、ChatGPT、云服務(wù)器、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)