09.爬虫---正则解析爬取数据

09.正则解析爬取数据

    • 1.目标网站
    • 2.具体实现
    • 3.正则表达式分析
    • 4.完整代码并存入表格

1.目标网站

直达目标网站 https://movie.douban.com/chart
在这里插入图片描述

2.具体实现

我们来拿取一下上面网页的代码如下:

from urllib import requesturl = 'https://movie.douban.com/chart'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36'
}
req = request.Request(url=url, data=None, headers=headers)
response = request.urlopen(req)
print(response.read().decode('utf-8'))

结果如下:
在这里插入图片描述
接下来就是对拿到的内容进行解析想要的数据:
在这里插入图片描述
经过观察数据规律,可以发现如上图的html文档规律,按照以上规律去解析数据

3.正则表达式分析

在这里插入图片描述
上图中

  • | 标记的地方用 \s* 替换
  • 标记的地方用(.*?)替换
  • \s*来让数据在一行,而不影响正则表达式的使用。\s*的作用是匹配零个或多个空格字符(包括空格、制表符、换行符等)。它常用于正则表达式中,用于匹配任意数量的空格字符。
  • .*? 表示非贪心算法,表示要精确的配对。作用是匹配任意数量的任意字符,但是会尽可能少地匹配,直到下一个匹配字符出现
    替换后得到了下面的内容:
'<tr class="item">\s*''<td width="100" valign="top">\s*''<a class="nbg" href="(.*?)"  title="(.*?)">\s*''<img src="(.*?)" width="75" alt="(.*?)" class=""/>\s*''</a>\s*''</td>\s*''<td valign="top">\s*''<div class="pl2">\s*''<a href="(.*?)"  class="">\s*''(.*?)\s*''(.*?) <span style="(.*?)">(.*?)</span>\s*''</a>\s*(.*?)\s*''<p class="pl">(.*?)</p>\s*''<div class="star clearfix">\s*''<span class="(.*?)"></span>\s*''<span class="rating_nums">(.*?)</span>\s*''<span class="pl">(.*?)</span>\s*''</div>\s*''</div>\s*''</td>\s*'
'</tr>'

4.完整代码并存入表格

import re
import csv
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}url = f'https://movie.douban.com/chart'f = open('C:\\Users\\DY\\Desktop\\data.csv', 'w+', encoding='gbk', newline='')
csv_f = csv.writer(f)
csv_f.writerow(['1', '2', '3', '4', '5','6', '7', '8', '9', '10','11','12','13'])html = requests.get(url, headers=headers)data = re.findall('<tr class="item">\s*''<td width="100" valign="top">\s*''<a class="nbg" href="(.*?)"  title="(.*?)">\s*''<img src="(.*?)" width="75" alt="(.*?)" class=""/>\s*''</a>\s*''</td>\s*''<td valign="top">\s*''<div class="pl2">\s*''<a href="(.*?)"  class="">\s*''(.*?)\s*''(.*?) <span style="(.*?)">(.*?)</span>\s*''</a>\s*(.*?)\s*''<p class="pl">(.*?)</p>\s*''<div class="star clearfix">\s*''<span class="(.*?)"></span>\s*''<span class="rating_nums">(.*?)</span>\s*''<span class="pl">(.*?)</span>\s*''</div>\s*''</div>\s*''</td>\s*''</tr>',html.text)
for i in data:csv_f.writerow(i)print(i)
f.close()
f = open('C:\\Users\\DY\\Desktop\\data.csv', 'w+', encoding='gbk', newline='')
csv_f = csv.writer(f)
csv_f.writerow(['1', '2', '3', '4', '5','6', '7', '8', '9', '10','11','12','13'])

作用是打开一个名为 data.csv 的文件(如果不存在则创建),并使用 gbk 编码方式进行读写操作,同时设置换行符为
‘\n’。然后创建一个 csv.writer 对象 csv_f,用于将数据写入到文件中。接下来,使用 csv_f.writerow()
方法将包含列名的一行写入到文件中,该行包含了13个列的名称。这样,文件 data.csv
就具有了一个表格的结构,可以用于存储和处理数据。

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

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

相关文章

解决 DBeaver 查询时不刷新数据,需要重新连接才会刷新,有缓存一样

DBeaver 查询时总是第一次有数据&#xff0c;再次执行查询数据不会刷新&#xff0c;像是有缓存一样&#xff0c;需要重新连接再查询才会刷新&#xff0c;知道肯定是哪里设置的不对&#xff0c;但是一直没找到&#xff0c;实在是重连太烦了&#xff0c;多次尝试终于找到了设置。…

什么是序列化?Java如何实现序列化?

一、序列化的定义 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中&#xff0c;序列化是将一个对象转换成一个字节序列&#xff0c;以便可以将其写入到磁盘、通过网络发送到另一个运行Java的虚拟机&#xff0c;或者将其永久地保存在数据库中。反序列化则…

【数据结构】从前序与中序遍历,或中序与后序遍历序列,构造二叉树

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持&#xff01; 首先&#xff0c;根据先序遍历可以确定根节点E&#xff0c;再在中序遍历中通过E确定左树和右数 &#xff1b; 设立inBegin和inEnd&#xff0c;通过这两个参数的游走&#xff0c;来进行子树的创建&a…

Spring 过滤器:OncePerRequestFilter 应用详解

在Web应用中&#xff0c;过滤器&#xff08;Filter&#xff09;是一个强大的工具&#xff0c;它可以在请求到达目标资源之前或响应返回客户端之前对请求或响应进行拦截和处理。然而&#xff0c;在某些情况下&#xff0c;我们可能希望确保过滤器逻辑在一次完整的HTTP请求中仅执行…

ApiJson简单使用

前言 最近在正式迭代中插入了一个大屏演示项目&#xff0c;因为后端开发人员任务都安排满了&#xff0c;而演示项目逻辑比较简单&#xff0c;大多是直接查表就能搞定&#xff0c;所以只能想办法让前端直接和数据库交互&#xff0c;增加开发速度。在找工具时发现了ApiJson。尝试…

详解redis单线程设计思路

写在文章开头 我们都知道redis是一个基于单线程实现高效网络IO和键值对读写操作的内存数据库,本文将从源码的角度剖析一下redis高效的单线程设计。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源项目 Java Guide 的维护者之一…

基于.NetCore和ABP.VNext的项目实战六:JWT

添加小绿锁,Nuget包下载Swashbuckle.AspNetCore.Filters,在扩展方法AddSwagger(this IServiceCollection services)中调用。 public static IServiceCollection AddSwagger(this IServiceCollection services){return services.AddSwaggerGen(options =>{...var security …

Mac电脑重置网络命令

在Mac电脑上重置网络设置可以通过终端命令来实现。以下是几种方法&#xff0c;包括刷新DNS缓存、重置网络接口&#xff0c;以及重置Wi-Fi设置。 刷新DNS缓存 要刷新DNS缓存&#xff0c;可以使用以下命令&#xff1a; sudo dscacheutil -flushcache; sudo killall -HUP mDNSR…

一键生成迷宫-Word插件-大珩助手新功能

Word大珩助手是一款功能丰富的Office Word插件&#xff0c;旨在提高用户在处理文档时的效率。它具有多种实用的功能&#xff0c;能够帮助用户轻松修改、优化和管理Word文件&#xff0c;从而打造出专业而精美的文档。 【新功能】迷宫生成器 1、可自定义迷宫大小&#xff1b; …

jQuery写轮播图

用jQuery做轮播&#xff0c;代码比js少了很多&#xff0c;具体实现和效果看如下展示。 轮播图-jQuery 友情提示&#xff1a;写代码前准备好照片素材和jQuery包。 详细代码展示&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"…

topK 问题

topK 问题 topK二、实验内容三、数据结构设计四、算法设计五、运行结果六、程序源码 topK &#xff08;1&#xff09;实验题目 topK 问题 &#xff08;2&#xff09;问题描述 从大批量数据序列中寻找最大的前 k 个数据&#xff0c;比如从 10 万个数据中&#xff0c;寻找最大的…

conda使用

因为时不时搜索conda操作&#xff0c;就想着逐步将先前的conda使用整理在一起&#xff0c;并添加新的内容。 目录 0.简介1.常用操作场景1.1 取消终端conda自动启动 0.简介 1.常用操作场景 1.1 取消终端conda自动启动 安装conda后取消命令行前出现的base&#xff0c;取消每次…

论文阅读《SELECTIVE DOMAIN-INVARIANT FEATURE FOR GENERALIZABLE DEEPFAKEDETECTION》

作者&#xff1a;Yingxin Lai、 Guoqing Yang1、Yifan He2、Zhiming Luo、Shaozi Li 期刊&#xff1a;ICASSP-2024 目的&#xff1a;解决泛化性的问题&#xff0c;提出了3个模块 论文整体的架构图&#xff1a;&#xff08;挑选域特征不变&#xff0c;减少对图像内容或者风格…

Java面试八股之怎么降低锁竞争

怎么降低锁竞争 减少锁的持有时间&#xff1a; 尽量缩短线程持有锁的时间&#xff0c;只在必要时才获取锁&#xff0c;一旦操作完成立即释放锁。可以通过将同步代码块的范围缩小到最小必要程度来实现&#xff0c;避免在锁保护的代码块中执行耗时操作或等待操作&#xff0c;比如…

HTML+CSS+JS 选项卡导航栏

效果演示 实现了一个导航栏切换内容的效果。页面上方有一个导航栏,每个导航项都有一个圆形背景,点击导航项时,圆形背景会放大并显示对应的内容。每个内容区域都包含一个大号字母,数字会在内容区域显示时淡入。点击其他导航项时,当前内容区域会淡出并隐藏,同时新的内容区域…

JVM之【GC-可达性分析算法】

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;可达性分析算法&#xff08;Reachability Analysis&#xff09;用于垃圾收集&#xff0c;以确定哪些对象是“可达”的&#xff0c;即哪些对象仍然有用&#xff0c;哪些对象可以被回收。下面是对可达性分析算法及其底层实…

Docker 基础使用(2) 镜像与容器

文章目录 镜像的含义镜像的构成镜像的作用镜像的指令容器的含义容器的状态容器的指令 Docker 基础使用&#xff08;0&#xff09;基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使用&#xff08;2&#xff09; 镜像与容器 Docker 基础使用&#xff08;3&#xff09; 存…

【热点】老黄粉碎摩尔定律被,量产Blackwell解决ChatGPT耗电难题

6月3日&#xff0c;老黄又高调向全世界秀了一把&#xff1a;已经量产的Blackwell&#xff0c;8年内将把1.8万亿参数GPT-4的训练能耗狂砍到1/350&#xff1b; 英伟达惊人的产品迭代&#xff0c;直接原地冲破摩尔定律&#xff1b;Blackwell的后三代路线图&#xff0c;也一口气被…

【动手学深度学习】多层感知机模型选择、欠拟合和过拟合研究详情

目录 &#x1f30a;1. 研究目的 &#x1f30a;2. 研究准备 &#x1f30a;3. 研究内容 &#x1f30d;3.1 多层感知机模型选择、⽋拟合和过拟合 &#x1f30d;3.2 基础练习 &#x1f30a;4. 研究体会 &#x1f30a;1. 研究目的 多层感知机模型选择&#xff1a;比较不同多层…

使用Python绘制南丁格尔图(玫瑰图)

使用Python绘制南丁格尔图&#xff08;玫瑰图&#xff09; 南丁格尔图效果代码 南丁格尔图 南丁格尔图&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;也被称为玫瑰图或极区图&#xff0c;是一种特殊的圆形统计图&#xff0c;用于显示多个类别的数据。它是由弗洛…