1. 36氪(36kr)数据----写在前面

今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备

36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去。

网址 https://36kr.com/

2. 36氪(36kr)数据----数据分析

36kr的页面是一个瀑布流的效果,当你不断的下拉页面的时候,数据从后台追加过来,基于此,基本可以判断它是ajax异步的数据,只需要打开开发者工具,就能快速的定位到想要的数据,我们尝试一下!

捕获链接如下

https://36kr.com/api/search-column/mainsite?per_page=20&page=1&_=1543840108547
https://36kr.com/api/search-column/mainsite?per_page=20&page=2&_=1543840108547
https://36kr.com/api/search-column/mainsite?per_page=20&page=3&_=1543840108547
https://36kr.com/api/search-column/mainsite?per_page=20&page=4&_=1543840108547

在多次尝试之后,发现per_page最大可以扩展到300,但是当大于100的数据,返回的数据并不是很理想,所以,我们拟定为100即可,page就是页码,这个不断循环叠加即可。

上面的参数还有一个更加重要的值,叫做total_count 总共有多少文章数目。有这个参数,我们就能快速的拼接出来,想要的页码了。

3. 36氪(36kr)数据----创建scrapy项目

scrapy startproject kr36

4. 36氪(36kr)数据----创建爬虫入口页面

scrapy genspider Kr36 "www.gaokaopai.com"
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

5. 36氪(36kr)数据----编写url生成器

页面起始地址start_urls为第一页数据,之后会调用parse函数,在函数内容,我们去获取total_count这个参数
这个地方,需要注意 yield 返回数据为Request() 关于他的详细说明,请参照
https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/request-response.html

所有参数清单,参数名字起得好,基本都能代表所有的意思了。比较重要的是urlcallback

class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])
class Kr36Spider(scrapy.Spider):name = 'Kr36'allowed_domains = ['36kr.com']start_urls = ['https://36kr.com/api/search-column/mainsite?per_page=100&page=1&_=']def parse(self, response):data = json.loads(response.body_as_unicode())totle = int(data["data"]["total_count"])#totle = 201for page in range(2,int(totle/100)+2):print("正在爬取{}页".format(page),end="")yield Request("https://36kr.com/api/search-column/mainsite?per_page=100&page={}&_=".format(str(page)), callback=self.parse_item)

6. 36氪(36kr)数据----解析数据

在解析数据过程中,发现有时候数据有缺失的情况发生,所以需要判断一下 app_views_countmobile_views_countviews_countfavourite_num 是否出现在字典中。

注意下面代码中的Kr36Item类,这个需要提前创建一下

Kr36Item


class Kr36Item(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()app_views_count = scrapy.Field() # APP观看数量mobile_views_count = scrapy.Field() # 移动端观看数量views_count = scrapy.Field() # PC观看数量column_name = scrapy.Field() # 类别favourite_num = scrapy.Field() # 收藏数量title = scrapy.Field() # 标题published_at = scrapy.Field() # 发布时间is_free = scrapy.Field() # 是否免费username = scrapy.Field()
    def parse_item(self,response):data = json.loads(response.body_as_unicode())item = Kr36Item()for one_item in data["data"]["items"]:print(one_item)item["app_views_count"] = one_item["app_views_count"] if "app_views_count" in one_item else 0# APP观看数量item["mobile_views_count"] = one_item["mobile_views_count"]  if "mobile_views_count" in one_item else 0 # 移动端观看数量item["views_count"] = one_item["views_count"]  if "views_count" in one_item else 0  # PC观看数量item["column_name"] = one_item["column_name"]  # 类别item["favourite_num"] = one_item["favourite_num"]  if "favourite_num" in one_item else 0  # 收藏数量item["title"] = one_item["title"] # 标题item["published_at"] = one_item["published_at"]  # 发布时间item["is_free"] = one_item["is_free"] if "is_free" in one_item else 0# 是否免费item["username"] = json.loads(one_item["user_info"])["name"]yield item

最后打开settings.py中的pipelines编写数据持久化代码

ITEM_PIPELINES = {'kr36.pipelines.Kr36Pipeline': 300,
}
import os
import csvclass Kr36Pipeline(object):def __init__(self):store_file = os.path.dirname(__file__)+'/spiders/36kr.csv'self.file = open(store_file,"a+",newline="",encoding="utf_8_sig")self.writer = csv.writer(self.file)def process_item(self, item, spider):try:self.writer.writerow((item["title"],item["app_views_count"],item["mobile_views_count"],item["views_count"],item["column_name"],item["favourite_num"],item["published_at"],item["is_free"],item["username"]))print("数据存储完毕")except Exception as e:print(e.args)def close_spider(self,spider):self.file.close()
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

7. 36氪(36kr)数据----获取数据

运行上述代码,没有做过多的处理,也没有调整并发速度,也没有做反爬措施。跑了一下,大概获取到了69936条数据,和预估的差了300多条,问题不大,原因没细查。

Python爬虫入门【18】: 36氪(36kr)数据抓取 scrapy相关推荐

  1. Python爬虫入门教程【18】: 36氪(36kr)数据抓取 scrapy

    1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去. 网址 ...

  2. Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy

    1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数 ...

  3. 【Python】36氪(36kr)数据抓取 scrapy

    1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去. 网址 ...

  4. Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  5. Python爬虫入门实战之猫眼电影数据抓取(实战篇)

    项目实战 静态网页实战 本节我们将为大家展现一个完整爬虫的大致过程,此次项目内容为提取猫眼电影TOP100榜中的所有电影信息并存储至CSV文件中,其首页地址为http://maoyan.com/boa ...

  6. python 爬虫实例 电影-Python爬虫入门实战之猫眼电影数据抓取(实战篇)

    电影名 上映信息 综合票房 票房占比 累计票房

  7. python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  8. python爬虫入门实战争胜法_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  9. Python爬虫4.2 — ajax(动态网页数据抓取)用法教程

    Python爬虫4.2 - ajax[动态网页数据]用法教程 综述 AJAX 介绍 什么是AJAX 实例说明 请求分析 获取方式 实例说明 其他博文链接 综述 本系列文档用于对Python爬虫技术的学 ...

最新文章

  1. 人工智能70年:科幻和现实的交融
  2. 线段树/树状数组问题 | 问题集合
  3. SUN JAVA面试笔试题2
  4. Python中的join()函数和split()函数的用法
  5. iphone中使用第三方工具(RegexKitLite)实现正则表达式
  6. 学习Spring Boot:(四)应用日志
  7. MySQL 普通索引和唯一索引的区别详解
  8. iOS协议、代理、Block和回调、类别
  9. 构建企业代码管理系统之SVN服务(基础篇)
  10. 来吧,展示。互联网术语
  11. 设计模式简单代码之Command模式(皇帝圣旨篇)
  12. openGL的特点及功能
  13. 【技巧】笔记本外接显示器配置教程(个人向)
  14. 618玩法升级AI智能化技术数字化营销才是品牌的制胜之道
  15. Python随机生成n个满足如下要求的手机号码
  16. 夺命雷公狗TP下关联查询
  17. layui弹窗设置滚动_烦人的网页弹窗广告无处不在?3种方法帮你彻底关闭
  18. 【LeetCode】121. 买入和卖出股票的最佳时间
  19. oracle 每周日凌晨4点执行job
  20. 干货:建筑工地应如何选择适合自己的劳保鞋,建议收藏

热门文章

  1. k3导入账套_如何将金蝶k3老账套套打文件导入到新账套使用
  2. k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库
  3. 如何用代码在Delphi 7.0中安装TeeChart 7.0
  4. 数据分析Excel必备技能有哪些
  5. 安川最小巧机器人_安川带你了解几种常用机器人
  6. 一文看懂web组态编辑器web可视化组件
  7. 用python实战飞机大战
  8. 能够帮助睡眠的东西,这些东西能改善你的睡眠质量
  9. JAVA银企直连建设银行云直连模式超详细讲解
  10. csdn外包电子商务认证设想讨论稿——CSDN外包实践(36)