首页 > 其他分享 >[案例]豆瓣电影信息爬取

[案例]豆瓣电影信息爬取

时间:2023-07-17 11:26:30浏览次数:40  
标签:__ item self 爬取 案例 豆瓣 div data class

import json
import os

import requests
from lxml import etree
from lxml.etree import _Element


class DoubanMovieSpider(object):
    def __init__(self):
        self.url = "https://movie.douban.com/chart"
        self.headers = {
            "Host": "movie.douban.com",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
        }
        # 在init时就开启一个文件的fd
        self.file = open("douban.json", "w", encoding="utf-8")

        os.environ["NO_PROXY"] = "*"
        pass

    def get_data(self):
        resp = requests.get(self.url, headers=self.headers)
        return resp.content

    def parse_data(self, data):
        """

        1、获取列表://div[@class='indent']//div/table

        2、每个项./tbody/tr[@class='item']
            2-1、项中的图片./td/a[@class='nbg']/img/@src
            2-2、项目的信息:
                1、标题:./td[@vlign='top']/div[@class='p12']/a
                2、链接:./td[@vlign='top']/div[@class='p12']/a/@href
        """
        etree_html = etree.HTML(data.decode())  # type: _Element

        table_item = etree_html.xpath("//table/tr[@class='item']")

        result_list = []
        for t_item in table_item:  # type: _Element

            temp_dict = dict()
            title = t_item.xpath("./td[@valign='top']/div/a")[0].text.strip("\n /")
            href = t_item.xpath("./td[@valign='top']/div/a/@href")[0]
            img = str(t_item.xpath("./td[@valign='top']/a[@class='nbg']/img/@src")[0])

            try:
                rating_num = t_item.xpath("./td/div/div/span[@class='rating_nums']/text()")[0]
            except:
                rating_num = "暂无评分"
            temp_dict["title"] = title
            temp_dict["href"] = href
            temp_dict["img"] = img
            temp_dict["rating_num"] = rating_num
            result_list.append(temp_dict)

        return result_list

    def save_data(self, data):
        self.file.write(json.dumps(data, ensure_ascii=False, indent=4))

    def __del__(self):
        try:
            self.file.close()
        except Exception as e:
            print(e)

    def run(self):
        data = self.get_data()
        parse_data = self.parse_data(data)
        self.save_data(parse_data)
        pass


if __name__ == '__main__':
    douban_movie = DoubanMovieSpider()
    douban_movie.run()

标签:__,item,self,爬取,案例,豆瓣,div,data,class
From: https://www.cnblogs.com/juelian/p/17559512.html

相关文章

  • [案例]贴吧爬取并获取图片
    importosimportrandomimportreimportsysimporttimeimporturllib.parseimportrequestsfromlxmlimportetreefromlxml.etreeimport_ElementclassTiebaSpider(object):BASE_DIR=os.path.dirname(__file__)def__init__(self,url,name):......
  • 初识GaussDB——GaussDB的发展历程、部署方式和企业案例
    初识GaussDB——GaussDB的发展历程、部署方式和企业案例姜殿斌2020-02-1734311.GaussDB的命名和品牌GaussDB的热点话题名字的由来:GaussDB是华为数据库产品品牌名,致敬数学家高斯(Gauss)GaussDB的品类:GaussDBT和GaussDBAGaussDBT的里程碑发布时间:2019年5......
  • r语言主成分分析案例
    R语言主成分分析案例什么是主成分分析?主成分分析(PrincipalComponentAnalysis,简称PCA)是一种常用的数据降维技术,它可以将高维数据映射到低维空间中,并保持样本之间的相对几何关系。通过主成分分析,我们可以发现数据中的主要特征,并剔除无关变量,从而简化数据分析过程。主成分分析的......
  • JVM系统优化实践(18):GC生产环境案例(一)
    生产环境中,最常见的一种案例就是OOM,也叫「内存溢出」,它表示JVM已经无法支撑业务系统的运行。而很多工程师都没有类似处理线上系统故障的经验,尤其是这种突发的故障。那么:1、为什么会OOM?(Why)2、发生什么样的OOM?(What)3、那个系统发生的OOM?(Who/Where)4、什么时候发生的OOM?(When)5、怎么排查......
  • 微信小程序项目案例
    项目目录BIJIANapp.json{"pages":["pages/home/home","pages/category/category","pages/shopcar/shopcar","pages/center/center","pages/detail/detail","pages/searc......
  • API接口技术开发分享案例,拼多多获得搜索词推荐,接口支持高并发,PHP语言演示案例,支持对语
    ​接口获取数据响应参数接入pinduoduo.item_search_suggest-获得搜索词推荐 公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_name......
  • KingbaseES V8R6集群运维案例之---single-pro模式备份
    案例说明:KingbaseESV8R6集群物理备份配置参数_target_db_style,可选single或cluster或single-pro。single对应单机模式的目标数据库实例,cluster对应集群模式的目标数据库实例,single-pro对应集群模式的每个DB节点独立备份。本案例详细描述集群架构在singl-pro模式下的备份。适用......
  • flutter状态管理案例
     FLUTTER项目中管理不同组件、不同页面之间共享的数据关系。当需要共享的数据关系达到几十上百个的时候,我们就很难保持清晰的数据流动方向和顺序了,导致应用内各种数据传递嵌套和回调满天飞。在这个时候,我们迫切需要一个解决方案,来帮助我们理清楚这些共享数据的关系,于是状态管理......
  • scrapy用法举例 (Scrapy爬取豆瓣电影Top250)
    Scrapy是一个Python的爬虫框架,用于快速开发和部署Web爬虫。它提供了一套完整的爬虫工具,包括爬虫的调度、数据下载、数据处理和存储等功能,同时也支持多线程、分布式和异步IO等高级特性。以下是Scrapy的用法介绍:1.安装ScrapyScrapy可以通过pip安装,命令如下:pipinstal......
  • 河北永宁花苑小区主入口水景雕塑 不锈钢仿真孔雀雕塑 实景案例
    河北永宁花苑小区主入口水景雕塑不锈钢仿真孔雀雕塑实景案例......