基于python网易新闻scrapy爬虫数据分析与可视化大屏展示
由于原始代码较为复杂,我们将提供一个简化版本的核心函数,用于演示如何创建一个简单的网易新闻爬虫,分析数据并用Echarts进行可视化。
import scrapy
from scrapy.crawler import CrawlerProcess
from collections import Counter
from pyecharts.charts import Bar
from pyecharts import options as opts
class NeteaseNewsSpider(scrapy.Spider):
name = 'netease_news'
start_urls = ['http://news.163.com/']
def parse(self, response):
# 提取新闻标题和链接
for href in response.css('a.ndf_news_title'):
yield {
'title': href.css('a ::text').extract_first(),
'link': href.css('a ::attr(href)').extract_first(),
}
# 分析爬取的数据
def analyze_data(items):
titles = [item['title'] for item in items]
word_counts = Counter(' '.join(titles).split())
return word_counts.most_common(10)
# 使用Echarts生成词云图
def generate_word_cloud(word_counts):
data = [list(item) for item in word_counts]
word_cloud = Bar(init_opts=opts.InitOpts(width='1400px', height='700px'))
word_cloud.add('', data, schema=['name', 'value'])
word_cloud.set_global_opts(title_opts=opts.TitleOpts(title="词频统计"))
return word_cloud
def main():
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT)',
'FEED_FORMAT': 'json',
'FEED_URI': 'data.json'
})
process.crawl(NeteaseNewsSpider)
process.start()
with open('data.json', 'r', encoding='utf-8') as f:
items = json.load(f)
word_counts = analyze_data(items)
word_cloud = generate_word_cloud(word_counts)
word_cloud.render('word_cloud.html')
if __name__ == "__main__":
main()
这段代码首先定义了一个Scrapy爬虫NeteaseNewsSpider
,用于抓取网易新闻首页的新闻标题和链接。然后定义了analyze_data
函数用于统计爬取数据中的词频,并使用generate_word_cloud
函数生成词云图的HTML页面。最后在main
函数中,我们启动爬虫,分析数据,并生成可视化结果。
评论已关闭