爬取新闻数据并文本分析
时间: 2023-08-28 11:05:43 浏览: 152
以下是一个爬取新闻数据并进行文本分析的 Python 程序:
```python
import requests
from bs4 import BeautifulSoup
from collections import Counter
import jieba
import jieba.analyse
url = 'https://news.sina.com.cn'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取新闻标题和链接
news = soup.find_all('a', href=True)
news_list = []
for n in news:
if 'news.sina.com.cn' in n['href']:
title = n.text
link = n['href']
news_list.append((title, link))
# 提取新闻正文
contents = []
for news in news_list:
response = requests.get(news[1])
soup = BeautifulSoup(response.text, 'html.parser')
content = soup.find_all('div', class_='article')
if content:
content_text = content[0].text.strip().replace('\n', '')
contents.append(content_text)
# 合并所有正文并进行分词和关键词提取
all_content = '。'.join(contents)
words = jieba.lcut(all_content)
keywords = jieba.analyse.extract_tags(all_content, topK=20, withWeight=True)
# 输出分词和关键词
print('分词结果:')
print(Counter(words).most_common(20))
print('关键词提取结果:')
for keyword, weight in keywords:
print(keyword, weight)
```
这段代码的具体实现过程如下:
1. 首先,我们导入了 `requests`、`BeautifulSoup`、`Counter`、`jieba` 和 `jieba.analyse` 库,用于进行网页请求、解析网页 HTML、词频统计、分词和关键词提取。
2. 然后,我们定义了要爬取的新闻网站 URL,并使用 `requests` 库发送 GET 请求获取网页内容。
3. 接着,我们使用 `BeautifulSoup` 库将网页 HTML 解析成一个 BeautifulSoup 对象,方便我们后续的操作。
4. 我们使用 `find_all` 方法找到所有包含链接的 `a` 标签元素,这里使用了 `href=True` 来过滤掉没有链接的标签。
5. 对于每个链接,我们判断是否是属于新浪新闻网站的链接,如果是则获取链接对应的标题和链接地址,将它们存储在一个列表中。
6. 接着,我们遍历所有新闻链接,使用 `requests` 库发送 GET 请求获取新闻内容,并使用 `BeautifulSoup` 库将网页 HTML 解析成一个 BeautifulSoup 对象。
7. 我们使用 `find_all` 方法找到新闻正文所在的 `div` 标签,并将其文本内容提取出来,存储在一个列表中。
8. 接着,我们合并所有新闻正文,并使用 `jieba` 库进行分词和关键词提取。我们使用 `jieba.lcut` 方法对正文进行分词,并使用 `Counter` 类进行词频统计,获取出现频率最高的 20 个词汇作为分词结果。同时,我们使用 `jieba.analyse.extract_tags` 方法提取出现频率最高的 20 个关键词作为关键词提取结果。
9. 最后,我们将分词和关键词打印出来。
注意:在实际爬取数据时,需要注意网站的反爬措施,并遵守相关法律法规和道德规范。
阅读全文