python爬取某站新闻,并分析最近新闻关键词
在爬取某站时并做简单分析时,遇到如下问题和大家分享,避免犯错:
一丶网站的path为 /info/1013/13930.htm ,其中13930为不同新闻的 ID 值,但是这个数虽然为升序,但是没有任何规律的升序。
解决办法:
使用 range 顺序爬取,错误的网站在页面会报如图错误:
这时我们首先去判断返回页面是否包含 str 'Sorry, Page Not Found',如果包含则跳过,不包含则爬取页面关键信息

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


解决办法:
查看页面编码为:UTF-8

在用 if 判断页面是否存在 str 时,首先将页面内容进行UTF-8编码即可解决:
response.encoding = 'utf-8'
三、在爬取网站时,遇到了没有 text 的主页面,新闻全部为图片
解决办法:这时查看图片页面和新闻页面的不同
图片页面关键标签:

新闻页面关键标签:

发现div标签下的 ID 不同,这时我们就跳过 id = 'vsb_content' 即可,在跳过时,判断页面内容应当先判断 id = 'vsb_content_4' ,因为 vsb_content_4 包含了 vsb_content
四、在爬取新闻后,将新闻写入csv文件时出现BUG,文件内容有重复
解决办法:
在写入文件的列表写入后将列表清空,因为在循环执行跳过不存在页面时会有空隙,这时的data_list里面是有内容的

五、在写入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单独处理,与文本内容隔离开,也是我们期望的结果.
最终代码:
#!/user/bin/env python
# -*- coding:utf-8 -*-
# Author: Mr.riy import re
import requests
import csv
import time
import jieba
import jieba.analyse
from requests.exceptions import RequestException
from bs4 import BeautifulSoup class Downloader:
def __init__(self):
self.data_list = [] def download(self, url, num_retries=3):
'判断页面'
print('Downloading:', url)
global response
response = requests.get(url)
response.encoding='utf-8'
try:
if 'Sorry, Page Not Found' in response.text:
print(url, '页面不存在')
elif '该内容已经被撤销' in response.text:
print(url, '页面不存在')
elif response.status_code == 200:
print('下载成功,开始执行......')
# print(response.text)
# print(response.encoding)
page = response.content
self.find_all(page)
time.sleep(1)
else:
if num_retries > 0 and 500 <= response.status_code <= 600:
html = self.download(url, num_retries-1)
except RequestException as e:
print(e) def find_all(self, page):
'爬取内容'
soup_title = BeautifulSoup(page, 'lxml')
sp_title_items = soup_title.find('h2', attrs={'align': 'center'})
title = sp_title_items.text
print(title) sp_time_items = soup_title.find('div', attrs={'style': 'line-height:400%;color:#444444;font-size:14px'})
times = sp_time_items.text
# print(times)
time = re.findall(r'\d{4}年\d{2}月\d{2}日 \d{2}:\d{2}', times)
# print(time)
author = re.findall(r'作者:(.*)', times)
# print(author)
global response
if 'vsb_content_4' in response.text:
sp_words_items = soup_title.find('div', attrs={'id': 'vsb_content_4'})
elif 'vsb_content_501' in response.text:
sp_words_items = soup_title.find('div', attrs={'id': 'vsb_content_501'})
else:
sp_words_items = soup_title.find('div', attrs={'id': 'vsb_content'}) words = sp_words_items.text
# print(words)
row = []
row.append(time)
row.append(author)
row.append(words)
self.data_list.append(row) def write_csv(self, filename, all_list):
'写入csv文件'
with open(filename, 'w', encoding="utf-8-sig", newline='') as f:
writer = csv.writer(f)
fields = ('时间', '作者', '内容')
writer.writerow(fields)
for row in all_list:
writer.writerow(row) def fetch_data(self):
'设置爬取页面'
all_list = []
for page in range(13795, 14000, 1): #设置爬取的页面范围
url = f'http://www.xxxxxx.cn/info/1013/{page}.htm'
self.download(url)
all_list += self.data_list
self.data_list = [] self.write_csv('data.csv', all_list) class analyze:
def get_all_text(self, filename):
'取出所有评价的句子'
comment_list = []
with open(filename, encoding="utf-8-sig") as f:
rows = csv.reader(f)
for row in rows:
one_comment = row[-1]
comment_list.append(one_comment) return ''.join(comment_list[1:]) def cut_text(self, all_text):
'找到评价中重要关键词'
jieba.analyse.set_stop_words('stop_words.txt')
text_tags = jieba.analyse.extract_tags(all_text, topK=30)
return text_tags def main():
temp = Downloader()
temp.fetch_data()
b = analyze()
all_text = b.get_all_text('data.csv')
text_tags = b.cut_text(all_text)
print(text_tags) if __name__ == "__main__":
main()
运行截图:最近新闻出现最多的关键字为:防疫,疫情,工作

python爬取某站新闻,并分析最近新闻关键词的更多相关文章
- python爬取B站视频弹幕分析并制作词云
1.分析网页 视频地址: www.bilibili.com/video/BV19E… 本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀. 这次我选取的是自己 唯一的爆款 ...
- 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!
众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- Python 爬取淘宝商品数据挖掘分析实战
Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...
- 用python爬取B站在线用户人数
最近在自学Python爬虫,所以想练一下手,用python来爬取B站在线人数,应该可以拿来小小分析一下 设计思路 首先查看网页源代码,找到相应的html,然后利用各种工具(BeautifulSoup或 ...
- 毕设之Python爬取天气数据及可视化分析
写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...
- Python爬取B站视频信息
该文内容已失效,现已实现scrapy+scrapy-splash来爬取该网站视频及用户信息,由于B站的反爬封IP,以及网上的免费代理IP绝大部分失效,无法实现一个可靠的IP代理池,免费代理网站又是各种 ...
- python爬取b站排行榜
爬取b站排行榜并存到mysql中 目的 b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设.首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化. 网站的结构 目标网站:bil ...
- Python爬取b站任意up主所有视频弹幕
爬取b站弹幕并不困难.要得到up主所有视频弹幕,我们首先进入up主视频页面,即https://space.bilibili.com/id号/video这个页面.按F12打开开发者菜单,刷新一下,在ne ...
随机推荐
- Chrome 调试 react-native 通过Network面板查看网络请求
参考 https://github.com/facebook/react-native/issues/934 三楼 真机或模拟器下 Debug JS Remotely, 会打开chrome,地址为ip ...
- Proto3:风格
本文介绍.proto文件的编码风格.遵循下面的惯例,可以使你的protocol buffer消息定义和它们对应的类连贯且已读. 注意,protocol buffer风格随时间变化一直在进步,所以可能你 ...
- 码海拾遗:简述C++(一)
C++是Bjarne Stroustrup博士于1982年,在C语言的基础上引入并扩充了面向对象的概念后发明的一种新的程序语言.就与C语言的渊源而言,C++可以说是C语言的超集,它兼容C的一切(可能是 ...
- Hexo和github搭建个人博客 - 朱晨
GitHub账号 mac/pc 环境 12 node.jsgit 创建GitHub仓库 登陆GitHub,创建一个新的Respository Repository name叫做{username}.g ...
- iOS开发黑科技之runtime
iOS 开发之黑科技-runtime runtime其实就是oc底层的一套C语音的API 调用方法的本质就是发消息, 1.动态交换两个方法的实现(特别是交换系统自动的方法) 2.动态添加对象的成员变量 ...
- js中的基本类型和引用类型
基本数据类型:按值访问,可操作保存在变量中的实际的值.基本类型值指的是简单的数据段. 基本数据类型有这六种:undefined.null.string.number.boolean.symbol(es ...
- MHRD_Guide
@(Steam蒸汽动力)[MHRD|Game|How To] [CH]游戏解决方案 1.解决方案将作为完整的代码呈现,部分结决方案将有理论分析或图解. 2.根据记录板判断,解决方案远非理想. 3.慎重 ...
- wepack环境配置1之node的安装
.向往已久的webpack终于配好了.. 1.要安装webpack,首先需要安装nodejs nodejs下载地址:https://nodejs.org/en/ 下载完成后,一步步安装即可,我是安装到 ...
- DotNet Core 使用 StackExchange.Redis 简单封装和实现分布式锁
前言 公司的项目以前一直使用 CSRedis 这个类库来操作 Redis,最近增加了一些新功能,会存储一些比较大的数据,内测的时候发现其中有两台服务器会莫名的报错 Unexpected respons ...
- MySQL集群MGR架构for多主模式
本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决 ...