需求分析

微博主页

抓取的内容包括:微博发布的时间,正文(仅提取文字),转发数,评论数,点赞数

抓取的内容

数据是怎么加载的

新浪微博的数据是用ajax异步下拉加载的,在chrome的调试模式下可捕捉到相应的请求:

xhr请求

分析这些url的规律:

https://m.weibo.cn/api/container/getIndex?type=uid&value=1665372775&containerid=1076031665372775&page=2

https://m.weibo.cn/api/container/getIndex?type=uid&value=1665372775&containerid=1076031665372775&page=3

发现除了page参数的不同,其他都是一致的

数据的结构分析

json结构分析

返回的json数据结构中,我们需要的是以下字段:

data

cards

mblog

created_at # 发布时间

text # 正文

reposts_count # 转发数

comments_count # 评论数

attitudes_count # 点赞数

代码实现

首先确保安装了requests和pyquery库

pip install pyquery

pip install requests

具体代码解析:

import requests

from urllib.parse import urlencode

from pyquery import PyQuery as pq

host = 'm.weibo.cn'

base_url = 'https://%s/api/container/getIndex?' % host

user_agent = 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/0.7.0 MicroMessenger/6.3.9 Language/zh_CN webview/0'

headers = {

'Host': host,

'Referer': 'https://m.weibo.cn/u/1665372775',

'User-Agent': user_agent

}

# 按页数抓取数据

def get_single_page(page):

params = {

'type': 'uid',

'value': 1665372775,

'containerid': 1076031665372775,

'page': page

}

url = base_url + urlencode(params)

try:

response = requests.get(url, headers=headers)

if response.status_code == 200:

return response.json()

except requests.ConnectionError as e:

print('抓取错误', e.args)

# 解析页面返回的json数据

def parse_page(json):

items = json.get('data').get('cards')

for item in items:

item = item.get('mblog')

if item:

data = {

'id': item.get('id'),

'text': pq(item.get("text")).text(), # 仅提取内容中的文本

'attitudes': item.get('attitudes_count'),

'comments': item.get('comments_count'),

'reposts': item.get('reposts_count')

}

yield data

if __name__ == '__main__':

for page in range(1, 10): # 抓取前十页的数据

json = get_single_page(page)

results = parse_page(json)

for result in results:

print(result)

运行结果

{'id': '4241354777389653', 'text': '【新书预售】\n\n我经常觉得生活就如同唐吉坷德,持一只长矛,去挑战一个个风车。你越是勇敢,你就越是可笑。我们必须正确认识自己,认识自己手里的兵器,也要认清我们要去挑战的是何种存在。\n\n这些风车有爱情,有亲情,有友谊,有远行,有阅读,亦有人性...我把自己跌跌撞撞挑战过的十八个风车,写成了 ...全文', 'attitudes': 646, 'comments': 509, 'reposts': 155}

{'id': '4276572205338096', 'text': '雪橇犬,鸟,鲸鱼,海豹,冰块,人(最后一张)。 格陵兰', 'attitudes': 35, 'comments': 18, 'reposts': 1}

{'id': '4276459473976711', 'text': '北极 微博视频', 'attitudes': 196, 'comments': 39, 'reposts': 12}

{'id': '4276308663690970', 'text': '真好看,魅力十足//@zhj居安:妈呀!太好看了吧!保持的真好,羡慕呀!', 'attitudes': 379, 'comments': 91, 'reposts': 191}

{'id': '4276172055838171', 'text': '在高铁渣男这件事上,我觉得乘警也必须要反思,如果不让座,必须强制执行。如果乘警不作为,个体的乘客如何能解决自己权益收到伤害的情形,难不成都要靠自己的拳头去解决问题?我们有些执法者的问题在于,该有善意的时候心狠,该心狠的时候又充满了没原则的善意。', 'attitudes': 3536, 'comments': 496, 'reposts': 601}

{'id': '4276152610951821', 'text': '恶心至极,不接受那虚伪的道歉,拉入高铁黑名单吧。//@刘力博士://@杨伯溆:太不可思议了//@芮法:唯物史观啊,哪有历史唯物主义史观之说。作者、编辑、刊物都太丢人了//@记录者老K:他还是学法律的 查看图片', 'attitudes': 407, 'comments': 287, 'reposts': 350}

python爬虫新浪微博_python爬虫抓取新浪微博数据相关推荐

  1. Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据

    Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据 不需要登陆新浪微博账户,直接运行就可以通过python爬虫爬取新浪微博用户数据.本例selenium与pyautogui ...

  2. iOS开发——网络使用技术OC篇网络爬虫-使用正则表达式抓取网络数据

    网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...

  3. 手机应用url抓取_Python爬虫入门,快速抓取大规模数据(第六部分)

    在前面的章节中,我们以尽量少的代码演示了爬虫的基本原理.如果只是需要抓取一些简单的数据,那么我们修改一下前面的代码就可以完成任务了.但是当我们需要完成一些复杂的大型抓取任务时,我们就需要考虑更多东西, ...

  4. python爬取app、返回的是加密数据_Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  5. python123 app下载_Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  6. Node.js学习之网络爬虫(使用cheerio抓取网页数据)

    准备工作 1.安装node.js开发环境:http://www.runoob.com/nodejs/nodejs-install-setup.html 2.了解cheerio库 英文:https:// ...

  7. 手把手教你使用R语言爬虫在气象网站抓取气象数据并分析绘制热力日历图(1)

    我们做临床研究常见的烦恼为没有好的数据,目前气象网站上有很多关于气象因素和空气质量数据,但是没有系统的整理和格式等问题,我们使用起来非常不方便,而且很费时间,我们可以使用R语言爬虫工具对网站上的数据进 ...

  8. python 百度词典_python在线抓取百度词典的翻译结果翻译单词

    这段代码通过抓取百度词典的翻译结果达到翻译单词的目的 这个小工具使用Python语言编写完成,其中使用到这 些类库(urllib,BeautifulSoup ),前者主要负责网络通讯方面,后者负责HT ...

  9. python判断成语_python正则表达式抓取成语网站

    #anthor jiqunpeng #time 20121124 import urllib import re def gethtml(url): #从url中读取html内容 page = url ...

  10. 梦幻西游python验证成语_python正则表达式抓取成语网站

    #anthor jiqunpeng #time 20121124 import urllib import re def getHtml(url): #从URL中读取html内容 page = url ...

最新文章

  1. 走在技术前沿,今年最火的top5 +Java开源项目
  2. 神秘的 ORACLE DUAL表
  3. 修改mint-ui的主题色
  4. Linux安装Hbase并验证
  5. LINUX下直接使用ISO文件
  6. python 关键字参数为什么只能出现在最后_Python笔记2——默认参数,可变参数,关键字参数,参数组合...
  7. 人工智能ai 学习_学习代理| 人工智能
  8. js中的浅拷贝深拷贝深入理解
  9. linux 用户及用户授权
  10. 道道通导航linux升级,道道通导航升级免费版
  11. 我们如何一键识别?拍照识别植物的软件有哪些?
  12. 9.查找算法--二叉排序树
  13. 程序员开发指南!金三银四Android面试的一些感受,这原因我服了
  14. MIT牛人解说数学体系
  15. 计算广告基础知识(二)
  16. 大数据主要学习什么?
  17. oracle转换人民币,月光软件站 - 编程文档 - 数据库 - 如何在ORACLE中實現人民幣大寫的轉換...
  18. 成为一名合格的算法工程师需要掌握哪些技能?
  19. 如何组装深度学习的计算机
  20. (转)Java开源CMS系统 一

热门文章

  1. 重复在学习中的重要性
  2. 关于笔记本安装Deepin 或者ubuntu操作系统,无法进入界面。
  3. 选择变色镜片——爱眼护眼
  4. 纤亿通谈-单模和多模光纤跳线有哪些不同之处?
  5. linux查看显卡型号
  6. MATLAB实现的车牌定位系统
  7. 电脑重装系统后被格式化了怎么恢复之前的数据?
  8. java 中 isb啥意思_isb官网-新版下载
  9. 磁盘管理看不到硬盘的恢复办法
  10. 推荐一份完整的大数据教学视频