最近在研究怎么从新闻里找点投资方向,就盯上了新浪财经。想着能不能抓点数据,看看最近啥板块儿比较火,或者有啥新的政策风向。
一开始直接上网页,手动翻翻,眼睛都快瞎了。这不行,效率太低了!得想个办法自动化一下。
第一步,分析网页结构。打开新浪财经的页面,随便点几个新闻进去,看看URL的规律,还有文章的标题、内容这些东西都在哪个HTML标签里。用浏览器的开发者工具(F12)检查元素,很快就搞清楚了。
第二步,写Python爬虫。我用的requests库来请求网页,BeautifulSoup来解析HTML。先写个简单的,能把首页的新闻标题和链接都抓下来。
python
import requests
from bs4 import BeautifulSoup
url = "*.cn/"
response = *(url)
* = 'utf-8' # 解决乱码问题
soup = BeautifulSoup(*, '*')
news_items = *_all('a') # 找到所有标签,初步筛选
for item in news_items:
try:
title = *() # 获取文本内容并去除首尾空格
link = item['href'] # 获取链接
if title and link and '*.cn' in link and 'article' in link:
print(f"标题: {title}\n链接: {link}\n---")
except:
pass
第三步,改进爬虫。 发现上面这样抓太乱了,啥链接都有,得精准一点。就盯着新闻列表的区域,用CSS选择器定位到具体的`
- `标签,再提取里面的新闻标题和链接。还得加上异常处理,万一网页结构变了,程序也不会崩溃。
- 分词: 我用了jieba分词库,把文章内容分成一个个词语。
- 统计词频: 用collections库的Counter类,统计每个词语出现的次数。
- 可视化: 可以用matplotlib或者seaborn库,把词频统计结果可视化出来,更直观地看到最近的热点。
- IP被封: 爬多了,IP就被封了。解决方法:用代理IP。
- User-Agent限制: 有些网页会检查User-Agent,看看是不是浏览器。解决方法:设置User-Agent。
- 验证码: 有些网页会弹出验证码。解决方法:用OCR识别验证码,或者用selenium模拟人工操作。
第四步,抓取文章内容。拿到新闻链接后,再写个函数,根据链接去抓取文章的正文内容。这个更简单,也是用BeautifulSoup解析HTML,找到正文的`
第五步,存储数据。 把抓到的新闻标题、链接、内容,保存到CSV文件或者数据库里。我用的pandas库,直接把数据转换成DataFrame,然后保存到CSV文件。
python
import pandas as pd
# 假设已经抓取到数据,存储在列表里
data = [] # 存储所有新闻数据的列表,每个元素是一个字典
# ... (抓取数据的代码) ...
# 示例: *({'标题': title, '链接': link, '内容': content})
df = *(data)
*_csv('sina_finance_*', encoding='utf_8_sig', index=False)
第六步,数据分析。 抓到数据后,就可以用Python做一些简单的数据分析了。比如统计一下关键词出现的频率,看看最近哪个板块儿的新闻比较多。
第七步,反爬虫应对。 新浪财经的反爬虫机制还是挺厉害的。我遇到了以下问题:
折腾了一天,总算是把新浪财经的新闻数据抓下来了。虽然中间遇到了一些问题,但是都解决了。现在可以定期跑一下这个爬虫,抓取最新的新闻数据,然后分析一下,看看能不能找到一些投资机会。数据分析只是辅助,最终的投资决策还是要靠自己。
以后有时间再研究一下,看看能不能用机器学习的方法,自动分析新闻的情感,预测一下股票的走势。
还没有评论,来说两句吧...