python+Xpath爬取英文新闻并生成文档词频矩阵

本文档介绍了使用Python进行网络爬虫,结合XPath从新华网获取Business - Finance类新闻,然后对新闻内容进行预处理,包括去除数字、非英文字符、停用词等,再利用nltk进行词形还原。接着,生成文本的词频矩阵,保留词频大于5的词汇,并展示前20个高频词。最后,利用wordcloud绘制词云图,展示了从数据抓取到词频分析的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

详情见我的github:https://github.com/Snowing-ST/Statistical-Case-Studies/tree/master/Lab3%20English%20Text%20Processing

1.爬取新华网Business - Finance类别的新闻url

由于新华网是动态网站,不能直接爬取,所以通过检查找到实际保存新闻摘要列表的网址,里面的信息均用json格式保存。

import requests
import json
from selenium import webdriver
from lxml import etree
import time
import os
import pandas as pd
import numpy as np
import re
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer #词形变化
from sklearn.feature_extraction.text import CountVectorizer

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Core/1.47.933.400 QQBrowser/9.4.8699.400',
}
url = 'http://qc.wa.news.cn/nodeart/list?nid=11143416&pgnum=1&cnt=50&tp=1&orderby=1?callback=jQuery111307913713753952403_1522322711817&_=1522322711818'

data = requests.get(url, headers=headers)
data.encoding
html=data.content
dic_html = html[42:(len(html)-2)] #提取json文本
url_num = len(json.loads(dic_html)["data"]["list"]);url_num  #50条url
def geturls(i):
 
### 如何使用Python进行网络爬虫生成词云 #### 使用Scrapy框架构建爬虫程序 为了高效地抓取网页数据,可以采用`scrapy`这一强大的爬虫框架。通过定义Spider类来指定要爬取的目标网站及其页面解析逻辑,在命令行工具中输入`scrapy crawl example_spider`即可启动名为example_spider的爬虫实例执行任务[^1]。 ```bash $ scrapy startproject douban_reviews $ cd douban_reviews/ $ scrapy genspider movie_review spider_name ``` 创建好项目结构之后,可以在spiders目录下的对应py文件里编写具体的爬取规则: ```python import scrapy from ..items import DoubanReviewsItem class MovieReviewSpider(scrapy.Spider): name = "movie_review" allowed_domains = ["douban.com"] start_urls = ['https://movie.douban.com/subject/{id}/reviews'.format(id='电影ID')] def parse(self, response): item = DoubanReviewsItem() reviews = response.css('div.review-item') for review in reviews: content = ''.join(review.xpath('.//span[@property="v:summary"]/text()').extract()).strip() yield { 'content': content, } ``` 上述代码片段展示了如何利用CSS选择器和XPath表达式提取目标HTML标签内的文本信息,将其封装成字典对象返回给后续处理环节。 #### 数据清洗与预处理 当收集到足够的评论样本后,需对其进行必要的清理工作,比如去除特殊字符、停用词过滤等操作,以便于下一步分析工作的顺利开展。这里推荐借助第三方库如jieba分词来进行中文语料分割。 ```python import jieba.analyse as analyse def clean_text(text): words = list(jieba.cut_for_search(text)) filtered_words = [word.strip().lower() for word in words if not any(char.isdigit() or char.isalpha() for char in word)] return " ".join(filtered_words) cleaned_texts = [] for raw_comment in comments: cleaned_texts.append(clean_text(raw_comment['content'])) ``` 这段脚本实现了基于搜索引擎模式对每条评论做精确切分,排除掉纯数字或字母组成的词汇项;最后将处理后的结果保存至新的列表变量之中备用。 #### 构建词频统计模型绘制可视化图表 完成前期准备工作以后就可以着手建立TF-IDF权重矩阵了,进而挑选出最具代表性的关键词作为展示素材。调用matplotlib.pyplot模块中的函数能够轻松实现图形化呈现效果。 ```python from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt all_tokens = sum([comment.split() for comment in cleaned_texts], []) counter = Counter(all_tokens) top_keywords = dict(counter.most_common(50)) wc = WordCloud(font_path='/path/to/simhei.ttf', background_color='white', max_font_size=80).generate_from_frequencies(top_keywords) plt.imshow(wc.recolor(colormap='Pastel1_r'), interpolation="bilinear") plt.axis("off") plt.show() ``` 以上就是整个流程的大致介绍,从搭建环境到最后产出成果均有所涉及。值得注意的是实际应用过程中还需考虑更多细节方面的要求,例如异常捕获机制的设计、发请求次数控制策略的选择等问题都需要开发者自行斟酌解决办法[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值