利用Python爬取网站中新闻标题、某自然段内容和发布时间。爬取的自然段内容以词云可视化形式显示。并将新闻标题、自然段内容和发布时间存储到MySQL数据表中。(词云图片及数据库名为学号)
时间: 2024-10-20 08:14:59 浏览: 54
新浪新闻标题内容挖掘
在Python中利用网络爬虫技术来抓取网站新闻信息并进行处理,可以分为以下几个步骤:
1. **获取网页内容**:
使用`requests`库发送HTTP请求获取网页HTML内容,例如 `response = requests.get('目标网址')`。
2. **解析HTML**:
通过BeautifulSoup或lxml等库解析HTML,找到包含新闻标题、正文和发布时间的部分。这通常涉及到CSS选择器或XPath表达式来定位元素。
3. **提取信息**:
对每个找到的元素,提取其文本内容。标题可能在`<h1>`或`<title>`标签下,正文在`<p>`或其他标记内,日期可能在`<time>`或`<span class="timestamp">`中。
4. **词云生成**:
使用`jieba`进行中文分词,然后结合`wordcloud`库创建词云图。将抓取的自然段内容拆分成词语列表,去除停用词,计算词频,并绘制词云。
5. **数据存储**:
安装`mysql-connector-python`库,连接到MySQL数据库。使用`cursor.execute()`插入新闻标题、内容和时间到相应的表中。表结构应包括学号字段,如果不存在则需要先创建。
6. **图片保存**:
将词云图保存到本地文件,如`img/学号_词云.png`。
```python
import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import jieba
import mysql.connector
# ...省略实际的URL和数据库连接配置...
def fetch_news(url):
# 获取网页内容
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 提取新闻信息
title = soup.find('h1').text if soup.h1 else ''
content = soup.find('div', class_='content').text
pub_date = soup.find('time')['datetime']
return title, content, pub_date
# 创建词云
def create_word_cloud(content):
words = jieba.lcut_for_search(content) # 分词
word_freq = {word: freq for word, freq in Counter(words).items()}
wordcloud = WordCloud(width=800, height=400, background_color='white', min_font_size=10).generate_from_frequencies(word_freq)
wordcloud.to_file(f'image/{student_id}_词云.png')
# 数据存储
def store_to_db(title, content, pub_date):
# 连接数据库
conn = mysql.connector.connect...
cursor = conn.cursor()
sql = "INSERT INTO news (student_id, title, content, pub_date) VALUES (%s, %s, %s, %s)"
values = (student_id, title, content, pub_date)
cursor.execute(sql, values)
conn.commit()
cursor.close()
conn.close()
url = '目标网址'
title, content, pub_date = fetch_news(url)
create_word_cloud(content)
store_to_db(title, content, pub_date)
阅读全文