爬虫-爬取中国诗歌网中中国好诗栏目 - 统计词汇出现频数 - 副本
功能:
我們的代碼爬蟲(chóng)的功能是爬取中國(guó)詩(shī)歌網(wǎng)中中國(guó)好詩(shī)欄目中的所以詩(shī)詞并統(tǒng)計(jì)詞匯出現(xiàn)頻數(shù),來(lái)分析當(dāng)下詩(shī)歌中的高頻詞匯背后的意義。
通過(guò)使用requests庫(kù)、re庫(kù)、BeautifulSoup庫(kù)來(lái)實(shí)現(xiàn)中國(guó)詩(shī)歌網(wǎng)每日好詩(shī)中詩(shī)歌名稱(chēng)與詩(shī)歌內(nèi)容。之后通過(guò)os庫(kù)、jieba庫(kù)來(lái)實(shí)現(xiàn)統(tǒng)計(jì)詞匯出現(xiàn)頻數(shù)并分別存儲(chǔ)到txt與excel中。
代碼運(yùn)行之后,會(huì)出現(xiàn)三個(gè)文件,分別是meirihaoshi.txt、詞匯頻率.txt、詞匯頻率.xlsx。其中meirihaoshi.txt存儲(chǔ)詩(shī)歌網(wǎng)中每日好詩(shī)欄目中所有的詩(shī)歌內(nèi)容。詞匯頻率.txt與詞匯頻率.xlsx存儲(chǔ)著jieba庫(kù)處理過(guò)后的詞匯頻率數(shù)據(jù),其中txt作為備份。
#爬蟲(chóng)-爬取中國(guó)詩(shī)歌網(wǎng)中中國(guó)好詩(shī)欄目 #并用jieba庫(kù)統(tǒng)計(jì)現(xiàn)代詩(shī)中詞匯的出現(xiàn)頻率import requests import re from bs4 import BeautifulSoup import os import jieba from openpyxl import Workbookif __name__=="__main__":#創(chuàng)建并打開(kāi)meirihaoshi.txt文件fp=open('./meirihaoshi.txt','w',encoding='utf-8')#獲取多頁(yè)的網(wǎng)址,并存入列表url='https://www.zgshige.com/sgzk/'sgzk=['index.shtml']sgzk_duo='index_%d.shtml'headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.41'}for pageNum in range(2,10):sgzk.append(format(sgzk_duo%pageNum))#循環(huán)獲取下一個(gè)網(wǎng)址#正則 匹配出對(duì)應(yīng)鏈接for i in sgzk:sgzk_url=url+ipage_text=requests.get(url=sgzk_url,headers=headers).text ex_page_text='<a class="h4 bold" href="(.*?)" target.*?</a>'sgzk_src_list=re.findall(ex_page_text,page_text,re.M)#循環(huán) 匹配出對(duì)應(yīng)鏈接for src in sgzk_src_list:src_url='https://www.zgshige.com'+srcsrc_data=requests.get(url=src_url,headers=headers).textex_src_data='<a title.*? href="(.*?)".*?>.*?</a>'new_src_list=re.findall(ex_src_data,src_data,re.M)#循環(huán) 匹配出對(duì)應(yīng)鏈接#BeautifulSoup,捕獲對(duì)應(yīng)條件下的中文for new_src in new_src_list:#爬取的網(wǎng)址有一些已經(jīng)失效#存儲(chǔ)爬取到的文字try:new_src_url='https://www.zgshige.com'+new_srcnew_src_data=requests.get(url=new_src_url,headers=headers)html=new_src_data.text.encode(new_src_data.encoding).decode()soup=BeautifulSoup(html,'lxml')title=soup.findAll('h3')[0].textcontent=soup.findAll('div',class_='m-lg font14 mwebfont')[0].text fp.write('《'+title+'》'+'\n'+content+'\n')print(title,'爬取成功!!!')print('爬取下一首詩(shī)')except:continue#使用jjieba庫(kù),統(tǒng)計(jì)詞匯頻率#存儲(chǔ)分析后的數(shù)據(jù),并備份with open('./詞匯頻數(shù).txt','w',encoding='utf-8') as p:with open('meirihaoshi.txt','r',encoding='utf-8') as f:TXT=f.read()words = jieba.lcut(TXT)counts = {}excludes = {",","。","!","?","","、","\n"," "}for word in words:if word in excludes:continueelse:counts[word] = counts.get(word,0) + 1items = list(counts.items())items.sort(key=lambda x:x[1],reverse=True)wb = Workbook()ws = wb.activews['A1'] = '詞匯'ws['B1'] = '出現(xiàn)頻數(shù)'for i in range(100):key,value = items[i]key=str(key)value=str(value)row=[]row.append(key)row.append(value)ws.append(row)p.write('“'+key+'”'+'的出現(xiàn)次數(shù)為'+value+'次\n')print('“'+key+'”'+'的出現(xiàn)次數(shù)為'+value+'次')wb.save('詞匯頻數(shù).xlsx')一些問(wèn)題的回答:?
本次代碼使用requests庫(kù)、re庫(kù)、BeautifulSoup庫(kù)來(lái)實(shí)現(xiàn)中國(guó)詩(shī)歌網(wǎng)每日好詩(shī)中詩(shī)歌名稱(chēng)與詩(shī)歌內(nèi)容。之后通過(guò)os庫(kù)、jieba庫(kù)來(lái)實(shí)現(xiàn)統(tǒng)計(jì)詞匯出現(xiàn)頻數(shù)并分別存儲(chǔ)到txt與excel中。
? 代碼初次循環(huán)通過(guò)字符串的形式來(lái)形成含代爬鏈接的列表,之后循環(huán)此列表獲取信息。在此信息中獲取下一個(gè)鏈接。如此往復(fù),爬取目錄中共10頁(yè)的內(nèi)容,每一頁(yè)對(duì)應(yīng)十多條現(xiàn)代詩(shī)的目錄,之后按照此目錄爬取現(xiàn)代詩(shī)的內(nèi)容。
爬取內(nèi)容的存儲(chǔ)使用了簡(jiǎn)答的excel制表和txt。
爬蟲(chóng)爬取具體使用了正則表達(dá)式中的“.*?”的使用。“.*?”為非貪婪模式,匹配盡可能少的字符。就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)。又比如模式src=‘.*?’,它將會(huì)匹配src=‘開(kāi)始,以’結(jié)束的盡可能短的字符串。且開(kāi)始和結(jié)束中間可以沒(méi)有字符,因?yàn)?表示零到多個(gè)。
? 之后,此爬蟲(chóng)用到BeautifulSoup中findall來(lái)匹配。其中findall總返回一個(gè)列表,如果沒(méi)有找到則返回空。代碼中title=soup.findAll('h3')[0].text就是找到<h3>中的第一個(gè)元素,之后提取其中的文本返回給title。
??? 詞匯頻率統(tǒng)計(jì)是通過(guò)jieba庫(kù)來(lái)完成,jieba庫(kù)中的函數(shù)把文章分割成各個(gè)詞匯,再通過(guò)元組形式統(tǒng)計(jì)各個(gè)詞匯出現(xiàn)的頻數(shù),之后返回給列表。
總結(jié)
以上是生活随笔為你收集整理的爬虫-爬取中国诗歌网中中国好诗栏目 - 统计词汇出现频数 - 副本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: fiddler界面工具栏介绍
- 下一篇: CC2540F256RHAR