操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

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

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

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

    http請求過程知道了http的基本請求過程,就可以通過代碼進行體驗了。

    通過發(fā)起http請求我們可以通過的模塊很方便的發(fā)起http請求。模塊是第三方模塊,安裝完成之后直接就能使用。下面介紹一些簡單的用法,更多的使用方法可以參考如下鏈接:

    {:=""}發(fā)起請求

    import requests
    # 請求的首部信息
    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對象的get方法,對指定的url發(fā)起請求
    # 該方法會返回一個Response對象
    res = requests.get(url, headers=headers)
    # 通過Response對象的text方法獲取網(wǎng)頁的文本信息
    print(res.text)

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

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

    {:="blank"}

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

    find(name , attrs , recursive , string , **kwargs )
    # find_all()方法將返回文檔中符合條件的所有tag,
    find_all(name , attrs , recursive , string , **kwargs )

    大多情況下我們只會用到前兩個參數(shù)。具體用法如下:

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

    在我們真正開始爬蟲的時候,還需要對網(wǎng)頁的DOM結(jié)構(gòu)進行分析,這樣才能知道應(yīng)該如何提取我們需要的信息靜態(tài)網(wǎng)頁的爬取思路,下面將會結(jié)合一個例子對DOM結(jié)構(gòu)進行分析。

    靜態(tài)網(wǎng)頁爬蟲實戰(zhàn)在本節(jié)的例子里面,我們將對虎撲nba首頁所有新聞的標(biāo)題和來源進行爬取。首先我們導(dǎo)入我們所需要的和bs4模塊,然后向目標(biāo)url發(fā)出get請求獲取首頁的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)

    我們的目的是提取新聞的標(biāo)題和來源,所以下一步需要對新聞首頁的DOM結(jié)構(gòu)進行分析。給出新聞首頁的截圖如下:

    虎撲nba新聞首頁畫紅線的部分就是我們要爬取的信息,下面通過控制臺對DOM結(jié)構(gòu)進行分析。結(jié)果如下圖:

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

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

    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('h4').get_text().strip()
            # 提取新聞來源
            source = i.find('span', {'class': 'comeFrom'}).find('a').get_text().strip()
            # 存儲爬取結(jié)果
            news_titles.append(title)
            news_source.append(source)
            print('新聞標(biāo)題:', title)
            print('新聞來源:', source)
            print()
        except AttributeError as e:
            continue

    爬取結(jié)果如下圖:

    爬取結(jié)果如有錯誤,還請指正

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有