Python爬虫-澎湃新闻标题,内容及评论,分词及去停用词,存入Excel

	**

爬取要求

**
来自一次作业,要求根据所给事件搜索相关新闻,爬取新闻标题,内容及评论(5条)部分,存入excel,在对其进行分词及去停用词,存入新的excel

数据爬取中使用bs4,正则表达式
分词过程引用包jieba

选取澎湃新闻为目标,事件“海南一4岁男童被遗忘校车内离世
在这里插入图片描述
点开其中一个,容易在局部搜索中定位到标题和内容,在爬取过程中却发现,此url下不存在评论内容
当前url为:
在这里插入图片描述

通过全局搜索发现评论内容存放于
在这里插入图片描述
发现末尾数字id一致,抓包headers中没有相关参数,考虑截取数字,按固有形式拼接至‘contid=’之后,以此获取评论页url,定位评论
在这里插入图片描述
代码:

from bs4 import BeautifulSoup
import requests
import re
import xlwt
import jieba
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3742.400 QQBrowser/10.5.3866.400'
}
url=['https://www.thepaper.cn/newsDetail_forward_3590585',
'https://www.thepaper.cn/newsDetail_forward_3592499',
'https://www.thepaper.cn/newsDetail_forward_3610103',
'https://www.thepaper.cn/newsDetail_forward_3595326',
'https://www.thepaper.cn/newsDetail_forward_3639371']
# 创建停用词list
def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords

爬取部分

title_data=[]   #用于存放标题数据
wenzi_data=[]  #存放文字内容
com_data=[]    #存放评论数据
wenzi_out = []  #存放文字分词及去停用词后的结果
com_out=[]      #存放评论分词及去停用词后结果
stopwords = stopwordslist('stop_words')#读取默认路径下的停用词表

for num in range(0,len(url)):  #根据列表url长度,循环爬取,得到列表,追加至对应空列表
    page_text = requests.get(url[num],headers=headers).text #获取网页数据
    soup = BeautifulSoup(page_text,'lxml')  
    title = soup.find('h1',class_='news_title').text   #定位标题
    title_data.append(str(title))     #标题追加至列表中
    wenzi = soup.find('div',class_='news_txt').text #定位文字
    wenzi_data.append(str(wenzi))  #文字内容追加进列表
    ex='<a href="javascript:;".*? contId="(.*?)".*?</a></div>'  #通过正则获取url末尾数字id
    id_=re.findall(ex,page_text,re.S)
    url1='https://www.thepaper.cn/newDetail_commt.jsp?contid='+id_[0]
    page=requests.get(url=url1,headers=headers).text #将数字id与评论固有url形式结合,得到新url
    ex='<div class="ansright_cont">.*?<a.*?>(.*?)</a>.*?</div>'#定位评论内容
    com=re.findall(ex,page,re.S)
    com=com[0:5]    #获取前五条评论,删除评论间换行符
    for num in range(0,5):
        com[num]=com[num].strip()
    com=str(com)
    com_data.append(com) #追加至评论中
    print(title+2*'\n'+wenzi+2*'\n'+str(com)+4*'\n')
    
    #中文分词,去停用词部分
    wout=[]
    wenzi_cut = jieba.cut(wenzi.strip())#将文字内容分词
    for word in wenzi_cut:   #去停用词
        if word not in stopwords:
            if word != '\t':
                wout.append(word)
                wout+=''
    wout = ",".join(wout)
    wenzi_out.append(str(wout)) #结束后追加至列表
    
    cout=[]
    com_cut = jieba.cut(com.strip())#将评论内容分词
    for word in com_cut:
        if word not in stopwords:
            if word != '\t':
                cout.append(word)
                cout+=''
    cout = ",".join(cout)
    com_out.append(str(cout))#追加至列表

存入excel

#未处理内容
f=xlwt.Workbook() 
sheet=f.add_sheet('news-data')  #通过循环方法将爬取内容存入excel
for i in range(0,len(title_data)):
    sheet.write(i,0,title_data[i])
for i in range(0,len(wenzi_data)):
    sheet.write(i,1,wenzi_data[i])
for i in range(0,len(title_data)):
    sheet.write(i,2,com_data[i])
f.save('news.xls')

#去停用词后内容
f=xlwt.Workbook()
sheet=f.add_sheet('news-data')
for i in range(0,len(title_data)):
    sheet.write(i,1,title_data[i])
for i in range(0,len(wenzi_out)):
    sheet.write(i,2,wenzi_out[i])
for i in range(0,len(com_out)):
    sheet.write(i,3,com_out[i])
f.save('news.xls')

结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页