python3爬取微博评论并存为xlsx
**
由于微博电脑端的网页版页面比较复杂,我们可以访问手机端的微博网站,网址为:https://m.weibo.cn/
一、访问微博网站,找到热门推荐链接
我们打开微博网站后看见热门页,按F12查看网页结构后只能看见如下图短短的几个文章。

然后我们将滚动条向下滚动,发现新的文章会在底部加载,原来微博的热门文章加载方式是Ajax加载的,那我们就不能在网页源码中找标签了,我们点击如下图所示的network标签,找找请求地址。

我们查看请求返回值后发现下图的请求返回的是一个json格式的数据。

其实这就是热门文章存放的地址。在headers中找到gRequest请求的链接,是:https://m.weibo.cn/api/container/getIndex?containerid=102803&openApp=0
二、requests请求获取json数据
我们利用requests获取目标地址返回的json数据,并对其进行打印:

response = requests.get(self.con_url, headers=self.headers)
data = json.loads(response.text)
pprint.pprint(data)
1
2
3
使用pprint来输出,可以按json格式输出获得的结果,这样方便查看,如下图:

三、提取文章信息
文章的所有信息都存放在我们获取的json数据中,接下来我们只要根据键去取对应的值即可:

data1 = data['data']['cards']
# pprint.pprint(data1)
for card_group in data1:
try:
for mblog in card_group['card_group']:
pprint.pprint(mblog['mblog']['id'])
link_list.append(mblog['mblog']['id'])
# pprint.pprint(card_group['card_group'])
except:
pprint.pprint(card_group['mblog']['id'])
link_list.append(card_group['mblog']['id'])
1
2
3
4
5
6
7
8
9
10
11
我们获取了文章的id可以根据文章的id访问文章的详细信息。
四、访问文章详情,获取用户评论及信息
对文章的地址进行拼接,获取评论区用户信息及评论内容。

datas = {} # 存放用户ID以及评论内容
ID = [] # 存放用户ID
comment = [] # 存放用户评论
name = [] # 存放用户名

for link in links:
url = self.urlhead + link + self.urlend + link + '&max_id_type=0'
print(url)
response = requests.get(url, headers=self.headers)
try:
details = json.loads(response.text)['data']['data']
except:
print('ok--------------')
# print(details)
for content in details:
user_id = content['user']['id']
text = content['text']
user_name = content['user']['screen_name']
# print(user_id)
# print(text)
ID.append(user_id)
comment.append(text)
name.append(user_name)

datas['用户ID'] = ID
datas['昵称'] = name
datas['评论'] = comment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
将获取的用户信息存为字典。
五、将用户信息存入Excel表格

def save_datas(self, datas):
datas = DataFrame(datas) # 将字典转换为DataFrame对象
datas.to_excel('pinglun/datas.xlsx', encoding='utf-8')
print('数据写入成功')
1
2
3
4
源码如下:

import requests
import json
import pprint
from pandas import DataFrame

class WeiboSpider:
def __init__(self):
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"
}
self.con_url = 'https://m.weibo.cn/api/container/getIndex?containerid=102803&openApp=0'
self.urlhead = 'https://m.weibo.cn/comments/hotflow?id='
self.urlend = '&mid='

def get_link(self):
link_list = []
response = requests.get(self.con_url, headers=self.headers)
data = json.loads(response.text)
data1 = data['data']['cards']
# pprint.pprint(data1)
for card_group in data1:
try:
for mblog in card_group['card_group']:
pprint.pprint(mblog['mblog']['id'])
link_list.append(mblog['mblog']['id'])
# pprint.pprint(card_group['card_group'])
except:
pprint.pprint(card_group['mblog']['id'])
link_list.append(card_group['mblog']['id'])
self.load_page(link_list)

def load_page(self, links):
datas = {} # 存放用户ID以及评论内容
ID = [] # 存放用户ID
comment = [] # 存放用户评论
name = [] # 存放用户名

for link in links:
url = self.urlhead + link + self.urlend + link + '&max_id_type=0'
print(url)
response = requests.get(url, headers=self.headers)
try:
details = json.loads(response.text)['data']['data']
except:
print('ok--------------')
# print(details)
for content in details:
user_id = content['user']['id']
text = content['text']
user_name = content['user']['screen_name']
# print(user_id)
# print(text)
ID.append(user_id)
comment.append(text)
name.append(user_name)

datas['用户ID'] = ID
datas['昵称'] = name
datas['评论'] = comment
self.save_datas(datas)
def save_datas(self, datas):
datas = DataFrame(datas) # 将字典转换为DataFrame对象
datas.to_excel('pinglun/datas.xlsx', encoding='utf-8')
print('数据写入成功')

if __name__ == '__main__':
crawl = WeiboSpider(http://www.my516.com)
crawl.get_link()
---------------------

python3爬取微博评论并存为xlsx的更多相关文章

  1. Python3爬取人人网(校内网)个人照片及朋友照片,并一键下载到本地~~~附源代码

    题记: 11月14日早晨8点,人人网发布公告,宣布人人公司将人人网社交平台业务相关资产以2000万美元的现金加4000万美元的股票对价出售予北京多牛传媒,自此,人人公司将专注于境内的二手车业务和在美国 ...

  2. C#爬取微博文字、图片、视频(不使用Cookie)

    前两天在网上偶然看到一个大佬OmegaXYZ写的文章,Python爬取微博文字与图片(不使用Cookie) 于是就心血来潮,顺手撸一个C#版本的. 其实原理也很简单,现在网上大多数版本都需要Cooki ...

  3. Python爬虫抓取微博评论

    第一步:引入库 import time import base64 import rsa import binascii import requests import re from PIL impo ...

  4. python3爬取网页

    爬虫 python3爬取网页资源方式(1.最简单: import'http://www.baidu.com/'print2.通过request import'http://www.baidu.com' ...

  5. python3爬取女神图片,破解盗链问题

    title: python3爬取女神图片,破解盗链问题 date: 2018-04-22 08:26:00 tags: [python3,美女,图片抓取,爬虫, 盗链] comments: true ...

  6. Python3 爬取微信好友基本信息,并进行数据清洗

    Python3 爬取微信好友基本信息,并进行数据清洗 1,登录获取好友基础信息: 好友的获取方法为get_friends,将会返回完整的好友列表. 其中每个好友为一个字典 列表的第一项为本人的账号信息 ...

  7. 【网络爬虫】【java】微博爬虫(一):小试牛刀——网易微博爬虫(自定义关键字爬取微博数据)(附软件源码)

    一.写在前面 (本专栏分为"java版微博爬虫"和"python版网络爬虫"两个项目,系列里所有文章将基于这两个项目讲解,项目完整源码已经整理到我的Github ...

  8. python3爬取全民K歌

    Python3爬取全民k歌 环境 python3.5 + requests 1.通过歌曲主页链接爬取 首先打开歌曲主页,打开开发者工具(F12). 选择Network,点击播放,会发现有一个请求返回的 ...

  9. Python3爬取猫眼电影信息

    Python3爬取猫眼电影信息 import json import requests from requests.exceptions import RequestException import ...

随机推荐

  1. HDU3488 Tour —— 二分图最大权匹配 KM算法

    题目链接:https://vjudge.net/problem/HDU-3488 Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit ...

  2. bleve搜索引擎源码分析之索引——mapping真复杂啊

    接下来看看下面index部分的源码实现: data := struct { Name string Des string }{ Name: "hello world this is bone ...

  3. lucene DocValues——本质是为通过docID查找某field的值 看图

    Why DocValues? The standard way that Solr builds the index is with an inverted index. This style bui ...

  4. BZOJ3282:Tree(TCL基础题)

    给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和. 保证x到y是联通的. ...

  5. openpyxl操作excel

    [转] openpyxl库可以读写xlsx格式的文件,对于xls旧格式的文件只能用xlrd读,xlwt写来完成了. python有很多模块都是用来操作excel的,比如xlrd,xlwt,pyExce ...

  6. arcgis for silverlight 鼠标点击地图获取当前经纬度

    silverlight代码: 地图的name值是myMap.后台在页面初始化的时候,添加地图的点击事件 myMap.MouseClick+=new EventHandler<Map.MouseE ...

  7. asp.net mvc4 不支持EF6

    参考文章:http://www.cnblogs.com/zeusro/p/3403771.html http://q.cnblogs.com/q/40926/ 解决方法是 1.把EF6删除改用EF5. ...

  8. RedHat/CentOS安装五笔输入法(转载)

    转自:http://www.zhukun.net/archives/5939 使用centos 仓库里的 ibus,我的 CenOS6.3 自带了 ibus 包.打开 System – prefere ...

  9. 立体渲染 Volumetric Rendering

    基础概念 在3D游戏引擎中,球体.立方体以及所有其它复杂的集合体都是由三角面片组成的.引擎只会渲染物体的表面,比如球体,半透明物体等.整个世界由各种空壳构成. 立体渲染(Volumetric Rend ...

  10. 身份认证系统(四)OAuth2运行流程

    上一节介绍过什么是OAuth2,这节准备用生动的事例来告诉大家OAuth2运行的流程. 我们来想这样一个场景:假设我们有一个叫做万方网盘的服务是用来帮助用户存储论文文档的,我们向外提供了符合OAuth ...