初始爬虫5


响应码:

数据处理: re模块(正则表达式)

re模块是Python中用于正则表达式操作的标准库。它提供了一些功能强大的方法来执行模式匹配和文本处理。以下是re模块的一些常见用法及其详细说明:

1. 基本用法
1.1 匹配模式
re.match(pattern, string):
功能:从字符串的开头开始匹配模式。
返回:一个匹配对象(Match对象)如果匹配成功,否则返回None。
示例:
python
import re
result = re.match(r'\d+', '123abc')
if result:
    print(result.group())  # 输出 '123'
1.2 搜索模式
re.search(pattern, string):
功能:扫描整个字符串并返回第一个匹配的结果。
返回:一个匹配对象(Match对象)如果匹配成功,否则返回None。
示例:
python
import re
result = re.search(r'\d+', 'abc123def')
if result:
    print(result.group())  # 输出 '123'
1.3 查找所有匹配
re.findall(pattern, string):
功能:查找所有匹配的子串并以列表形式返回。
返回:一个列表,其中包含所有匹配的字符串。
示例:
python
import re
results = re.findall(r'\d+', '123 abc 456 def 789')
print(results)  # 输出 ['123', '456', '789']
1.4 替换文本
re.sub(pattern, repl, string):
功能:用指定的替换文本替换匹配的模式。
返回:替换后的字符串。
示例:
python
import re
result = re.sub(r'\d+', '#', 'abc 123 def 456')
print(result)  # 输出 'abc # def #'
1.5 分割字符串
re.split(pattern, string):
功能:根据模式分割字符串。
返回:一个列表,其中包含分割后的字符串。
示例:
python
import re
result = re.split(r'\W+', 'hello, world! Python is great.')
print(result)  # 输出 ['hello', 'world', 'Python', 'is', 'great', '']


2. 正则表达式的特殊字符
.:匹配除换行符外的任何字符。
^:匹配字符串的开头。
$:匹配字符串的结尾。
*:匹配前一个字符零次或多次。
+:匹配前一个字符一次或多次。
?:匹配前一个字符零次或一次。
{n}:匹配前一个字符恰好n次。
{n,}:匹配前一个字符至少n次。
{n,m}:匹配前一个字符至少n次,但不超过m次。
[]:匹配括号内的任意字符。
|:表示“或”操作。
\d:匹配任何数字,等同于[0-9]。
\D:匹配任何非数字字符。
\w:匹配任何字母数字字符,等同于[a-zA-Z0-9_]。
\W:匹配任何非字母数字字符。
\s:匹配任何空白字符,包括空格、制表符和换行符。
\S:匹配任何非空白字符。


3. 匹配对象方法
group():返回匹配的字符串。
groups():返回一个包含所有匹配组的元组。
start():返回匹配的开始位置。
end():返回匹配的结束位置。
span():返回匹配的起始和结束位置的元组。
示例:
python
import re

# 定义模式和字符串
pattern = r'(\d+)'
string = 'There are 123 apples and 456 oranges.'

# 使用 re.search 查找第一个匹配
match = re.search(pattern, string)
if match:
    print(match.group())  # 输出 '123'
    print(match.groups())  # 输出 ('123',)

# 使用 re.findall 查找所有匹配
matches = re.findall(pattern, string)
print(matches)  # 输出 ['123', '456']


4. 编译正则表达式
re.compile(pattern):
功能:将正则表达式编译成一个正则表达式对象,可以多次使用。
示例:
import re
pattern = re.compile(r'\d+')
result = pattern.findall('The numbers are 123 and 456.')
print(result)  # 输出 ['123', '456']

模拟github登录(异地登录需要邮件验证码未解决)

GitHub网站:https://github.com/login

勾选Preserve log,记录每次响应: 

登录后查看post请求产生的Payload,此处信息可以两次登录对比看,以此得到想要模拟的登录信息:

完整实现github登录代码: 

# -*- coding: utf-8 -*-
import re# 1.获取并模拟登录操作 2.保存登录会话信息 3.验证是否登录成功
import requests
from requests import Sessiondef do_auth_token(session: Session):global responseresponse = session.get('https://github.com/login')if response.status_code != 200:print("请求失败,请稍后再试!")exit(0)login_html = response.content.decode()auth_token = re.findall(r'name="authenticity_token" value="(.*?)"', login_html)[0]return auth_tokendef do_auth_login(session: Session):post_data = {"commit": "Sign in","authenticity_token": auth_token,"login": "123456","password": "123456",  # 登录密码,为了个人账号安全我这里不是真实密码"webauthn-conditional": "undefined","javascript-support": "true","webauthn-support": "supported","webauthn-iuvpaa-support": "unsupported","return_to": "https://github.com/login"}response = session.post(url='https://github.com/session', data=post_data)if response.status_code != 200:print("请求失败,请检查参数!")else:print("请求session 成功!")def do_login_status(session: Session):response = session.get('https://github.com/csqting')html_content = response.contentresponse1 = re.findall(r'<title>(.+?)(GitHub)?</title>', html_content.decode('utf-8'))try:end_str = response1[0][1]except IndexError:end_str = ""if end_str == "":# 个人主页的title内容如果结尾没有GitHub,说明登录成功print("登录成功!")else:print("登录失败!")with open("github_profile.html", "wb") as f:f.write(html_content)if __name__ == '__main__':# 使用session进行状态保持session = requests.session()session.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'}# 1. 获取并模拟登录操作auth_token = do_auth_token(session)# 2. 保存登录会话信息do_auth_login(session)# 3. 验证是否登录成功do_login_status(session)

 

 

到此requests模块基本结束,下面就是数据提取的学习。 

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

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

相关文章

大势智慧与山东省国土测绘院签署战略合作协议

9月6日&#xff0c;山东省国土测绘院&#xff08;后简称山东院&#xff09;与武汉大势智慧科技有限公司&#xff08;后简称大势智慧&#xff09;签署战略合作协议。 山东院院长田中原、卫星应用中心主任相恒茂、基础测绘中心主任魏国忠、卫星应用中心高级工程师张奇伟&#xf…

记一次实战中对fastjson waf的绕过

最近遇到一个fastjson的站&#xff0c;很明显是有fastjson漏洞的&#xff0c;因为type这种字符&#xff0c;fastjson特征很明显的字符都被过滤了 于是开始了绕过之旅&#xff0c;顺便来学习一下如何waf 编码绕过 去网上搜索还是有绕过waf的文章&#xff0c;下面来分析一手&a…

性能测试-断言+自学说明(十二)

一、响应断言 需求;jmeter请求百度&#xff0c;断言响应结果中是否包含“百度一下&#xff0c;你就知道” 1、位置&#xff1a; http请求-断言-响应断言 2、类型 响应文本&#xff1a;断言响应体中包含的字符串 响应代码&#xff1a;断言响应状态码 3、断言步骤&#xf…

全文带你轻松备考OCM

OCM&#xff0c;作为Oracle公司授予的顶级专业认证&#xff0c;是数据库领域从业者梦寐以求的技术巅峰标志。它不仅是对个人技术深度与广度的全面肯定&#xff0c;更是职业道路上的一块重要里程碑。在踏上这段挑战之旅前&#xff0c;深入洞察OCM认证的精髓、考试细节及备考策略…

想要快速准备好性能数据?方法这不就来了!

性能测试的一般流程 收集性能需求——>编写性能脚本——>执行性能测试——>分析测试报告——>系统性能调优。 在收集性能需求后&#xff0c;我们会思考&#xff1a; 1.负载测试时并发时需要多少数据&#xff1f;例&#xff1a;登录&#xff1b; 2.DB数据是否和…

Spring-cloud-gateway报错问题总结

1. 访问接口出现 There was an unexpected error (typeService Unavailable, status503).Unable to find instance for order 假设我们有服务 spring-appication-name: order 但命名路由id 也为order 就会出现这类错误 因为 gateway 有默认路由

喜讯!和鲸科技荣获「2024 爱分析·数据智能优秀厂商」

9 月 13 日&#xff0c;2024 爱分析第六届数据智能高峰论坛圆满举办。会上正式公布了“2024 爱分析数据智能优秀厂商”&#xff0c;和鲸科技凭借在数据智能领域内的卓越成果与创新应用成功入选。 2024爱分析数据智能优秀厂商奖项旨在评选出在数据智能领域&#xff0c;综合实力突…

用Druid连接池,出现系统找不到指定路径的解决方案

运行时抛出异常&#xff08;系统找不到指定路径&#xff09;&#xff1a; 解决方法&#xff1a; 用 . 代替项目名就可以成功运行

Weblogic部署

要安装weblogic&#xff0c;首先要有java环境&#xff0c;因此需要先安装jdk。 这里需要注意&#xff0c;weblogic版本不同&#xff0c;对应的jdk版本也不同&#xff0c;我在这里就踩了很多坑&#xff0c;我这里下载的是fmw_12.2.1.4.0_wls_lite_generic.jar对应的是jdk-8u333…

冯诺依曼体结构与系统

冯诺依曼结构 我们的计算机&#xff0c;以及服务器&#xff0c;还有我我们日常使用的洗衣机都遵循冯诺依曼体结构。 以我们日常使用qq聊天时举例&#xff0c;冯诺依曼体结构可以这样画 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元…

SpringBoot Jar 包加密防止反编译实战

今天给大家分享一个 SpringBoot 程序 Jar 包加密的方式&#xff0c;通过代码加密可以实现无法反编译。 应用场景就是当需要把公司的产品部署到友方公司或者其他公司时&#xff0c;可以防止客户直接反编译出来源码&#xff0c;大大提升代码的安全性。 版本 springboot 2.6.8j…

rabbitmq容器化部署

需求 容器化部署rabbitmq服务 部署服务 找到如下官网信息版本 官网版本发布信息 这里看到最新版本是3.13版本&#xff0c;这里在3.13中找一个版本下载容器镜像即可。 找到dockrhub.com中 找到3.13.2版本镜像。 容器服务安装此处省略 现在下载容器镜像需要配置容器代理 ~#…

Java静态代理和动态代理

通过一个小案例整理描述静态代理和动态代理 给大家举个简单例子。在一个公司中&#xff0c;老板处于上层&#xff0c;客户在下层。因每天来访客户众多&#xff0c;老板本应只考虑战略和赚钱&#xff0c;却被一些不重要的客户耽误不少时间。于是老板招聘了一个秘书&#xff0c;专…

大模型进行Query改写时如何提升性能

Query改写方法有子问题拆解、短语提取、回溯检索、虚拟文档等方法。见&#xff1a;https://blog.csdn.net/qq_43814415/article/details/138606669 llama-index的实现见&#xff1a;https://zhaozhiming.github.io/2024/05/13/query-rewrite-rag/ 这里总结实际使用大模型改写时…

Day09-StatefuleSet控制器

Day09-StatefuleSet控制器 0、昨日内容回顾1、StatefulSets控制器1.1 StatefulSet概述1.2 StatefulSets控制器-网络唯一标识之headless1.3 StatefulSets控制器-独享存储 2、metric-server2.1 metric-server概述2.2 部署metric-server:2.3 hpa案例 3、helm概述3.1 安装helm3.2 h…

并行程序设计基础——并行I/O(5)

目录 一、分布式数组文件的存取 1.1 MPI_TYPE_CREATE_DARRAY 1.2 MPI_TYPE_CREATE_SUBARRAY 二、小结 上一节我们对并行I/O中共享文件的存取操作进行了介绍,本节继续介绍MPI-2并行I/O的最后内容:分布式数组文件的存取。 一、分布式数组文件的存取 许多情况下,M…

ModbusTCP/RTU转Ethernet/IP(CIP)-Modbus设备与罗克韦尔AB的PLC之间通讯

IGT-DSER智能网关模块支持西门子、三菱、欧姆龙、罗克韦尔AB等各种品牌的PLC之间通讯&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪表、变频器等设备通讯。网关有多个网口、串口&#xff0c;也可选择WIFI无线通讯。无需PLC内编程开发&#xff0c;只要在IGT-DSER智…

两段有趣的代码(C语言函数指针)

目录 part1part2 两段有趣的代码 part1 (*(void (*)())0)();我们知道函数指针&#xff1a; void (*p)()去掉函数指针变量名就是函数指针的类型&#xff1a; void (*)()那这段代码我们就可以理解为将0强制转换为函数指针类型&#xff0c;再进行解引用;进行调用函数&#xff…

【视频教程】基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割实践技术应用

随着无人机自动化能力的逐步升级&#xff0c;它被广泛的应用于多种领域&#xff0c;如航拍、农业、植保、灾难评估、救援、测绘、电力巡检等。但同时由于无人机飞行高度低、获取目标类型多、以及环境复杂等因素使得对无人机获取的数据处理越来越复杂。最近借助深度学习方法&…

解锁企业潜能,Vatee万腾平台引领智能新纪元

在数字化转型的浪潮中&#xff0c;企业正站在一个前所未有的十字路口&#xff0c;面对着前所未有的机遇与挑战。解锁企业内在潜能&#xff0c;实现跨越式发展&#xff0c;已成为众多企业的共同追求。而Vatee万腾平台&#xff0c;作为智能科技的先锋&#xff0c;正以其强大的智能…