最近在复习resqusts 爬虫模块,就重新写了一个豆瓣爬虫,这个网页从HTML

源码上来看是没有任何我想要的信息的,如下图所示:

这是网页视图,我在源码中查找影片信息,没有任何信息,如图:

由此我判断数据是通过js封装过的,于是开始抓包,包也不多,排除一下就能找到json的接口,从接口进去是这样的:

而这些就正是我想要的数据,这些数据包括评分,名字,链接等等,但是不是标准的json,而是被封装到了一个名为

subjects 的key中,所以提取数据的时候还需要多一步操作,把数据从subjects

中提取出来

开始构建带代码:

  • 先构建run()函数,搭建思路:

    def run(self):

      # 1.请求接口获取数据  
    
      response = self.get_page(self.start_url)  
    
      # 2.将数据格式化  
    
      result = self.data_wash(response)  
    
      # 3.写入mongodb  
    
      self.save_db(result)  
    
      # 4. 写入本地json保存
  • 如此,基本的思路就清晰了,我只用按照这个思路一步步实现,就完成了。完整代码如下:

    import requests

    import json

    import pymongo

    class douBan:

    def init(self):

    self.client = pymongo.MongoClient()

    self.db = self.client.DouBan

            self.headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Mobile Safari/537.36'}
    self.start_url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=5050&page_start=0'
    def get_page(self,url):
    ''' :param url: 请求地址
    :return: 返回response
    '''
    url = url
    response = requests.get(url,headers=self.headers).content.decode()
    return response
    def data_wash(self,response):
    ret = json.loads(response)
    ret =ret['subjects']
    print(type(ret))
    return ret def run(self):
    # 1.请求接口获取数据
    response = self.get_page(self.start_url)
    # 2.将数据格式化
    result = self.data_wash(response)
    # 3.写入mongodb
    self.save_db(result)
    # 4. 写入本地json保存 def save_db(self,data):
    collection = self.db.Movie4
    with open('douban.json','w',encoding='utf-8') as f:
    f.write(json.dumps(data,ensure_ascii=False,indent=2))
    print('本地写入成功') ret = collection.insert_many(data)
    print(ret,"写入数据库成功") if __name__ == '__main__':
    douban = douBan()
    douban.run()

代码很简单,但功能是实现了。后期如果想爬取其他分类,只用在start

中修改就可以实现。代码会逐步完善。

结果如下:本地json 文件:

./media/image4.png

数据库端如下:

豆瓣爬虫——通过json接口获取数据的更多相关文章

  1. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  2. java接口对接——别人调用我们接口获取数据

    java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...

  3. 从api接口获取数据-okhttp

    首先先介绍下api接口: API:应用程序接口(API:Application Program Interface) 通常用于数据连接,调用函数提供功能等等... 从api接口获取数据有四种方式:Ht ...

  4. Java之通过接口获取数据并用JDBC存储到数据库中

    最近做数据同步功能,从接口获取数据然后存到数据库中以便后续对数据进行相关操作,下面就贴一下相关代码. import com.alibaba.fastjson.JSON; import com.alib ...

  5. 无限遍历,Python实现在多维嵌套字典、列表、元组的JSON中获取数据

    背景 在做接口自动化的过程中,接口返回的数据是  列表字典循环嵌套  格式的,所以怎样通过一个key值,获取到被包裹了多层的目标数据成为了摆在我面前的一个问题. 一开始没想自己写,但是搜索后发现虽然很 ...

  6. 调用REST接口获取数据

    /// <summary> /// 根据机构代码本机构下报警用户列表: /// </summary> /// <param name="org_code&quo ...

  7. Http接口获取数据写入Hdfs

    数据源类型:数组列表 [{field:value}, {field:value}, {field:value}, {field:value}] 1. 定义http数据源链接 package com.e ...

  8. PHP访问接口获取数据

    如:http://localhost/operate.php?act=get_user_list&type=json 在这里operate.php相当于一个接口,其中get_user_list ...

  9. 例子:Vue 配合 vue-resource 从接口获取数据

    vue-resource 是 vue 的一个与服务器端通信的 HTTP 插件,用来从服务器端请求数据. 结合例子——图片列表来写一下 Vue获取接口数据. html : <div id=&quo ...

随机推荐

  1. SpringBoot 整合MinIO

    引入依赖 <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifact ...

  2. Centos(Linux)安装openoffice教程

    一.从官网下载openoffice软件 下载地址:http://www.openoffice.org/zh-cn/download/ 选择(RPM)类型进行下载,选择对应的版本,这里默认选择是最新的版 ...

  3. JAVA通过经纬度获取两点之间的距离

    private static double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math ...

  4. 【LeetCode】958. Check Completeness of a Binary Tree 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://le ...

  5. D. Chloe and pleasant prizes

    D. Chloe and pleasant prizes time limit per test 2 seconds memory limit per test 256 megabytes input ...

  6. 15 - Vue3 UI Framework - 完工部署

    项目官网也基本完成了,接下来我们再讲一下如何将项目官网部署到 GitHub Pages 上 返回阅读列表点击 这里 项目配置 常见的模式有三种,即 History 模式 Hash 模式 Memory ...

  7. 编写Java程序,使用Set实现不重复添加用户

    返回本章节 返回作业目录 需求说明: 在控制台输入用户信息,用户信息包括姓名.性别和年龄,将用户信息保存至User对象中. 将User对象保存至HashSet集合中. 规定如果两个User对象的姓名. ...

  8. python uwsgi 配置

    启动:uwsgi --ini xxx.ini 重启:uwsgi --reload xxx.pid 停止:uwsgi --stop xxx.pid ini 文件 [uwsgi] chdir = /vag ...

  9. Notepad++在线安装使用JSON插件

    1.介绍 JSON Viewer是Notepad++的JSON插件, Notepad++的Plugins Admin可以安装管理插件, 它不仅可以格式化JSON字符串, 还可以打开JSON查看器查看结 ...

  10. 高可用k8s集群搭建

    虚拟机选择 Win10 Hyper-V 总体架构 三个master,三个node master的组件 etcd kube-apiserver kube-controller-manager kube- ...