python3网络爬虫开发实战6.3爬取微博处理since_id
最近沉迷于python爬虫,学习的是崔庆才老师的python3网络爬虫开发实战这本书,书是好书,只不过因为技术更新,原书的一些代码已经不能使用,特写此篇来记录自己的一些爬坑经历。
最大的变化就是原书中URL的page变量没有了,取而代之的是since_id
大家可以去讨论区看看解法:ajax请求。
下面说说下我的解决办法:
先了解下什么是since_id:python-新浪爬取话题微博实践,简单说:在当前页面,Preview下的cardlistInfo下的since_id保存的就是下一个页面的Request URL里的since_id,注意,第一个页面里的Request URL没有since_id
如图所示:
思路:
我们可以在get_page(since_id=None)中传入since_id参数,因为第一个页面没有since_id,因此我们将since_id默认为None。
这个函数将会返回一个元组,其中包括了下一个页面的since_id和当前页面的json格式页面内容。利用返回的元组索引,我们就可以获得即将访问的下一个页面的since_id。
get_page(since_id=None)函数:
def get_page(since_id=None): # 因为第一个页面没有since_id,因此我们将since_id默认为Noneparams = {'type': 'uid','value': '2830678474','containerid': '1076032830678474','since_id': since_id}url = base_url+urlencode(params)try:response = requests.get(url, headers=headers)if response.status_code == 200:json = response.json()items = json.get('data').get('cardlistInfo')next_since_id = items['since_id']# print(next_since_id)return (json, next_since_id) # 返回一个元组,其中包括了下一个页面的since_id和当前页面的json格式页面内容except requests.ConnectionError as e:print('Error', e.args)
源代码:(为了方便演示,这里只是打印了崔老师微博的标题)
from urllib.parse import urlencode
from pyquery import PyQuery as pq
import requestsbase_url = 'https://m.weibo.cn/api/container/getIndex?'
headers = {'Host': 'm.weibo.cn','Referer': 'https://m.weibo.cn/u/2830678474','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63','X-Requested-With': 'XMXLHttpRequest',
}def get_page(since_id=None): params = {'type': 'uid','value': '2830678474','containerid': '1076032830678474','since_id': since_id}url = base_url+urlencode(params)try:response = requests.get(url, headers=headers)if response.status_code == 200:json = response.json()items = json.get('data').get('cardlistInfo')next_since_id = items['since_id']return (json, next_since_id) except requests.ConnectionError as e:print('Error', e.args)def parse_page(json):if json:items = json.get('data').get('cards')for item in items:item = item.get('mblog')weibo = {}weibo['text'] = pq(item.get('text')).text() # 为了方便检测,这里只爬取了微博的标题yield weibodef main():for i in range(10):if i == 0:print("第{}页".format(i+1))tuple_since_id = get_page()results = parse_page(tuple_since_id[0])for result in results:print(result['text'])else:print("第{}页".format(i+1))tuple_since_id = get_page(tuple_since_id[1])results = parse_page(tuple_since_id[0])for result in results:print(result['text'])if __name__ == '__main__':main()
python3网络爬虫开发实战6.3爬取微博处理since_id相关推荐
- [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图
[Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图 学习笔记--爬取今日头条街拍美图 准备工作 抓取分析 实战演练 学习笔记–爬取今日头条街拍美图 尝试通过分析Ajax请求来抓取 ...
- Python3网络爬虫开发实战,Scrapy 爬取新浪微博
前面讲解了 Scrapy 中各个模块基本使用方法以及代理池.Cookies 池.接下来我们以一个反爬比较强的网站新浪微博为例,来实现一下 Scrapy 的大规模爬取. 很多人学习python,不知道从 ...
- Python3网络爬虫开发实战分析Ajax爬取今日头条街拍美图
本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 很多人学习pyt ...
- 【Python3网络爬虫开发实战】3.4-抓取猫眼电影排行
[摘要]本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容.requests比urllib使用更加方便,而且目前我们还没有系统学习HTML解析库,所以这里就选用正则表达 ...
- [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品
在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可 ...
- 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中
本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...
- python3网络爬虫开发实战学习笔记(二)------python3 XPATH爬 猫眼电影排名
我最近在看崔庆才老师的<python3 网络爬虫开发实战>觉得挺不错的,上面还有一个 用正则表达式爬取猫眼电影的电影排行榜 我练了一下,感觉不会很难,后来学到了xpath,就想用xpath ...
- 【崔庆才教材】《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)
前情提要 最近有七八个小伙伴私信问我说崔大神的<Python3网络爬虫开发实战>教材中 "3.4爬取猫眼电影排行" 一节的代码目前不能用. 首先附上崔大神的github ...
- 【Python3网络爬虫开发实战】 1.7-App爬取相关库的安装
[摘要] 除了Web网页,爬虫也可以抓取App的数据.App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的.由于App没有浏览器这种可以比较直观地看到后台请求的工具 ...
- 《Python3网络爬虫开发实战(第二版)》上市了!!!!
" 阅读本文大概需要 5 分钟. " 告诉大家一个好消息:我的好朋友崔庆才老师的<Python3网络爬虫开发实战(第二版)>现在正式上市了!!!! 没错,就是这本: 就 ...
最新文章
- linux socket完成端口,“完成端口”模型(IOCP)
- 增大hadoop client内存
- 网页交互动画终极指南
- linux相对路径列出目录文件,linux – UNIX:列出目录中具有相对路径的文件
- ibatis(0)ibatis 与 mybatis 简述
- Windows与Linux下tftp服务的使用
- linux命令取数字前两位,linux中head命令使用详解(显示开头数量的文字块)
- 火箭技术术语_仿真优化火箭发动机 3D 打印制造工艺
- 【华为大咖分享】7.大型云平台的DevOps实践(后附PPT下载地址)
- c++禁止进程被结束_第四章 进程管理
- python的requests.session()_python3+requests接口自动化session操作方法
- 使用Visual Studio 2017开发Linux程序
- php小刀娱乐网源码,PHP精仿小刀娱乐网资源下载站网站整站源码
- 用 JavaScript 实现一个 TicTacToe 游戏 —— 编程训练
- 《留住好员工》-读后感
- 程序员自我修改之读书学习
- 监控io性能、free命令、ps命令、查看网络状态、linux下抓包
- OSChina 周日乱弹 —— 生活就像巧克力
- 【Day3.7】建兴海鲜酒家,味道还很不错
- 当你同事工作出色时,如何得体地告知他上司
热门文章
- Linux命令之新增组groupadd
- scum服务器里找不到车,人渣SCUM车辆机制介绍 人渣SCUM车辆为什么消失
- c语言pipe函数,pipe 函数 (C语言)
- 《实况足球10》全套数值能力解析
- 计算机科学与技术考研吧,计算机科学与技术考研学校排名
- 揭秘如何搭建梦幻西游社交框架
- Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)
- ​TCP和UDP的135、137、138、139、445端口的作用?​
- 解决springboot的pom.xml文件第一行报错问题
- java实现断点续播_vue-video-player 断点续播的实现