python-(6-4-3)爬虫---re解析案例

news2024/11/14 1:12:48

文章目录

  • 一 需求
  • 二 总体思路
    • 1)从网址定位到`2022必看热片`
    • 2)从`2022必看热片`定位到子页面的链接地址
    • 3)请求子页面的链接地址,拿到我们想要的下载地址
  • 三 分析步骤
    • 1)从网址定位到`2022必看热片`
    • 2)从`2022必看热片`定位到子页面的链接地址
    • 3)请求子页面的链接地址,拿到我们想要的下载地址
  • 四 完整代码

一 需求

在某个电影网站,爬取2022必看热片中具体的电影资源,并得到其下载地址

在这里插入图片描述

二 总体思路

1)从网址定位到2022必看热片

2)从2022必看热片定位到子页面的链接地址

3)请求子页面的链接地址,拿到我们想要的下载地址

三 分析步骤

1)从网址定位到2022必看热片

首先是获取网页的资源信息。

获取URL网页。

再利用requets获取网页内容。在这里由于该网站设立了相关防火墙等安全策略,于是我们要添加相关参数,取消安全验证。

最后打印相关的页面信息资源。

上述环节可以参考笔者之前的文章。
python-(6-3-1)爬虫—requests入门(基于get请求)

这时我们会发现报错信息。
在这里插入图片描述
大概意思是,获取该网站数据时,对数据流编码和解码的方式发生了错误。于是我们需要设置本地的字符集编码方式。

这时打开网页的源代码,在最上方我们可以找到爬取的网页的编码方式:charset=gb2312

在这里插入图片描述
因此,我们需要在pycharm中添加几行信息。(被框住的内容)
在这里插入图片描述
这样我们就能解决字符集编码以及最后的乱码问题。

2)从2022必看热片定位到子页面的链接地址

接着,打开网页源代码。

按住ctrl+F,搜索2022必看热片,进行内容定位。

在这里插入图片描述

接下来利用正则表达匹配我们需要的内容。
如下图所示,我们从2022必看热片开始,一直到<ul>是不需要的,接着一直到</ul>中间的内容是需要我们提取的内容。

在这里插入图片描述
于是代码就很明朗了。

在这里插入图片描述

这里的re知识不作过多讲解,如果不太清楚,可以查看笔者写的文章。
python-(6-4-1)爬虫—利用re解析获得数据信息

接下来,我们要知道,每一个子页面,背后一定有一个 URL 地址,并且都不一样。

页面源代码中,每一个 a 标签,都代表一个超链接。

在这里插入图片描述

而每一个超链接,跳转的URL都是后面跟随的href中。

在这里插入图片描述

顺便一提,后面的title是鼠标放在超链接上面时,浮现的文字。

在这里插入图片描述

所以,我们需要的是herf后面的内容。

在这里插入图片描述

于是,我们就得到了每一个想要获取的电影的完整URL,即domainitt拼接起来。

在这里插入图片描述

最后我们的代码如下:

在这里插入图片描述

3)请求子页面的链接地址,拿到我们想要的下载地址

接下来就要获取子链接中的片名和下载链接,利用正则表达式。

在这里插入图片描述

在片名和下载地址之间,有一长串的内容,这么大的内容我们是不需要的。

在这里插入图片描述

最后再接收这些爬取到的数据,任务完成。

四 完整代码

# -*- coding: gb2312 -*-
import requests
import sys
import io
import re

# 改变标准输出的默认编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb2312')

domain = 'https://www.dytt89.com'

headers = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36"
}

# verify=False 去掉安全验证
response = requests.get(url=domain,verify=False)

# 指定字符集
response.encoding = 'gb2312'

# 此处是测试获取到的内容是否有乱码
#print(response.text)

# 拿到ul里面的li
# 用正则去匹配"2022必看热片"下面的内容
obj1 = re.compile(r"2022必看热片.*?<ul>(?P<ul>.*?)</ul>",re.S)
# 用正则去匹配子链接
obj2 = re.compile(r"<a href='(?P<href>.*?)'", re.S)
# 用正则去匹配电影名和下载地址
obj3 = re.compile(r'◎片  名(?P<movie>.*?)<br />.*?<td '
                  r'style="WORD-WRAP: break-word" bgcolor="#fdfddf"><a href="(?P<download>.*?)">',re.S)

# 从返回结果中获取我们想要匹配的内容
result1 = obj1.finditer(response.text)

# 存放子页面的链接
child_href_list = []

# 得到匹配的一个结果
for it in result1:
    ul = it.group('ul')

    # 提取子页面链接
    result2 = obj2.finditer(ul)
    for itt in result2:

        # 拼接子页面的URL
        child_href = domain + itt.group('href')

        # 将子页面的链接保存起来
        child_href_list.append(child_href)

# 提取子页面的内容
for child_url in child_href_list:
    child_resp = requests.get(url=child_url,verify=False)
    child_resp.encoding = 'gb2312'
    result3 = obj3.search(child_resp.text)
    print(result3.group("movie"))
    print(result3.group("download"))
    # break # 测试使用时开启
    

# 关闭请求响应的连接
response.close()

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

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

相关文章

开关电源环路稳定性分析(05)-传递函数

大家好&#xff0c;这里是大话硬件。 经过前面4篇文章的梳理&#xff0c;估计很多人已经等不及了&#xff0c;什么时候可以开始环路的分析。为了尽快进入到大家关心的部分&#xff0c;这一讲我们正式进入环路分析的第一部分——传递函数。 传递函数&#xff0c;简单的理解就是…

立体车库管理系统

1、立体车库主界面 左侧为菜单栏中间为监视页面上方为实时报警页面&#xff0c;上方第二页为设备指令&#xff0c;第三页为升降机监测&#xff0c;第三页为穿梭车监测2、立体车库设备状态显示 通用状态显示升降机1#2#和穿梭车1#2#3#的缓存指令编号&#xff0c;点击按钮可以清楚…

【设计模式】32.结构型模式-组合模式(Composite)

一、描述 首先&#xff0c;看一个数据结构&#xff1a; 在平时开发过程中&#xff0c;我们的菜单目录、文件夹目录等都有类似如上的实体结构&#xff0c;其中composite代表父级节点&#xff0c;leaf代表叶子节点&#xff0c;composite可以有子节点&#xff0c;但是leaf下没有…

一文读懂ChatGPT模型原理

&#xff08;本文是ChatGPT原理介绍&#xff0c;但没有任何数学公式&#xff0c;可以放心食用&#xff09; 前言 这两天&#xff0c;ChatGPT模型真可谓称得上是狂拽酷炫D炸天的存在了。一度登上了知乎热搜&#xff0c;这对科技类话题是非常难的存在。不光是做人工智能、机器学习…

ORB-SLAM2 ---- Tracking::TrackWithMotionModel函数

目录 1.函数作用 2.步骤 3.code 4.函数解释 4.1 更新上一帧的位姿&#xff1b;对于双目或RGB-D相机&#xff0c;还会根据深度值生成临时地图点 4.2 根据之前估计的速度&#xff0c;用恒速模型得到当前帧的初始位姿。 4.3 用上一帧地图点进行投影匹配&#xff0c;如果匹…

JDK版本对应其major.minor version,看这一篇就够啦(附java历史版本下载地址)

文章目录前言JDK版本对应其major versionJDK历史版本下载地址前言 今天博主在学习SpringBoot&#xff0c;启动项目时遇到这样一个问题 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project springbo…

[附源码]JAVA毕业设计企业信息安全评价系统(系统+LW)

[附源码]JAVA毕业设计企业信息安全评价系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

[附源码]Python计算机毕业设计Django小区疫情事件处理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Git学习笔记 Git Gitee GitHub GitLab

目录 Git GitHub Gitee码云 GitLab Git 概述 何为版本控制 为什么需要版本控制 集中式版本控制工具 分布式版本控制工具 Git和代码托管中心 Git命令 git init命令 git config git status 查看 git 状态 git rm --cached xx git commit -m “备注” xx git reflo…

PHP代码审计系列(二)

PHP代码审计系列&#xff08;二&#xff09; 本系列将收集多个PHP代码安全审计项目从易到难&#xff0c;并加入个人详细的源码解读。此系列将进行持续更新。 strcmp比较字符串 源码如下 <?php $flag "flag"; if (isset($_GET[a])) { if (strcmp($_GET[a], …

DBCO-PEG3-Maleimide,Mal-PEG3-DBCO,二苯并环辛炔-三聚乙二醇-马来酰亚胺

​ 中英文名&#xff1a; CAS号&#xff1a;N/A| 英文名&#xff1a;DBCO-PEG3-Maleimide&#xff0c;Mal-PEG3-DBCO |中文名&#xff1a;二苯并环辛炔-三聚乙二醇-马来酰亚胺物理参数&#xff1a; CASNumber&#xff1a;N/A Molecular formula&#xff1a;C34H38N4O8 Molecul…

[附源码]计算机毕业设计绿色生鲜Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

一键免密登录云平台!ZStack Cloud 4.5.0等你来解锁……

近日&#xff0c;ZStack Cloud 4.5.0发布&#xff0c;新增支持多种标准单点登录&#xff08;SSO&#xff09;协议。云平台现可对接OIDC/OAuth2/CAS三种协议的统一身份认证系统&#xff0c;使认证系统中的用户可一键免密登录云平台&#xff0c;大大提高了云平台的访问效率和安全…

在 Git Bash 中为 vim 设置 Dracula 配色

因为本人一直习惯了用 Jetbrains 家的产品&#xff0c;而且一直独钟 Dracula 配色&#xff0c;因此想要在 Git Bash 中为 vim 配一款 Dracula 配色。本博客将详细介绍如何为 vim 配置暗系主题 Dracula。 一、安装 Dracula 在 Dracula 的官网其实已经给出了关于如何在 vim 中配…

Pygame入门

目录一、初始化pygame环境&#xff08;一&#xff09;在pycharm中新建一个工程&#xff08;二&#xff09;安装pygame&#xff08;三&#xff09;测试安装是否成功二、pygame基础&#xff08;一&#xff09;pygame初始化&#xff08;二&#xff09;设置显示界面&#xff08;三&…

[附源码]计算机毕业设计JAVA在线二手车交易信息管理系统

[附源码]计算机毕业设计JAVA在线二手车交易信息管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; S…

《PyInstaller打包实战指南》第二十二节 单文件模式打包Playwright

第二十二节 单文件模式打包Playwright 打包示例源码下载: 请看文章末尾 版本信息: playwright==1.28.0 pyinstaller==5.3 打包系统: Windows 10 打包前我们要先运行下代码,确保没有报错: # belle.py from playwright.sync_api import sync_playwrightwith sync_playw…

【Android】 android | as | android studio 安装与使用

一、说明 1、本文重点介绍android studio的使用&#xff0c;做Android应用开发 2、主要包括&#xff1a; 下载&#xff0c;安装&#xff0c;sdk配置&#xff0c;工具使用说明 二、下载Android Studio与配置 1、下载链接 https://developer.android.google.cn/studio 2、安装 参…

特征工程特征预处理归一化与标准化、鸢尾花种类预测代码实现

一、特征预处理 特征工程目的&#xff1a;把数据转换成机器更容易识别的数据 scikit-learn&#xff1a;提供几个常见的实用程序函数和转换器类&#xff0c;以将原始特征向量更改为更适合下游估计器的表示形式。即通过一些转换函数将特征数据转换成更加适合算法模型的特征数据…

IDEA基本配置

1.设置maven 1.在File->settings->搜索maven 2.Mavan home directory--设置maven安装包的bin文件夹所在的位置 3.User settings file--设置setting文件所在的位置 4.Local repository--设置本地仓库 2.IDEA 设置代码行宽度 1.在File->settings->Editor->Code St…