如何爬取ajax网页之爬取雪球网文章

栏目: jQuery · 发布时间: 5年前

内容简介:1.效果图2.传送门点击传送门3.发工具之后,往下滑时会出现一个接口(当然滑的越多接口越多)

1.效果图

如何爬取ajax网页之爬取雪球网文章

2.传送门点击传送门

3.发 工具 之后,往下滑时会出现一个接口(当然滑的越多接口越多)

如何爬取ajax网页之爬取雪球网文章

4.我们通过对比两个及以上的接口进行分析它们的不同之处(这叫找规律) 可以发现max_id是在变化的,其他都是不变的,而且count是返回的文章数目有15个,所以max_id只要自增15就可以实现翻页了,是不是很简单

如何爬取ajax网页之爬取雪球网文章

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这个键

如何爬取ajax网页之爬取雪球网文章

代码如下:

# 我们需要的数据存在一个列表之中,先取出这个列表
lists = resp.get('list')
复制代码

7.再看每一篇文章的信息,将data的信息复制粘贴到json.cn这个网站去查看json的信息,可以发在data中取出我们需要的信息

如何爬取ajax网页之爬取雪球网文章
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

投稿来源: blog.csdn.net/weixin_4402…


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computational Geometry

Computational Geometry

Mark de Berg、Otfried Cheong、Marc van Kreveld、Mark Overmars / Springer / 2008-4-16 / USD 49.95

This well-accepted introduction to computational geometry is a textbook for high-level undergraduate and low-level graduate courses. The focus is on algorithms and hence the book is well suited for st......一起来看看 《Computational Geometry》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试