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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工