python編譯練習(xí),為了將自己學(xué)習(xí)過的知識用上,自己找了很多資料。所以想做一個簡單的爬蟲,代碼不會超過60行。主要用于爬取的古詩文網(wǎng)站沒有什么限制而且網(wǎng)頁排布很規(guī)律,沒有什么特別的東西,適合入門級別的爬蟲。
按需策劃可以根據(jù)自己的需求進(jìn)行定制,做網(wǎng)站、成都網(wǎng)站建設(shè)構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司做網(wǎng)站、成都網(wǎng)站建設(shè)的運用實際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實際意義抓取目標(biāo)站點的準(zhǔn)備工作
Python的版本是:3.4.3.
爬取的目標(biāo)是: 古詩文網(wǎng)(www.xzslx.net)
隨意打開一個古詩文網(wǎng)的古詩頁面,查看它的網(wǎng)頁地址就能看到,古詩的地址基本是 “www.xzslx.net/shi/+ id + .html” 構(gòu)成,如下圖:
然后對古詩文網(wǎng)的古詩總覽頁面可以看到分頁符 最下方:
總共包括29830篇古詩文可以抓取,確定了”/shi/”后面數(shù)字的范圍。
html頁面解析庫: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ù)的主要參考請看《python網(wǎng)絡(luò)數(shù)據(jù)采集》第9頁里面的代碼。采用try...catch...
防止采集的頁面是發(fā)生異常而導(dǎo)致爬蟲終止。
getUrl(pg)
函數(shù)主要是方便url的組成,了解join()函數(shù)是python的基礎(chǔ),很簡單不用細(xì)說。
open()
函數(shù)用于打開文檔,這里我打開一個 result.txt 的文檔存放爬取的結(jié)果。
名為html的變量代表的是一個通過getPage()函數(shù)獲取的BeautifulSoup對象,觀察原頁面可發(fā)現(xiàn)詩歌內(nèi)容存放在一個屬性“class = ‘son2’”的div內(nèi),而且是html文檔中第二個這樣的標(biāo)簽(第一個這樣的標(biāo)簽是搜索框)。
使用get_text()
函數(shù)獲取<div class = 'son2'>
的文字內(nèi)容,整首詩存放在“原文:”的后面,故在所獲的內(nèi)容中找到”原文:”的位置并向后偏移3個位置加一個換行符總共4個字符,便得到了原詩的內(nèi)容。
詩歌的單句以“?!?, “!”, “?”結(jié)尾,故將詩句拆分成單句的正則表達(dá)式為 '(.*?[。!?])'
, “.*?” 表示python正則中的非貪婪模式,[]內(nèi)的內(nèi)容表示任選其一,()則是為了找到匹配結(jié)果并存放。
得到單句以后只需要判斷”月”字是否在詩句中即可,有則輸出到result.txt 中,沒有則判斷下一句。
print ('---page', pg, 'dealed---')
在命令行里輸出爬取的狀態(tài),方便目測爬取的進(jìn)度。
最后的結(jié)果是:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:Python網(wǎng)絡(luò)爬蟲:爬取古詩文中的某個制定詩句來實現(xiàn)搜索-創(chuàng)新互聯(lián)
分享地址:http://aaarwkj.com/article24/ispce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、企業(yè)建站、全網(wǎng)營銷推廣、網(wǎng)站營銷、服務(wù)器托管、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容