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实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp