python爬取微博文章
时间: 2025-05-31 13:32:08 浏览: 27
### 使用Python实现微博文章的网络爬虫
要通过Python实现微博文章的网络爬虫,通常可以选择多种方法和技术栈。以下是基于Scrapy框架以及相关技术的具体实现方式。
#### 1. Scrapy框架简介
Scrapy是一个强大的开源Web爬虫框架,用于提取网站上的结构化数据[^2]。它提供了许多内置功能来简化爬取过程,例如请求调度、HTML解析和数据存储等。
#### 2. 准备工作
在开始编写爬虫之前,需要完成以下准备工作:
- **安装依赖库**
需要安装`scrapy`和其他可能用到的第三方库,例如`pandas`(用于数据分析)、`requests`(发送HTTP请求)和`selenium`(模拟浏览器行为)。可以通过pip命令安装这些库:
```bash
pip install scrapy pandas requests selenium
```
- **获取Cookie**
微博有严格的反爬机制,因此直接访问API可能会遇到限制。为了绕过这一问题,建议使用Chrome或其他现代浏览器登录微博账号并抓取Cookies。将这些Cookies保存下来供爬虫程序使用。
#### 3. 编写Scrapy项目
创建一个新的Scrapy项目,并定义Spider类来指定目标URL模式、解析逻辑等内容:
```python
import scrapy
from scrapy import Request
class WeiboSpider(scrapy.Spider):
name = 'weibo_spider'
allowed_domains = ['m.weibo.cn']
def start_requests(self):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Cookie': '<your_cookie_here>' # 替换为实际的Cookie字符串
}
keywords = ["热点", "新闻"] # 自定义关键词列表
base_url = "https://m.weibo.cn/api/container/getIndex?type=wb&queryVal={}&containerid=100103type%3D2%26q%3D{}"
for keyword in keywords:
url = base_url.format(keyword, keyword)
yield Request(url=url, headers=headers, callback=self.parse)
def parse(self, response):
data = response.json()
statuses = data.get('data', {}).get('cards', [])
for status in statuses:
mblog = status.get('mblog')
if not mblog:
continue
item = {}
item['text'] = mblog.get('text') # 提取微博正文
item['created_at'] = mblog.get('created_at') # 创建时间
item['reposts_count'] = mblog.get('reposts_count') # 转发数
item['comments_count'] = mblog.get('comments_count') # 评论数
item['attitudes_count'] = mblog.get('attitudes_count') # 点赞数
yield item
```
上述代码片段展示了如何构建一个基本的Scrapy Spider以爬取包含特定关键词的微博内容。
#### 4. 数据清洗与预处理
由于原始数据可能存在噪声或冗余信息,在进一步分析前需对其进行清理。常见的操作包括但不限于:
- 剔除广告性质的内容;
- 移除非中文字符;
- 删除重复项;
可以借助Pandas库高效地完成以上任务:
```python
import pandas as pd
df = pd.read_csv("output.csv") # 加载导出文件
df_cleaned = df.drop_duplicates(subset=['text']) # 去重
df_filtered = df_cleaned[df_cleaned["text"].str.contains(r"[^\u4e00-\u9fa5]", na=False)] # 过滤非汉字文本
print(df_filtered.head())
```
#### 5. 存储结果
最后一步是决定如何持久化收集到的信息。一般可选方案如下:
- CSV 文件:适合轻量级场景下的快速存档。
- MongoDB 或 MySQL 数据库:当面对海量数据时更为适用。
---
阅读全文
相关推荐






