成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python網(wǎng)絡(luò)爬蟲(chóng):爬取古詩(shī)文中的某個(gè)制定詩(shī)句來(lái)實(shí)現(xiàn)搜索

 python編譯練習(xí),為了將自己學(xué)習(xí)過(guò)的知識(shí)用上,自己找了很多資料。所以想做一個(gè)簡(jiǎn)單的爬蟲(chóng),代碼不會(huì)超過(guò)60行。主要用于爬取的古詩(shī)文網(wǎng)站沒(méi)有什么限制而且網(wǎng)頁(yè)排布很規(guī)律,沒(méi)有什么特別的東西,適合入門(mén)級(jí)別的爬蟲(chóng)。

創(chuàng)新互聯(lián)建站成都網(wǎng)站建設(shè)按需策劃設(shè)計(jì),是成都網(wǎng)站維護(hù)公司,為柴油發(fā)電機(jī)提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開(kāi)發(fā)等。成都網(wǎng)站設(shè)計(jì)熱線(xiàn):13518219792

抓取目標(biāo)站點(diǎn)的準(zhǔn)備工作

Python的版本是:3.4.3.

爬取的目標(biāo)是: 古詩(shī)文網(wǎng)(www.xzslx.net)

隨意打開(kāi)一個(gè)古詩(shī)文網(wǎng)的古詩(shī)頁(yè)面,查看它的網(wǎng)頁(yè)地址就能看到,古詩(shī)的地址基本是 “www.xzslx.net/shi/+ id + .html” 構(gòu)成,如下圖:

Python網(wǎng)絡(luò)爬蟲(chóng):爬取古詩(shī)文中的某個(gè)制定詩(shī)句來(lái)實(shí)現(xiàn)搜索

然后對(duì)古詩(shī)文網(wǎng)的古詩(shī)總覽頁(yè)面可以看到分頁(yè)符 最下方:

Python網(wǎng)絡(luò)爬蟲(chóng):爬取古詩(shī)文中的某個(gè)制定詩(shī)句來(lái)實(shí)現(xiàn)搜索

總共包括29830篇古詩(shī)文可以抓取,確定了”/shi/”后面數(shù)字的范圍。

html頁(yè)面解析庫(kù):BeautifulSoup 

安裝方式是: $pip3 install BeautifulSoup4

主要參考文獻(xiàn):《python網(wǎng)絡(luò)數(shù)據(jù)采集》第一、二章

代碼解析:

#!usr/bin/python3
# -*- coding:utf-8 -*-

import re
from urllib.request import urlopen
from urllib.erroe import HTTPError
from bs4 import BeautifulSoup

def getPage(url) :
    try :
        html = urlopen(url)
    except HTTPError as e :
        return None
    try :
        bsObj = BeautifulSoup(html)
    except AttributeError as e :
        return None
    return bsObj

def getUrl(pg) :
    return ''.join(('http://www.xzslx.net/shi/', str(pg),'.html'))

f = open('./result.txt', 'wt')

for pg in range(0, 49149) :
    html = getPage(getUrl(pg))
    cont = (html.findAll('div', {'class' : 'son2'}))
    if cont != None and len(cont) > 1 :
        cont = cont[1].get_text()
        poem = cont[cont.find('原文:') + 4:]
        sentList = re.findall(r'(.*?[。?。縘)', poem)
        for sentc in sentList :
            if '月' in sentc :
                print (sentc, '\t--- <', html.find('h2').get_text(), '>', file = f)
    print ('--- page', pg, ' dealed ---')

getPage(url) 函數(shù)的主要參考請(qǐng)看《python網(wǎng)絡(luò)數(shù)據(jù)采集》第9頁(yè)里面的代碼。采用try...catch...防止采集的頁(yè)面是發(fā)生異常而導(dǎo)致爬蟲(chóng)終止。

getUrl(pg) 函數(shù)主要是方便url的組成,了解join()函數(shù)是python的基礎(chǔ),很簡(jiǎn)單不用細(xì)說(shuō)。 

open() 函數(shù)用于打開(kāi)文檔,這里我打開(kāi)一個(gè) result.txt 的文檔存放爬取的結(jié)果。 

名為html的變量代表的是一個(gè)通過(guò)getPage()函數(shù)獲取的BeautifulSoup對(duì)象,觀察原頁(yè)面可發(fā)現(xiàn)詩(shī)歌內(nèi)容存放在一個(gè)屬性“class = ‘son2’”的div內(nèi),而且是html文檔中第二個(gè)這樣的標(biāo)簽(第一個(gè)這樣的標(biāo)簽是搜索框)。

使用get_text()函數(shù)獲取<div class = 'son2'> 的文字內(nèi)容,整首詩(shī)存放在“原文:”的后面,故在所獲的內(nèi)容中找到”原文:”的位置并向后偏移3個(gè)位置加一個(gè)換行符總共4個(gè)字符,便得到了原詩(shī)的內(nèi)容。

詩(shī)歌的單句以“。”, “!”, “?”結(jié)尾,故將詩(shī)句拆分成單句的正則表達(dá)式為  '(.*?[。???])' , “.*?” 表示python正則中的非貪婪模式,[]內(nèi)的內(nèi)容表示任選其一,()則是為了找到匹配結(jié)果并存放。

得到單句以后只需要判斷”月”字是否在詩(shī)句中即可,有則輸出到result.txt 中,沒(méi)有則判斷下一句。

print ('---page', pg, 'dealed---') 在命令行里輸出爬取的狀態(tài),方便目測(cè)爬取的進(jìn)度。

最后的結(jié)果是:

Python網(wǎng)絡(luò)爬蟲(chóng):爬取古詩(shī)文中的某個(gè)制定詩(shī)句來(lái)實(shí)現(xiàn)搜索

文章名稱(chēng):Python網(wǎng)絡(luò)爬蟲(chóng):爬取古詩(shī)文中的某個(gè)制定詩(shī)句來(lái)實(shí)現(xiàn)搜索
當(dāng)前URL:http://jinyejixie.com/article24/ghhdje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)、電子商務(wù)、App設(shè)計(jì)靜態(tài)網(wǎng)站、云服務(wù)器

廣告

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

成都網(wǎng)站建設(shè)公司
镇江市| 栾川县| 余姚市| 泽州县| 肃南| 海原县| 西贡区| 延庆县| 田林县| 镇江市| 道孚县| 都兰县| 阜阳市| 岐山县| 铁岭县| 南阳市| 伊宁县| 永济市| 广昌县| 颍上县| 浠水县| 罗山县| 自贡市| 福泉市| 高阳县| 康保县| 贡觉县| 达州市| 德安县| 南京市| 平山县| 湘西| 高台县| 游戏| 客服| 宕昌县| 桂东县| 本溪市| 伊宁县| 舞钢市| 三穗县|