python爬取网页新闻内容_python爬取某站新闻,并分析最近新闻关键词

2024-02-15 20:30

本文主要是介绍python爬取网页新闻内容_python爬取某站新闻,并分析最近新闻关键词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在爬取某站时并做简单分析时,遇到如下问题和大家分享,避免犯错:

一丶网站的path为 /info/1013/13930.htm ,其中13930为不同新闻的 ID 值,但是这个数虽然为升序,但是没有任何规律的升序。

解决办法:

使用 range 顺序爬取,错误的网站在页面会报如图错误:

这时我们首先去判断返回页面是否包含 str 'Sorry, Page Not Found',如果包含则跳过,不包含则爬取页面关键信息

1736986-20200227130311298-939817471.png

二、在爬取过程中发现有其它页面,该内容已经被撤销,这时我正常去判断页面,并跳过,发现无法跳过

1736986-20200227130745752-1249884744.png

1736986-20200227131001058-19616511.png

解决办法:

查看页面编码为:UTF-8

1736986-20200227131102193-1598045933.png

在用 if 判断页面是否存在 str 时,首先将页面内容进行UTF-8编码即可解决:

response.encoding = 'utf-8'

三、在爬取网站时,遇到了没有 text 的主页面,新闻全部为图片

解决办法:这时查看图片页面和新闻页面的不同

图片页面关键标签:

1736986-20200227131648681-511037001.png

新闻页面关键标签:

1736986-20200227131828268-1808113689.png

发现div标签下的 ID 不同,这时我们就跳过 id = 'vsb_content' 即可,在跳过时,判断页面内容应当先判断id = 'vsb_content_4' ,因为 vsb_content_4 包含了 vsb_content

四、在爬取新闻后,将新闻写入csv文件时出现BUG,文件内容有重复

解决办法:

在写入文件的列表写入后将列表清空,因为在循环执行跳过不存在页面时会有空隙,这时的data_list里面是有内容的

1736986-20200227132445540-1412071141.png

五、在写入csv文件后,新闻文本乱码

解决办法:使用utf-8-sig编码

为什么不用utf-8?

原因如下:

1、”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,

因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误.

2、“uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8”,

因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.

最终代码:

ContractedBlock.gif

ExpandedBlockStart.gif

1 #!/user/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author: Mr.riy

4

5

6 importre7 importrequests8 importcsv9 importtime10 importjieba11 importjieba.analyse12 from requests.exceptions importRequestException13 from bs4 importBeautifulSoup14

15

16 classDownloader:17 def __init__(self):18 self.data_list =[]19

20 def download(self, url, num_retries=3):21 '判断页面'

22 print('Downloading:', url)23 globalresponse24 response =requests.get(url)25 response.encoding='utf-8'

26 try:27 if 'Sorry, Page Not Found' inresponse.text:28 print(url, '页面不存在')29 elif '该内容已经被撤销' inresponse.text:30 print(url, '页面不存在')31 elif response.status_code == 200:32 print('下载成功,开始执行......')33 #print(response.text)

34 #print(response.encoding)

35 page =response.content36 self.find_all(page)37 time.sleep(1)38 else:39 if num_retries > 0 and 500 <= response.status_code <= 600:40 html = self.download(url, num_retries-1)41 exceptRequestException as e:42 print(e)43

44 deffind_all(self, page):45 '爬取内容'

46 soup_title = BeautifulSoup(page, 'lxml')47 sp_title_items = soup_title.find('h2', attrs={'align': 'center'})48 title =sp_title_items.text49 print(title)50

51 sp_time_items = soup_title.find('div', attrs={'style': 'line-height:400%;color:#444444;font-size:14px'})52 times =sp_time_items.text53 #print(times)

54 time = re.findall(r'\d{4}年\d{2}月\d{2}日 \d{2}:\d{2}', times)55 #print(time)

56 author = re.findall(r'作者:(.*)', times)57 #print(author)

58 globalresponse59 if 'vsb_content_4' inresponse.text:60 sp_words_items = soup_title.find('div', attrs={'id': 'vsb_content_4'})61 elif 'vsb_content_501' inresponse.text:62 sp_words_items = soup_title.find('div', attrs={'id': 'vsb_content_501'})63 else:64 sp_words_items = soup_title.find('div', attrs={'id': 'vsb_content'})65

66 words =sp_words_items.text67 #print(words)

68 row =[]69 row.append(time)70 row.append(author)71 row.append(words)72 self.data_list.append(row)73

74 defwrite_csv(self, filename, all_list):75 '写入csv文件'

76 with open(filename, 'w', encoding="utf-8-sig", newline='') as f:77 writer =csv.writer(f)78 fields = ('时间', '作者', '内容')79 writer.writerow(fields)80 for row inall_list:81 writer.writerow(row)82

83 deffetch_data(self):84 '设置爬取页面'

85 all_list =[]86 for page in range(13795, 14000, 1): #设置爬取的页面范围

87 url = f'http://www.xxxxxx.cn/info/1013/{page}.htm'

88 self.download(url)89 all_list +=self.data_list90 self.data_list =[]91

92 self.write_csv('data.csv', all_list)93

94

95 classanalyze:96 defget_all_text(self, filename):97 '取出所有评价的句子'

98 comment_list =[]99 with open(filename, encoding="utf-8-sig") as f:100 rows =csv.reader(f)101 for row inrows:102 one_comment = row[-1]103 comment_list.append(one_comment)104

105 return ''.join(comment_list[1:])106

107 defcut_text(self, all_text):108 '找到评价中重要关键词'

109 jieba.analyse.set_stop_words('stop_words.txt')110 text_tags = jieba.analyse.extract_tags(all_text, topK=30)111 returntext_tags112

113

114 defmain():115 temp =Downloader()116 temp.fetch_data()117 b =analyze()118 all_text = b.get_all_text('data.csv')119 text_tags =b.cut_text(all_text)120 print(text_tags)121

122

123 if __name__ == "__main__":124 main()

View Code

运行截图:最近新闻出现最多的关键字为:防疫,疫情,工作

1736986-20200227132849933-1112653463.png

这篇关于python爬取网页新闻内容_python爬取某站新闻,并分析最近新闻关键词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712462

相关文章

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja