1. 效果图

  2. 传送门点击传送门

  3. 进入网站之后我们打开开发工具之后,往下滑时会出现一个接口(当然滑的越多接口越多)

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

  5. 我们可以这么写代码实现翻页(这代码只是举例子怎么写翻页,不代表最终的代码),这里我取max_id开始的地方是20333000(小伙伴们可以自己去找一下max_id的有效范围),如下

max_id = 20333000
while True:# 请求的urlurl = '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
  1. 接下来分析一下返回来的数据,以便我们进行抓取,通过下图我们可以发现每一篇文章都是存储在列表这个键当中的,所以我们先取出list这个键

    代码如下:
# 我们需要的数据存在一个列表之中,先取出这个列表
lists = resp.get('list')
  1. 再看每一篇文章的信息,将data的信息复制粘贴到json.cn这个网站去查看json的信息,可以发在data中取出我们需要的信息
for temp in lists:# 数据在每一个元素中的data键中,取出datadata = 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'] = titledata_dict['description'] = descriptiondata_dict['user_name'] = user_namedata_dict['column'] = columndata_dict['created_at'] = created_atdata_dict['view_count'] = view_countprint(data_dict)
  1. 最后就是将数据保存到文件中,其中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()# 声明writerwriter = csv.DictWriter(f, title)# 写入表头writer.writeheader()# 批量写入数据writer.writerows(data_list)
print('csv文件写入完成')
  1. 完整代码附上,记得要设置延迟噢,我们是一只文明的爬虫~~~
    (忘了说了,cookie会过期,需要及时更新cookie)
import requests
import json
import csv
import re
import time# 构建请求头
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36','Cookie': '_ga=GA1.2.2063358900.1556201729; device_id=6d3728c68639d27b0fa92464193777de; aliyungf_tc=AQAAAHOchwegLwsA1isrcGvAfZFXtOkL; xq_a_token=00b95c4633c43046f85b3a7b2a2956be42f6d389; xq_a_token.sig=MDZUHkBzCj9ftXUmZOXkubKQpEY; xq_r_token=f65e4a63ac53b23a3cea151cc3512348473862fe; xq_r_token.sig=leaWaFTPqUYvoGQEw23wvaagwmc; _gid=GA1.2.1611213571.1556421100; u=971556421100822; Hm_lvt_1db88642e346389874251b5a1eded6e3=1556202024,1556289894,1556421101,1556421135; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1556421135'
}# 声明一个全局列表存储字典
data_list = []def get_index(max_id):# 请求的urlurl = '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()if resp:return respelse:return Nonedef start_spider(resp):# 判断数据是否存在if resp:# 我们需要的数据存在一个列表之中,先取出这个列表lists = resp.get('list')# 判断列表是否存在,然后遍历if lists:for temp in lists:# 数据在每一个元素中的data键中,取出datadata = 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'] = titledata_dict['description'] = descriptiondata_dict['user_name'] = user_namedata_dict['column'] = columndata_dict['created_at'] = created_atdata_dict['view_count'] = view_count# 判断字典数据是否以及存在了列表,相当于是去重,将字典存入列表中if data_dict not in data_list:data_list.append(data_dict)print(data_dict)# 设置一个flag并返回来判断是否没有数据了return Trueelse:return Nonedef save_file():# 将数据写入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()# 声明writerwriter = csv.DictWriter(f, title)# 写入表头writer.writeheader()# 批量写入数据writer.writerows(data_list)print('csv文件写入完成')def main():max_id = 20333000while True:resp = get_index(max_id)flag = start_spider(resp)# 如果需要爬取全部,可以把下面的注释去掉,这里我为了方便就只爬一部分# if not flag:#     break# 把上面的注释去掉就把下面的if语句注释if max_id > 20333100:breakmax_id += 15time.sleep(1)save_file()if __name__ == '__main__':main()

python爬虫——如何爬取ajax网页之爬取雪球网文章相关推荐

  1. Python爬虫:用BeautifulSoup进行NBA数据爬取

    爬虫主要就是要过滤掉网页中没用的信息.抓取网页中实用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解.如网页的标签,网页的语言等知识,推荐去W3School: W3s ...

  2. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

  3. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  4. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  5. Python爬虫系列之抖音热门视频爬取

    Python爬虫系列之抖音热门视频爬取 主要使用requests库以及手机抓包工具去分析接口 该demo仅供参考,已经失效,需要抖音2019年5月最新所有接口请点击这里获取 抖音资源获取接口文档请点击 ...

  6. Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析

    上一篇:Python 爬虫入门篇-如何获取网页中的图片.我们了解到了 urllib 获取图片的原理,urllib.request.urlretrieve() 就是用来获取图片的. 这一篇,我们用正则表 ...

  7. Python爬虫:最牛逼的 selenium爬取方式!

    Python爬虫:最牛逼的 selenium爬取方式! 作为一个男人 在最高光的时刻 这是小编准备的python爬虫学习资料,加群:700341555即可免费获取! Python爬虫:最牛逼的 sel ...

  8. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  9. python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据

    其实在当今社会,网络上充斥着大量有用的数据,我们只需要耐心的观察,再加上一些技术手段,就可以获取到大量的有价值数据.这里的"技术手段"就是网络爬虫.今天就给大家分享一篇爬虫基础知识 ...

最新文章

  1. 搜python编程题_100+Python编程题给你练~(附答案)
  2. POJ 1185 解题报告 炮兵阵地
  3. java阅读题_java 练习题带答案
  4. jetty 在请求URI里传入非法字符,jetty会断开连接,导致nginx认为该节点不健康
  5. 基类与派生类之间的转换关系
  6. linux环境变量设置错误后,如何恢复
  7. jQuery init debug
  8. 日期格式化为yyyymmdd_Excel小技巧——如何将多行日期快速转换为数字文本
  9. Sharepoint学习笔记—关于Unique Document IDs的几点说明及启用步骤
  10. 【Unity新闻】Unity新工具Metric Validation帮你自动化测试游戏平衡性
  11. Web API-DOM节点操作
  12. 某中学校校园网络方案设计(课程设计)
  13. docker核心视频教程
  14. Android os 4.4.4 魅族,魅族Mx3刷机包 Android 4.4.4 稳定版Flyme OS 3.7.3A 流畅顺滑体验
  15. 程序员最爱的 10 个在线社区,你去过几个?
  16. 假设检验与常见的统计检验方法
  17. 光纤接头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Amigo学习(一)解决使用中遇到的问题
  19. 各类识别、深度学习-开源代码文献梳理
  20. linux resin 内存溢出,Resin服务器内存修改

热门文章

  1. TVM Relay Pass探究
  2. 李群与李代数1:对应关系及指数/对数映射
  3. 那么pid到底该怎么调节呢
  4. 华为智慧屏v55i怎么看直播
  5. 论文解读《MSNet-4mC:学习有效的多尺度表示来识别DNAn4-甲基胞嘧啶位点》
  6. oracle查询父子节点,oracle 父子节点 查询
  7. Android实战简单新闻主界面设计
  8. 前端做CRM管理系统是做什么_悟空CRM:CRM系统能够帮助企业做什么?
  9. vue + vue-json-excel 制作导出excel
  10. 电影票API接口及公众号对接H5