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

09.正则解析爬取数据

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

1.目标网站

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

2.具体实现

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

from urllib import request

url = '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 requests

headers = {
    '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
就具有了一个表格的结构,可以用于存储和处理数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle 数字或者小数格式化

select trim(. from to_char(1,fm9999990.9999)),trim(. from to_char(0.1,fm9999990.9999)) from dual

yolov8-obb 旋转目标检测 瑞芯微RKNN芯片部署、地平线Horizon芯片部署、TensorRT部署

特别说明&#xff1a;参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 折腾旋转目标检测的小伙伴们看过来&#xff0c;yolov8旋转目标检测部署…

使用高德地图JS API 开发一些常见使用问题(急救包)

本文记录开发使用高德地图JS API 开发一些常见使用问题 API文档 &#x1f449;传送门 关于如何引入高德地图JS API方式 请移步前面文章&#x1f449;使用高德地图JS API 开发一些常见使用方法&#xff08;急救包&#xff09; 前篇&#x1f449;: 使用高德地图JS API 开发——…

面试官:Spring 启动过程是什么样的?详细讲讲你自己的理解!

引言&#xff1a;在面试中&#xff0c;对于 Java 开发者来说&#xff0c;掌握 Spring 框架的原理和使用是至关重要的。其中&#xff0c;了解 Spring 的启动流程、循环依赖问题的解决方法以及与设计模式相关的内容是常见的面试题目。 题目 面试官&#xff1a;Spring 启动过程是…

Element-ui使用上传时弹框选择文件类型

实现效果 1&#xff0c;点击上传&#xff0c;上传文件&#xff1b; 2&#xff0c;选择文件&#xff1b; 3&#xff0c;弹框选择文件类型&#xff1b; 4&#xff0c;选择类型后确定上传&#xff1b; 一&#xff0c;上传 跳过&#xff1b; 二&#xff0c;定义弹框下拉框…

这么好看的AI摄影写真,用Stable Diffusion 即可轻松完成,想要什么风格都可以!

大家好&#xff0c;我是向阳。 今天给大家分享一下如何用AI绘画工具Stable Diffusion 制作摄影奇幻写真&#xff0c;本次教程很简单&#xff0c;跟着我&#xff0c;你也能快速上手&#xff01;学会了&#xff0c;就去尝试生成一套自己的AI写真吧 AI工具Stable Diffusion 和 教…

Python 实现反转密码加密

反转密码加密是通过反向输出消息进行加密。如&#xff0c;‘Hi,boy!’通过反转加密就会变成 ‘!yob,iH’。加解密的过程是一样的&#xff0c;解密是需要将密文再次反转过来既可以得到原文内容了。 反转加密是一种比较弱的加密方式&#xff0c;一般我们通过一些密文既可以发现它…

【简单学习一下卷积神经网络】-基于肆十二的高考例子

前言一、白话卷积神经网络总结 前言 【参考】 主要是P2⇨手把手教你用tensorflow2训练自己的数据集 -------2024/5/4 一、白话卷积神经网络 高考前需要大量的做题训练---->相当于数据集。 做题过程中【于标准答案进行比对】产生的错题⇨loss&#xff08;误差&#xff09; 回…

RaspAP:轻松实现树莓派无线 AP

RaspAP 是一个可以将树莓派轻松部署成无线 AP&#xff08;Access Point&#xff09;的软件方案&#xff0c;具有一套响应式的 WebUI 来控制 WiFi&#xff0c;用起来和家用路由器一样方便。RaspAP 可以运行在 Raspbian 上&#xff0c;只需要先给树莓派安装好 Raspbian 系统&…

LeetCode-3067. 在带权树网络中统计可连接服务器对数目【树 深度优先搜索 数组】

LeetCode-3067. 在带权树网络中统计可连接服务器对数目【树 深度优先搜索 数组】 题目描述&#xff1a;解题思路一&#xff1a;dfs&#xff0c;针对当前服务器i有for i, gi in enumerate(g):&#xff0c;不断dfs其的邻居节点for y, wt in gi:&#xff0c;dfs可以计算得到邻居y的…

解决 windows11 文件夹中右键没有出现Git Bash Here的问题?

电脑刚从w10升级到了w11&#xff0c;想要从git拉去项目&#xff0c;但是发现右键菜单下找不到git&#xff0c;如图&#xff1a; 百度了一下&#xff0c;看了看这位大佬 这篇文章 的配置&#xff0c;确实能打开&#xff0c;但右键菜单下还是没有&#xff0c;于是继续搜寻问题的…

Kimichat使用案例008:查找比亚迪、特斯拉等电动车产业链相关股票(用kimichat炒股)

文章目录 一、介绍二、Kimi操作内容三、Kimi输出内容四、kimi操作内容五、Kimi输出内容一、介绍 kimichat可以联网检索,搜索结果更加准确、智能。 二、Kimi操作内容 在kimichat中输入提示词: 找出同时在比亚迪产业链和特斯拉产业链的企业 三、Kimi输出内容 四、kimi操作内容…

成功解决“ModuleNotFoundError: No module named ‘tensorflow_datasets‘”错误的全面指南

成功解决“ModuleNotFoundError: No module named ‘tensorflow_datasets’”错误的全面指南 在Python编程和深度学习项目中&#xff0c;tensorflow_datasets&#xff08;通常简称为tfds&#xff09;是一个非常重要的库&#xff0c;它提供了大量现成的数据集&#xff0c;方便…

日本指数实时API接口

日本 指数 实时API接口 # Restful API https://tsanghi.com/api/fin/index/JPN/realtime?token{token}&ticker{ticker}指定指数代码&#xff0c;获取该指数的实时行情&#xff08;开、高、低、收、量&#xff09;。 更新周期&#xff1a;实时。 请求方式&#xff1a;GET。…

【ARM Cache 与 MMU 系列文章 7.7 – ARMv8/v9 MMU Table 表分配原理及其代码实现 1】

文章目录 MMU Table 表分配原理及其代码实现虚拟地址空间 Region的配置系统物理地址位宽获取 MMU Table 表分配原理及其代码实现 假设当前系统中需要映射多个region&#xff0c;其中第一个要映射的region虚拟地址范围是0x0000_0000 -- 0x8000_0000 一共2G的大小。MMU默认最大支…

探索大模型技术及其前沿应用——TextIn文档解析技术

前言 中国图象图形大会&#xff08;CCIG 2024&#xff09;于近期在西安召开&#xff0c;此次大会将面向开放创新、交叉融合的发展趋势&#xff0c;为图像图形相关领域的专家学者和产业界同仁&#xff0c;搭建一个展示创新成果、展望未来发展&#xff0c;集高度、深度、广度三位…

劳动仲裁避坑指南(收集证据仲裁流程)

前言&#xff1a; 常在河边走&#xff0c;哪能不挨刀。 在大环境不好的滚滚洪流中&#xff0c;老实的IT打工人&#xff0c;一波波的被裁员。随时准备一些材料&#xff0c;特附上准备清单。 参考一些资料&#xff1a;2023年A股上市公司&#xff0c;裁员榜&#xff1a;1、 中国…

el-table动态配置显示表头

在实际工作中&#xff0c;会遇到动态配置e-table表头的情况&#xff0c;如下方法可以实现&#xff1a; // 要展示的列 column: [{prop: name, name: 名称 }, {prop: age, name: 年龄 }, {prop: sex, name: 性别 }, {prop: address, name: 地址 }, {prop: city, name: 城市 }]…

UFS协议—新手快速入门(二)【5-6】

目录 五、UFS协议栈 六、UFS技术演进与详解 1、UFS应用层 设备管理器 任务管理器 2、UFS传输层 3、UFS互联层 UFS协议—新手快速入门&#xff08;一&#xff09;【1-4】 五、UFS协议栈 UFS&#xff08;Universal Flash Storage&#xff09;协议是针对固态存储设备&…

【面试干货】 非关系型数据库(NoSQL)与 关系型数据库(RDBMS)的比较

【面试干货】 非关系型数据库&#xff08;NoSQL&#xff09;与 关系型数据库&#xff08;RDBMS&#xff09;的比较 一、引言二、非关系型数据库&#xff08;NoSQL&#xff09;2.1 优势 三、关系型数据库&#xff08;RDBMS&#xff09;3.1 优势 四、结论 &#x1f496;The Begin…