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

相关文章

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句