专栏首页linux基础爬取豆瓣高分电影。

爬取豆瓣高分电影。

爬取豆瓣高分电影主要对豆瓣高分电影,按热度排序进行电影信息的爬取

分析

按F12打开开发者工具,点击XHR标签,因为他是通过ajax加载获取更多的电影信息的。返回的信息是json格式的数据,包含了每部电影详情的链接信息,先获取这些信息加企鹅号裙764261140

页码每次最后的 page_start参数 加20可以换到下一页

下面是详细代码

import re, requests
import json

class DoubanSpider:
    def __init__(self):
        self.url_temp = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E8%B1%86%E7%93%A3%E9%AB%98%E5%88%86&sort=recommend&page_limit=20&page_start={}"
        self.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"}

    def parse_url(self, url):  # 发送请求,获取响应
        print(url)
        response = requests.get(url, self.headers)
        return response.content.decode()

    def get_content_list(self, json_str):  # 提取数据
        dict_ret = json.loads(json_str)
        print(dict_ret)
        content_list = dict_ret["subjects"]  # 所有电影数据
        return content_list

    def save_content_list(self, content_list):  # 保存
        with open("douban.txt", 'a', encoding="utf-8") as f:
            for content in content_list:
                f.write(json.dumps(content, ensure_ascii=False))
                f.write("\n")  # 写入换行符
        print("保存成功")

    def run(self):  # 实现主要逻辑
        num = 0
        while True:
            # 1、构造start_url
            url = self.url_temp.format(num)
            # 2、发送请求,获取响应
            json_str = self.parse_url(url)
            # 3、提取数据
            content_list = self.get_content_list(json_str)
            # 4、保存
            self.save_content_list(content_list)
            # 5、判断是否有下一页
            if len(content_list) < 20:
                break
            # 6、构造下一个url地址
            num += 20


if __name__ == '__main__':
    douban = DoubanSpider()
    douban.run()

原文链接:https://www.cnblogs.com/zq8421/p/11037666.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • web前端学习摘要。

    HTML是具有语义化的语言,针对网页的布局,有一类标签代表各种意义的“布局盒子”。所有的布局类标签都主要用来构建页面的内容区域,是双标签类型,是双标签类型,默认...

    7537367
  • Java新手入门必看的30个题。

    1 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事?企鹅群921296279

    7537367
  • C语言必背的18个经典程序。

    7537367
  • MongoDB查询(数组、内嵌文档和$where)

    上篇主要介绍了一些基本的查询条件操作符的使用,主要针对的是一些单值,我们这次来讲讲如何查询文档内的数组和嵌入文档,并讲一下复杂查询"$where"。

    Vaccae
  • 想进入互联网公司,怎能不知道互联网的技术架构!

    本文探讨了互联网公司的技术架构,涉及 DNS、负载均衡、长连接、API 网关、PUSH 推送、微服务、分布式事务以及相关支撑的基础服务。主要是为了学习,希望可以...

    黄泽杰
  • MongoDB查询(基本查询条件操作符介绍)

    MongoDB中使用find函数来进行查询。查询最终返回的是一个集合中文档的子集,子集合包括0个文档到这个集合中所有的文档。

    Vaccae
  • 生产环境消息队列ActiveMQ的数据积压优化过程

    最近生产环境的消息通知队列发生了大量的数据积压问题,从而影响到整个平台商户的交易无法正常进行,最后只能通过临时关闭交易量较大的商户来缓解消息队列积压的问题,经线...

    Java架构师必看
  • 随笔

    如果说单单只是身体上的疲惫,那么回到家多休息休息还是可以缓解的。但是,心理上的疲惫,我却不知道该怎么去缓释。

    用户4784594
  • Python转换HTML为PDF方案合集,你中意哪种?

    将 HTML 网页转换为 PDF 是很多人常见的一个需求,在浏览器上,我们可以通过浏览器的“打印”功能直接将网页打印输出为 PDF。

    州的先生
  • concrrent类下 BlockingDeque 下 自己实现代码编写

      java6增加了两种容器类型,Deque和BlockingDeque,它们分别对Queue和BlockingQueue进行了扩展。 Deque是一个双端队...

    小勇DW3

扫码关注云+社区

领取腾讯云代金券