Python爬虫如-何爬取ajax网页之爬取雪球网文章
公众号:pythonislover
1.效果图
2.传送门点击传送门
3.发工具之后,往下滑时会出现一个接口(当然滑的越多接口越多)
4.我们通过对比两个及以上的接口进行分析它们的不同之处(这叫找规律)
可以发现max_id是在变化的,其他都是不变的,而且count是返回的文章数目有15个,所以max_id只要自增15就可以实现翻页了,是不是很简单
5.我们可以这么写代码实现翻页(这代码只是举例子怎么写翻页,不代表最终的代码),这里我取max_id开始的地方是20333000(小伙伴们可以自己去找一下max_id的有效范围),如下
max_id = 20333000
while True:
# 请求的url
url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id={}&count=15&category=-1'.format(max_id)
# 返回来的数据是json格式
resp = requests.get(url, headers=headers).json()
max_id += 15
6.接下来分析一下返回来的数据,以便我们进行抓取,通过下图我们可以发现每一篇文章都是存储在列表这个键当中的,所以我们先取出list这个键
代码如下:
# 我们需要的数据存在一个列表之中,先取出这个列表
lists = resp.get('list')
7.再看每一篇文章的信息,将data的信息复制粘贴到json.cn这个网站去查看json的信息,可以发在data中取出我们需要的信息
for temp in lists:
# 数据在每一个元素中的data键中,取出data
data = temp.get('data')
# 取出来的data是一个str类型,我们需要将其转换成dict的类型方可操作
data = json.loads(data)
# 判断data是否存在
if data:
# 获取文章的题目
title = data.get('title')
# 如果没有题目,就continue,因为通过我的观察,没有title的一般是广告之类的
if not title:
continue
# 获取摘要
description = data.get('description')
# 数据清洗,使用正则表达式的sub方法
description = re.sub(r'<a.*?>|</a>|<img.*?/>', '', description)
# 获取用户的信息,用户的信息在data里边的user键中
user_name = data.get('user').get('screen_name')
# 获取是什么类型的文章
column = temp.get('column')
# 获取发表的时间戳
created_at = data.get('created_at')
# 获取阅读人数
view_count = data.get('view_count')
# 声明一个字典存储数据
data_dict = {}
data_dict['title'] = title
data_dict['description'] = description
data_dict['user_name'] = user_name
data_dict['column'] = column
data_dict['created_at'] = created_at
data_dict['view_count'] = view_count
print(data_dict)
8.最后就是将数据保存到文件中,其中data_list是我在前面一开始就声明的了
# 将数据写入json文件
with open('data_json.json', 'a+', encoding='utf-8-sig') as f:
json.dump(data_list, f, ensure_ascii=False, indent=4)
print('json文件写入完成')
# 将数据写入csv文件
with open('data_csv.csv', 'w', encoding='utf-8-sig', newline='') as f:
# 表头
title = data_list[0].keys()
# 声明writer
writer = csv.DictWriter(f, title)
# 写入表头
writer.writeheader()
# 批量写入数据
writer.writerows(data_list)
print('csv文件写入完成')
9.完整代码
完整代码公众号回复'雪球网'关键字即可
公众号:pythonislover
记得要设置延迟噢,我们是一只文明的爬虫~~~ 忘了说了,cookie会过期,需要及时更新cookie
好文推荐:
requests+pyquery爬取csdn博客信息 - https://mp.weixin.qq.com/s/yHV_wI8a1BS-SuDnersGfA
爬一爬那些年你硬盘存过的老师 - https://mp.weixin.qq.com/s/A3rLHXWnwarfFhUkj66TpQ
爬取某东600多本书籍,用数据帮你分析哪些Python书籍值得选择(上) - https://mp.weixin.qq.com/s/3wonWPQtm5xPYjIiM-JcZg
让弹幕飞一会儿——腾讯视频弹幕(39W+)爬取实战 - https://mp.weixin.qq.com/s/qUBFPQo-WITUcCWz0vcYhQ
Python采集微博热评进行情感分析祝你狗年脱单 - https://mp.weixin.qq.com/s/YuN8qW47i2QmIQ27zjFVRw
Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆) - https://mp.weixin.qq.com/s/i5XMeSQjIOlMeqVJuoutjA
python爬虫—selenium爬取京东商品信息 - https://mp.weixin.qq.com/s/1kZ4F5mp2gFALj3uKTiMqQ
python爬虫—爬取b站APP视频信息(通过fiddler抓包工具) - https://mp.weixin.qq.com/s/wtBEj-PI4crpcRVxLzofSg
某坤学学吴亦凡,Python可视化分析「大碗宽面」b站弹幕和网易云音乐评论 - https://mp.weixin.qq.com/s/czi4CKjJk1-Bf87Tviw0YA
听说你的爬虫被封了? - https://mp.weixin.qq.com/s/f9bqRCXhgTGNsjdvcK6AvA
python爬虫—使用bs4爬取链家网的房源信息 - https://mp.weixin.qq.com/s/zjVhCs0wKZpBkUA8WZYIeg
新手爬虫之创建第一个完整的scrapy项目 - https://mp.weixin.qq.com/s/u0TVq-jFZ-8UQGCYENSFBw
python爬虫—爬取taptap游戏的评论信息(通过fiddler抓包) - https://mp.weixin.qq.com/s/wDjzyzKmQQ8HQmlad71IyA
如何爬取ajax网页之爬取雪球网文章 - https://mp.weixin.qq.com/s/A6Q4GF4UbhX8Z5TT3d9byw

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
一篇文章理清Python多线程之同步条件,信号量和队列
公众号:pythonislover 今天这篇文章大概介绍下python多线程中的同步条件Event,信号量(Semaphore)和队列(queue),这是我们多线程系列的最后一篇文章,以后将会进入python多进程的系列。 同步条件(Event) 先说说为什么我们需要这个同步条件,我们的python多线程在执行task过程中,是相互竞争的,大家都可以先获取cpu的执行权限,这就是问题所在的地方,每个线程都是独立运行且状态不可预测,但是我们想想如果我们的业务中需要根据情况来决定线程的执行顺序,也就是程序中的其他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时候我们就需要使用threading库中的Event对象。 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。 在 初始情况下,Event对象中的信号标志被设置为假,如果有线程等待一个Event对象, ,那么这个线程将会被一直阻塞直至该标志为真。 一个线程如果将一个Event对象的信号标志设置为真,它将唤醒所有等待这个Event对象的线程继续执行。 Event的方法如下: event.isSet():返回eve...
-
下一篇
Python的装饰器原来是这么用的
公众号:pythonislover Python的装饰器,是一个Python中一个比较难以理解的知识点, 今天我试试说一说,说的如果不好,请见谅。 装饰器,从字面意思来说,就是修饰一个事物的,在Python里面的作用就是让一个已经存在的函数拥有一个以前没有的功能。装饰器本质上还是一个函数,知识他的功能是为其他函数添加新功能。 那有人会说,我在原来的函数里面加一些代码,也可以实现啊,为什么还要搞个装饰器来增加功能呢? 当然,如果你给一个函数加个功能,是可以加代码, 但是如果是让你给100个函数代码块加一个相同的功能呢? 一个个改代码吗? 你会奔溃的。 下面说说一个装饰器要实现,要符合一定的规则,就是两个不改动1.不改动被装饰函数的源代码2.不改动被修饰函数的调用方式 就是你加没加这个装饰器,函数要按照原样来调用 下面说说装饰器到底怎么写,怎么用,上面说到装饰器也是一个函数,但是这个函数和普通的函数不太一样,他是一个高阶函数,那我们给装饰器大概下个定义 装饰器:一个可以给别的函数添加新功能的高阶函数(当然现在还是不完整的定义) 下面介绍下什么是高阶函数。 高阶函数: 一个可以接受函数为参数...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- MySQL数据库在高并发下的优化方案
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker容器配置,解决镜像无法拉取问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能