爬虫-爬取中国诗歌网中中国好诗栏目 - 统计词汇出现频数 - 副本
功能:
我們的代碼爬蟲的功能是爬取中國詩歌網中中國好詩欄目中的所以詩詞并統計詞匯出現頻數,來分析當下詩歌中的高頻詞匯背后的意義。
通過使用requests庫、re庫、BeautifulSoup庫來實現中國詩歌網每日好詩中詩歌名稱與詩歌內容。之后通過os庫、jieba庫來實現統計詞匯出現頻數并分別存儲到txt與excel中。
代碼運行之后,會出現三個文件,分別是meirihaoshi.txt、詞匯頻率.txt、詞匯頻率.xlsx。其中meirihaoshi.txt存儲詩歌網中每日好詩欄目中所有的詩歌內容。詞匯頻率.txt與詞匯頻率.xlsx存儲著jieba庫處理過后的詞匯頻率數據,其中txt作為備份。
#爬蟲-爬取中國詩歌網中中國好詩欄目 #并用jieba庫統計現代詩中詞匯的出現頻率import requests import re from bs4 import BeautifulSoup import os import jieba from openpyxl import Workbookif __name__=="__main__":#創建并打開meirihaoshi.txt文件fp=open('./meirihaoshi.txt','w',encoding='utf-8')#獲取多頁的網址,并存入列表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))#循環獲取下一個網址#正則 匹配出對應鏈接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)#循環 匹配出對應鏈接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)#循環 匹配出對應鏈接#BeautifulSoup,捕獲對應條件下的中文for new_src in new_src_list:#爬取的網址有一些已經失效#存儲爬取到的文字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('爬取下一首詩')except:continue#使用jjieba庫,統計詞匯頻率#存儲分析后的數據,并備份with open('./詞匯頻數.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'] = '出現頻數'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+'”'+'的出現次數為'+value+'次\n')print('“'+key+'”'+'的出現次數為'+value+'次')wb.save('詞匯頻數.xlsx')一些問題的回答:?
本次代碼使用requests庫、re庫、BeautifulSoup庫來實現中國詩歌網每日好詩中詩歌名稱與詩歌內容。之后通過os庫、jieba庫來實現統計詞匯出現頻數并分別存儲到txt與excel中。
? 代碼初次循環通過字符串的形式來形成含代爬鏈接的列表,之后循環此列表獲取信息。在此信息中獲取下一個鏈接。如此往復,爬取目錄中共10頁的內容,每一頁對應十多條現代詩的目錄,之后按照此目錄爬取現代詩的內容。
爬取內容的存儲使用了簡答的excel制表和txt。
爬蟲爬取具體使用了正則表達式中的“.*?”的使用。“.*?”為非貪婪模式,匹配盡可能少的字符。就意味著匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。又比如模式src=‘.*?’,它將會匹配src=‘開始,以’結束的盡可能短的字符串。且開始和結束中間可以沒有字符,因為*表示零到多個。
? 之后,此爬蟲用到BeautifulSoup中findall來匹配。其中findall總返回一個列表,如果沒有找到則返回空。代碼中title=soup.findAll('h3')[0].text就是找到<h3>中的第一個元素,之后提取其中的文本返回給title。
??? 詞匯頻率統計是通過jieba庫來完成,jieba庫中的函數把文章分割成各個詞匯,再通過元組形式統計各個詞匯出現的頻數,之后返回給列表。
總結
以上是生活随笔為你收集整理的爬虫-爬取中国诗歌网中中国好诗栏目 - 统计词汇出现频数 - 副本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fiddler界面工具栏介绍
- 下一篇: 障碍期权定价 python_Python