python爬虫概述

news2025/3/21 5:52:36

0x00 python爬虫概述

以豆瓣的选电影模块为例,当查看源代码搜索猫猫的奇幻漂流瓶是搜不到的
在这里插入图片描述
这时服务器的工作方式应该是这样的
客户端浏览器第一次访问其实服务器端是返回的一个框架(html代码)
当客户端浏览器第二次通过脚本等方式进行访问时服务器端才返回的数据

通过浏览器自带的工具f12来进行分析,打开netwrok进行抓包,文件格式选择xhr,xhr是一种数据格式,在这里可以看到浏览器的请求和服务端的会用
在这里插入图片描述

0x01 request

request库的get和post传参方式

url='www.xxx.com'
#get 和www.xxx.com?id=1是一样的
params={"id":"1"}
request.get(params=params)
#post
data={"id":"1"}
request.post(data=data)

0x02 正则表达式,re

常用预定义字符

\d:匹配数字(0-9)
\D:匹配非数字
\w:匹配字母、数字、下划线
\W:匹配非字母、数字、下划线
\s:匹配空白字符
\S:匹配非空白字符

常用量词

.:匹配任意单个字符(除换行符)
^:匹配字符串开头
$:匹配字符串结尾
*:匹配前一个字符0次或多次
+:匹配前一个字符1次或多次
?:匹配前一个字符0次或1次
[]:匹配括号内的任意一个字符
[^]:匹配非括号内的任意一个字符
|:匹配两个表达式中的任意一个

贪婪匹配:尽可能多的进行匹配

.*

非贪婪匹配:尽可能少的进行匹配

.*?

尽可能多的匹配,匹配了一个

import re
str1="<div>12346</div><div>789456</div>"
pattern=re.compile(r"<div>.*</div>")
result=re.findall(pattern=pattern,string=str1)
print(result)

在这里插入图片描述

尽可能少的匹配,匹配了两个

import re
str1="<div>12346</div><div>789456</div>"
pattern=re.compile(r"<div>.*</div>")
result=re.findall(pattern=pattern,string=str1)
print(result

)

在这里插入图片描述

re.findall 匹配所有符合正则表达式的内容
re.search 匹配第一次符合正则表达式的内容
re.match 只在开头匹配符合正则表达式的内容,相当于加了一个^
re.finditer 返回一个迭代器,需要循环取出数据

import re
str1="<div>12346</div><div>789456</div>"
#加了括号是采用分组的方式
pattern=re.compile(r"<div>(.*?)</div>") 
result=re.finditer(pattern=pattern,string=str1)
for i in result:
    print(i.group())

在这里插入图片描述
给分组起一个名字

import re
str1="<div>12346</div><div>789456</div>"
#给分组起一个名字
pattern=re.compile(r"<div>(?P<id>.*?)</div>")
result=re.finditer(pattern=pattern,string=str1)
for i in result:
    print(i.group("id"))

在这里插入图片描述

0x03 re爬取豆瓣top250

1.爬取页面原代码,需要查看源代码是否包含了页面数据,没包含需要进行分析,进行f12,network抓包分析
2.使用re正则匹配数据
3.保存数据

import re
import requests
#下方的正则分别匹配电影名称,评分,评论
pattern=re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<p class="quote">.*?<span>(?P<comment>.*?)</span>',re.S)#re.S匹配换行符
headers={"User-Agent":
    "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Mobile Safari/537.36"}
for id in range(0,46,15):
    url = f"https://movie.douban.com/top250?start={id}"
    rep = requests.get(url, headers=headers)
    result = re.finditer(pattern,rep.text)
    with open("2.txt","a+",encoding='utf-8') as f:
        for result_list in result:
            name=result_list.group("name")
            score=result_list.group("score")
            comment=result_list.group("comment")
            f.write(f"{name},{score},{comment}\n")

在这里插入图片描述

在写评论的时候遇到一个问题,一直读不出评论,发现是正则写错了,在p和span标签之间有许多空格

<p class="quote">.*?<span>(?P<comment>.*?)</span>#正确的
<p class="quote"><span>(?P<comment>.*?)</span>#错误的

在这里插入图片描述

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

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

相关文章

【C++】STL库面试常问点

STL库 什么是STL库 C标准模板库&#xff08;Standard Template Libiary&#xff09;基于泛型编程&#xff08;模板&#xff09;&#xff0c;实现常见的数据结构和算法&#xff0c;提升代码的复用性和效率。 STL库有哪些组件 STL库由以下组件构成&#xff1a; ● 容器&#xf…

Qt 控件概述 QWdiget 1.1

目录 qrc机制 qrc使用 1.在项目中创建一个 qrc 文件 2.将图片导入到qrc文件中 windowOpacity&#xff1a; cursor 光标 cursor类型 自定义Cursor font tooltip focusPolicy styleSheet qrc机制 之前提到使用相对路径的方法来存放资源&#xff0c;还有一种更好的方式…

C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)

BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载-CSDN博客 前两天写个这个&#xff0c;每次开机关机后要重来一遍很麻烦的索性写个自动化。 先还是按照上面的教程自己制作一遍&#xff0c;留下Luck 以及 路由器相关的 端口记录信息。 &#xff08;因为自…

1-1 MATLAB深度极限学习机

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 参考[1]魏洁.深度极限学习机的研究与应用[D].太原理工大学[2023-10-14].DOI:CNKI:CDMD:2.1016.714596. 目录 0.引言 1.ELM-AE实现 2.DE…

MyBatis源码分析のSql执行流程

文章目录 前言一、准备工作1.1、newExecutor 二、执行Sql2.1、getMappedStatement2.2、query 三、Cache装饰器的执行时机四、补充总结 前言 本篇主要介绍MyBatis解析配置文件完成后&#xff0c;执行sql的相关逻辑&#xff1a; public class Main {public static void main(Str…

Java 大视界 -- Java 大数据中的知识图谱可视化与交互分析技术(141)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

万字长文详解|蚂蚁数据湖深度探索与业务应用实践

作者介绍&#xff1a;黄超傑&#xff0c;蚂蚁数据智能部实时数据团队数据研发工程师&#xff0c;致力于数据湖技术在蚂蚁落地应用、蚂蚁广告实时数仓建设、蚂蚁数据成本治理等工作。 在开始之前 如果&#xff1a; 你想要提升数据时效&#xff0c;能够接受分钟级延迟你好奇准实…

网络空间安全(36)数据库权限提升获取webshell思路总结

一、获取数据库访问权限 寻找漏洞&#xff1a; SQL注入&#xff1a;这是最常见的方法之一。攻击者通过SQL注入漏洞&#xff0c;可以在数据库执行任意SQL语句&#xff0c;从而获取数据库中的数据&#xff0c;甚至可能获取数据库的访问权限。配置文件泄露&#xff1a;有时&#x…

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中&#xff0c;Prompt的使用非常的关键。原来&#xff0c;我对Prompt的理解不深&#xff0c;觉得Prompt的产生并不是很有必要。但是&#xff0c;自从使用了火山方舟中的“Prompt优解”之后&#xff0c;感受加深了&#xff0c;觉得Prompt是我们和大模型…

AI助力临床诊疗:AI工具帮助确认病情

在临床诊疗中&#xff0c;准确确认病情是治疗成功的关键。然而&#xff0c;传统的诊疗方法往往依赖医生的经验和有限的检查手段&#xff0c;容易出现误诊或漏诊的情况。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI工具在临床诊疗中的应用逐渐崭露头角…

【平台优化】大数据集群一个客户端参数引起的任务性能差的问题

大数据集群一个客户端参数引起的任务性能差的问题 背景介绍排查过程任务慢的具体原因Executor中数据内存往磁盘溢写结果数据写入分区路径 分析解决方案 结语&思考 背景介绍 随着业务量不断扩大&#xff0c;平台逐步发展成HDFS多联邦的架构&#xff0c;这个过程中&#xff…

【OCR】总结github上开源 OCR 工具:让文字识别更简单

前言 在数字化的时代&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术成为了我们处理文档、图像文字信息的得力助手。它能够将图像中的文字信息转换为可编辑和可处理的文本数据&#xff0c;极大地提高了信息处理的效率。今天&#xff0c;我要给大家介绍一些优秀的开源…

Jmeter使用之http请求默认值

一、添加【HTTP请求默认值】 1、添加方式 【线程组】---->右击【添加】---->【配置元件】---->【HTTP请求默认值】 2、作用 在发送http请求的时候&#xff0c;自带默认值设置的参数&#xff08;常用&#xff1a;【协议】、【服务器名称或IP】、端口号、内容编码&…

【QT】】qcustomplot的初步使用二

功能预期&#xff1a; 在简单显示曲线&#xff08;&#xff09;基础上加功能&#xff1a; 1.在曲线区域里&#xff0c;X轴可以随鼠标滚轮变化将图像缩放、随鼠标左键进行曲线移动&#xff1b; 2.在曲线区域里&#xff0c;Y轴的量程可以随Y轴数据大小自适应&#xff1b; 3.可以…

让 Google Play 成为助力 PC 游戏增长的最佳平台

作者 / Google Play 游戏副总裁兼总经理 Aurash Mahbod 我们正在加强多平台游戏产品&#xff0c;并将在今年的游戏开发者大会 (GDC) 上发布激动人心的消息。我们将为用户带来更多游戏&#xff0c;提供更多跨设备畅玩游戏的方式&#xff0c;并进一步优化游戏体验。在游戏开发者大…

路径问题(greedy):地下城游戏

题目描述&#xff1a; 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…

electron框架(3.0)主程序与桥梁与渲染,以及之间的通信

每个页面程序通过渲染和主进程通信&#xff0c;主进程根据需求调用Native Api来实现功能。 实际&#xff0c;每个页面和主程序通信时&#xff0c;需要建个桥梁来管理它们的通信&#xff0c;preload.js(自己创建)&#xff0c;来管理实现通信。 ----创建preload.js定义桥梁js&a…

JS—原型与原型链:2分钟掌握原型链

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–原型三–原型链 二. 原型 什么是原型&#xff1f; 每个JavaScript对象都有一个原型&#xff0c;这个原型也是一个对象。比方说 function Person(name) {this.name name; } let person new Person(&quo…

Canal 解析与 Spring Boot 整合实战

一、Canal 简介 1.1 Canal 是什么&#xff1f; Canal 是阿里巴巴开源的一款基于 MySQL 数据库增量日志解析&#xff08;Binlog&#xff09;中间件&#xff0c;它模拟 MySQL 的从机&#xff08;Slave&#xff09;行为&#xff0c;监听 MySQL 主机的二进制日志&#xff08;Binl…

图论——Prim算法

53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…