最近沉迷于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相关推荐

  1. [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图

    [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图 学习笔记--爬取今日头条街拍美图 准备工作 抓取分析 实战演练 学习笔记–爬取今日头条街拍美图 尝试通过分析Ajax请求来抓取 ...

  2. Python3网络爬虫开发实战,Scrapy 爬取新浪微博

    前面讲解了 Scrapy 中各个模块基本使用方法以及代理池.Cookies 池.接下来我们以一个反爬比较强的网站新浪微博为例,来实现一下 Scrapy 的大规模爬取. 很多人学习python,不知道从 ...

  3. Python3网络爬虫开发实战分析Ajax爬取今日头条街拍美图

    本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 很多人学习pyt ...

  4. 【Python3网络爬虫开发实战】3.4-抓取猫眼电影排行

    [摘要]本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容.requests比urllib使用更加方便,而且目前我们还没有系统学习HTML解析库,所以这里就选用正则表达 ...

  5. [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品

    在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可 ...

  6. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  7. python3网络爬虫开发实战学习笔记(二)------python3 XPATH爬 猫眼电影排名

    我最近在看崔庆才老师的<python3 网络爬虫开发实战>觉得挺不错的,上面还有一个 用正则表达式爬取猫眼电影的电影排行榜 我练了一下,感觉不会很难,后来学到了xpath,就想用xpath ...

  8. 【崔庆才教材】《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)

    前情提要 最近有七八个小伙伴私信问我说崔大神的<Python3网络爬虫开发实战>教材中 "3.4爬取猫眼电影排行" 一节的代码目前不能用. 首先附上崔大神的github ...

  9. 【Python3网络爬虫开发实战】 1.7-App爬取相关库的安装

    [摘要] 除了Web网页,爬虫也可以抓取App的数据.App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的.由于App没有浏览器这种可以比较直观地看到后台请求的工具 ...

  10. 《Python3网络爬虫开发实战(第二版)》上市了!!!!

    " 阅读本文大概需要 5 分钟. " 告诉大家一个好消息:我的好朋友崔庆才老师的<Python3网络爬虫开发实战(第二版)>现在正式上市了!!!! 没错,就是这本: 就 ...

最新文章

  1. linux socket完成端口,“完成端口”模型(IOCP)
  2. 增大hadoop client内存
  3. 网页交互动画终极指南
  4. linux相对路径列出目录文件,linux – UNIX:列出目录中具有相对路径的文件
  5. ibatis(0)ibatis 与 mybatis 简述
  6. Windows与Linux下tftp服务的使用
  7. linux命令取数字前两位,linux中head命令使用详解(显示开头数量的文字块)
  8. 火箭技术术语_仿真优化火箭发动机 3D 打印制造工艺
  9. 【华为大咖分享】7.大型云平台的DevOps实践(后附PPT下载地址)
  10. c++禁止进程被结束_第四章 进程管理
  11. python的requests.session()_python3+requests接口自动化session操作方法
  12. 使用Visual Studio 2017开发Linux程序
  13. php小刀娱乐网源码,PHP精仿小刀娱乐网资源下载站网站整站源码
  14. 用 JavaScript 实现一个 TicTacToe 游戏 —— 编程训练
  15. 《留住好员工》-读后感
  16. 程序员自我修改之读书学习
  17. 监控io性能、free命令、ps命令、查看网络状态、linux下抓包
  18. OSChina 周日乱弹 —— 生活就像巧克力
  19. 【Day3.7】建兴海鲜酒家,味道还很不错
  20. 当你同事工作出色时,如何得体地告知他上司

热门文章

  1. Linux命令之新增组groupadd
  2. scum服务器里找不到车,人渣SCUM车辆机制介绍 人渣SCUM车辆为什么消失
  3. c语言pipe函数,pipe 函数 (C语言)
  4. 《实况足球10》全套数值能力解析
  5. 计算机科学与技术考研吧,计算机科学与技术考研学校排名
  6. 揭秘如何搭建梦幻西游社交框架
  7. Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)
  8. ​TCP和UDP的135、137、138、139、445端口的作用?​
  9. 解决springboot的pom.xml文件第一行报错问题
  10. java实现断点续播_vue-video-player 断点续播的实现