采用BeautifulSouppqQueryxpath三种方法爬取电影详情页

news2024/11/26 16:56:01

采用三个框架BeautifulSoup&&pqQuery&&xpath,爬取知名的电影网页

主要是想体验这三种框架爬同一个网页的不同。

当然具体的不同我也说不清道不明 只能是体验了一把

以下代码都是本人亲自撸

如图所示,四个位置。分别爬取 电影名字 -> 电影类别 ->  上映时间 -> 电影评分

以及点击电影名称获取特定电影的电影详情页面,如下图所示

 

  1. BeautifulSoup
def save_demo_bs4():
    """
    :return: 采用BeautifulSoup 框架爬取单页中每部电影的名称, 类别,  评分, 上映时间等信息
    """
    url = 'https://ssr1.scrape.center'
    import re
    from bs4 import BeautifulSoup
    html = requests.get(url).text
    soup = BeautifulSoup(html, 'lxml')
    dict = []
    ret = soup.find_all(class_=re.compile("el-card item m-t is-hover-shadow"))  # 找到所有的class属性为当前属性的文本
    for ret_ in ret:
        dict_ = {}
        title_ = ret_.find_all(class_=re.compile('name'))
        xiangqing_url = url + title_[0].attrs['href']  # 得到单页中每部电影的详情页面
        title_ = [i.text.replace('\n', "") for i in title_][0]
        categories_ = ret_.find_all(class_=re.compile('categories'))
        sy_date_ = ret_.find_all(class_=re.compile('m-v-sm info'))
        pingfen_ = ret_.find_all(class_=re.compile('score m-t-md m-b-n-sm'))
        pingfen_ = [i.string.replace('\n', '').replace(' ', '') for i in pingfen_][0]
        dict_['标题'] = title_
        categories_ = [i.text.replace('\n', ' ') for i in categories_]
        dict_['类别'] = categories_
        sy_date_ = [i.text.replace('\n', '') for i in sy_date_][1]
        dict_['上映时间'] = sy_date_
        dict_['评分'] = float(pingfen_)
        xiangqin_html = requests.get(xiangqing_url).text
        soup_xiangqin = BeautifulSoup(xiangqin_html, 'lxml')
        ret__ = soup_xiangqin.find_all(class_=re.compile("drama"))  # 找到所有的class属性为当前属性的文本
        for x in ret__:
            for idx, y in enumerate(x.children):
                if idx == 2:
                    xiangqing = y.text.replace('\n', '').replace(' ', '')
        dict_['电影详情'] = xiangqing
        dict.append(dict_)

代码的运行效果图如下

2. XPATH

def save_demo_xpath():
    """
    :return: 采用xpath框架爬取单页中每部电影的名称, 类别,  评分, 上映时间等信息
    """
    url = 'https://ssr1.scrape.center'
    import requests
    from lxml import etree
    html = requests.get(url).text
    html = etree.HTML(html)
    title_xxpath = '//*[@id="index"]/div[1]/div[1]/div[{page}]/div/div/div[2]/a/h2'
    title_xxpath = '{page}'
    dict = []
    for i in range(10):
        dict_ = {}
        title_xxpath = '//*[@id="index"]/div[1]/div[1]/div[{page}]/div/div/div[2]/a/h2'.format(page=i + 1)
        title = html.xpath(title_xxpath)
        title_ = [i.text for i in title][0]
        category_xxpath = '//*[@id="index"]/div[1]/div[1]/div[{page}]/div/div/div[2]/div[1]'.format(page=i + 1)
        category_ = html.xpath(category_xxpath)
        category_ = [i.xpath('./button/span/text()') for i in category_][0]
        sy_date_xxpath = '//*[@id="index"]/div[1]/div[1]/div[{page}]/div/div/div[2]/div[2]/span[3]'.format(page=i + 1)
        sy_date_ = html.xpath(sy_date_xxpath)
        sy_date_ = [i.text for i in sy_date_][0]
        pingfen_xxpath = '//*[@id="index"]/div[1]/div[1]/div[{page}]/div/div/div[3]/p[1]'.format(page=i + 1)
        pingfen_ = html.xpath(pingfen_xxpath)
        pingfen_ = [i.text.replace("\n", "").replace(" ", "") for i in pingfen_][0]
        dict_['类别'] = category_
        dict_['标题'] = title_
        dict_['上映时间'] = sy_date_
        dict_['评分'] = pingfen_
        xiangqing_url_ = html.xpath('//*[@id="index"]/div[1]/div[1]/div[{page}]/div/div/div[2]'.format(page=i+1))
        xiangqing_url_ = url + [i.xpath('./a/@href') for i in xiangqing_url_][0][0]
        html_xiangqin = requests.get(xiangqing_url_).text
        html_xiangqin = etree.HTML(html_xiangqin)
        xiangqing = html_xiangqin.xpath('//*[@id="detail"]/div[1]/div/div/div[1]/div/div[2]/div[4]/p')
        dict_['电影详情'] = [i.text.replace('\n', '').replace(' ', '') for i in xiangqing][0]
        dict.append(dict_)
        print(dict_)
    print(dict)

代码效果图

 

3.pqQuery 

def save_demo_pq():
    """
    :return: 采用pyQuery 框架爬取单页中每部电影的名称, 类别,  评分, 上映时间等信息
    """
    url = 'https://ssr1.scrape.center'
    from pyquery import PyQuery as pq
    import requests

    html = requests.get(url).text
    doc = pq(html)
    items = doc('.el-card .el-card__body .el-row ').items()
    dict = []
    for item in items:
        dict_ = {}
        title = item.find('a > h2').text()
        categories = item.find('.categories .el-button span').items()
        cate_list = [i.text() for i in categories]
        sy_date = item.find('.m-v-sm.info')
        sy_date = [i.text() for i in sy_date('.m-v-sm span').items()][-1]
        pingfen = item.find('.el-col .score').items()
        pingfen = [i.text() for i in pingfen][0]
        dict_['评分'] = float(pingfen)
        dict_['类别'] = cate_list
        dict_['标题'] = title
        dict_['上映时间'] = str(sy_date).replace("上映", "").replace(" ", "")
        dict.append(dict_)
        xiangqing_utl_ = item.find('a').attr('href')
        xiangqing_utl_ = url + xiangqing_utl_
        html_xiangqing = requests.get(xiangqing_utl_).text
        doc_xiangqing = pq(html_xiangqing)
        xiangqing = [i.find('p').text() for i in doc_xiangqing.find('.drama').items()][0]
        dict_['影片详情'] = xiangqing
        print(dict_)
    print(dict)

代码效果图

综合来讲 我觉得pqQuery 用起来更顺手一点 

完毕 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker 安装 Node-RED

Node-RED 是构建物联网应用程序的一个强大工具,使用可视化编程方法,连接起来执行任务。而homeassistant是家居智慧中枢,本文介绍如何安装Node-RED及HASS的插件 1、拉取镜像 docker pull nodered/node-red # 2、部署镜像 创建目录 mkidr -…

微调文本到图像扩散模型新方法DreamBooth,实现主题驱动生成(CVPR 2023)

来源:投稿 作者:橡皮 编辑:学姐 论文链接: https://arxiv.org/pdf/2208.12242 项目主页:https://dreambooth.github.io/ 图1. 只需要拍摄某个主题(左)的几张图像(通常为 3-5 张&…

Java守护线程的理解及应用

在Java中有两类线程,分别是User Thread(用户线程)和Daemon Thread(守护线程) 。 用户线程很好理解,我们日常开发中编写的业务逻辑代码,运行起来都是一个个用户线程。而守护线程相对来说则要特别…

Java发送(QQ)邮箱、验证码发送

前言 使用Java应用程序发送 E-mail 十分简单,但是首先需要在项目中导入 JavaMail API 和Java Activation Framework (JAF) 的jar包。 菜鸟教程提供的下载链接: JavaMail mail.jar 1.4.5JAF(版本 1.1.1) activation.jar 1、准备…

C语言“牵手”拼多多商品详情数据方法,拼多多商品详情API接口,拼多多API申请指南

拼多多是中国最大的自营式电商企业,在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等。 拼多多平台的商品…

容器编排学习(十)控制器介绍与使用

一 控制器 控制器是 k8s内置的管理工具。可以帮助用户实现 Pod的自动部署、自维护、扩容、滚动更新等功能的自动化程序。 为什么要使用控制器? 有大量的 Pod需要维护管理需要维护 Pod的健康状态控制器可以像机器人一样可以替用户完成维护管理的工作 二 Deployment 1 概…

ROS学习笔记(四)---使用 VScode 启动launch文件运行多个节点

ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序(简例) 03. ROS学习笔记(三)—好用的终端Terminator 一、什么是launch文件 虽然说Terminator终端是能够比较方便直观的看运行的节点…

Spring-MVC的文件上传,下载的技术攻克

目录 一.前言 二.文件上传 文件上传的步骤: 三.文件下载 四.多文件上传 一.前言 SpringMVC的文件上传下载的主要作用是让用户能够将文件上传到服务器或从服…

消息队列基本原理和选型对比

消息队列使用场景 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,削峰填谷等问题。实现高性能、高可用、可伸缩和最终一致性架构。 解耦:多个服务监听、处理同一条消息,避免多次 rpc 调用。 异步…

计算机网络基础知识(非常详细)

1. 网络模型 1.1 OSI 七层参考模型 七层模型,亦称 OSI(Open System Interconnection)参考模型,即开放式系统互联,是网络通信的标准模型。一般称为 OSI 参考模型或七层模型。 它是一个七层的、抽象的模型体&#xff…

Web学习笔记-React(组合Components)

笔记内容转载自 AcWing 的 Web 应用课讲义,课程链接:AcWing Web 应用课。 CONTENTS 1. 创建父组件2. 从上往下传递数据3. 传递子节点4. 从下往上调用函数 本节内容是组件与组件之间的组合,例如用不同组件构成 DOM 树,以及给不同的…

看完这篇 教你玩转渗透测试靶机Vulnhub——Momentum:2

Vulnhub靶机Momentum:2渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:漏洞发现:③:文件上传漏洞利用:…

【C++基础】8. 函数

文章目录 【 1. 函数的定义 】【 2. 函数声明 】【 3. 调用函数 】【 4. 函数参数 】4.1 传值调用4.2 指针调用4.3 引用调用 【 5. 形参默认值 】【 6. lambda函数 】 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() 。可以把代码…

Fiddler工具使用汇总

Fiddler工作原理 fiddler作为一个代理服务器,跟浏览器建立连接之后,浏览器像目标服务器发送的请求都会经过fiddler代理,所以fiddler可以捕获到http(s)请求,从而可以解释、分析、甚至重写发出去的http&…

[De1CTF 2019]SSRF Me | BUUCTF

根据题目名我们知道这是一道SSRF的题目 它允许攻击者在受害服务器上发起未经授权的网络请求 分析 在buuctf上有一个提示 也就是说flag在 网站的flag.txt 访问主页 很明显是段flask代码 格式化后 from flask import Flask, request # 导入Flask和request模块 import sock…

设备管理系统的优势是什么?设备管理系统对企业运营管理有什么帮助?

传统的设备报修维护方式存在一些问题,例如指派传递速度慢和故障信息不准确等。然而,使用设备管理系统就可以轻松地解决这些问题,并且报修全流程只需短短的30秒。设备管理系统具有许多优势,首先它支持多种渠道的报修,包…

《TCP/IP网络编程》阅读笔记--进程间通信

目录 1--进程间通信 2--pipe()函数 3--代码实例 3-1--pipe1.c 3-2--pipe2.c 3-3--pipe3.c 3-4--保存信息的回声服务器端 1--进程间通信 为了实现进程间通信,使得两个不同的进程间可以交换数据,操作系统必须提供两个进程可以同时访问的内存空间&am…

初出茅庐的小李博客之数制与编码知识

模拟量与数字量: 数字量和模拟量是两种用于表示和处理不同类型数据的概念,常见于电子和计算机系统中。它们在信号处理、传感器技术、通信和控制系统中有不同的应用。 1. 数字量(Digital): 数字量是离散的&#xff0…

06文本搜索工具——grep以及正则表达式

一、grep工具的使用 可以通过返回状态码判断文件有没有这个数据,有状态码为0,没有为1。文件不存在状态码为2 -o: 二、正则表达式 1、基本正则表达式 .为匹配任意字符,..两个两个匹配任意字符,...三个三个匹配任意字符 …

群拼团接龙小程序源码功能和开发

针对微信群开发的拼团接龙小程序,有点快团团的味道。是做私域非常不错的一款小程序。 小程序基于Uniapp开发,目前适配了微信小程序。 接龙: 在小程序中可以创建自定义接龙,不需要复杂的申请流程。 商品发布: 接龙…