中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Python網絡爬蟲:爬取古詩文中的某個制定詩句來實現搜索

發布時間:2020-07-20 23:48:19 來源:網絡 閱讀:1218 作者:mgcisco 欄目:編程語言

 python編譯練習,為了將自己學習過的知識用上,自己找了很多資料。所以想做一個簡單的爬蟲,代碼不會超過60行。主要用于爬取的古詩文網站沒有什么限制而且網頁排布很規律,沒有什么特別的東西,適合入門級別的爬蟲。


抓取目標站點的準備工作


Python的版本是:3.4.3.


爬取的目標是: 古詩文網(www.xzslx.net)


隨意打開一個古詩文網的古詩頁面,查看它的網頁地址就能看到,古詩的地址基本是 “www.xzslx.net/shi/+ id + .html” 構成,如下圖:


Python網絡爬蟲:爬取古詩文中的某個制定詩句來實現搜索


然后對古詩文網的古詩總覽頁面可以看到分頁符 最下方:


Python網絡爬蟲:爬取古詩文中的某個制定詩句來實現搜索

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


html頁面解析庫:BeautifulSoup 

安裝方式是: $pip3 install BeautifulSoup4


主要參考文獻:《python網絡數據采集》第一、二章

代碼解析:

#!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) 函數的主要參考請看《python網絡數據采集》第9頁里面的代碼。采用try...catch...防止采集的頁面是發生異常而導致爬蟲終止。

getUrl(pg) 函數主要是方便url的組成,了解join()函數是python的基礎,很簡單不用細說。 

open() 函數用于打開文檔,這里我打開一個 result.txt 的文檔存放爬取的結果。 

名為html的變量代表的是一個通過getPage()函數獲取的BeautifulSoup對象,觀察原頁面可發現詩歌內容存放在一個屬性“class = ‘son2’”的div內,而且是html文檔中第二個這樣的標簽(第一個這樣的標簽是搜索框)。

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

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

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

print ('---page', pg, 'dealed---') 在命令行里輸出爬取的狀態,方便目測爬取的進度。


最后的結果是:

Python網絡爬蟲:爬取古詩文中的某個制定詩句來實現搜索

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南涧| 永登县| 水富县| 安塞县| 乳山市| 长乐市| 长泰县| 织金县| 博罗县| 德化县| 黔东| 耒阳市| 繁昌县| 湾仔区| 怀化市| 家居| 崇阳县| 喀什市| 修水县| 邯郸市| 新野县| 新兴县| 育儿| 昂仁县| 海兴县| 鄂尔多斯市| 沙湾县| 年辖:市辖区| 云安县| 玉山县| 昌邑市| 郧西县| 武安市| 沾化县| 忻城县| 海城市| 甘南县| 原阳县| 黄石市| 邛崃市| 济源市|