30min入手正则表达式

限定符

a* a出现任意次

a+ a出现次数不为0

a?a出现(1)或不出现

a{n}a出现n次

a{n,n+x}a出现在n——n+x次

a{2,}a至少出现2次

或运算符

(a|b)

a或者b中选一个

(ab)|(cd)

ab或者cd中选一个

字符类🤔

[abc]\

正则表达式到底是什么东西?

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索.doc。在这里,会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-123456780376-7654321*)。

https://blog.youkuaiyun.com/codercjw/article/details/128860012

30min快速入门(写的很详细很棒)

https://deerchao.cn/tutorials/regex/regex.htm#mission

例如

也有很多批注,很nice,大佬持续更新了将近十年,满满的干货和实际经验

import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt import re # 设置请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36' } def get_job_data(keyword, location, pages=1): """ 爬取智联招聘数据 Args: keyword: 关键词,例如 "金融科技" location: 城市,例如 "北京" pages: 爬取页数 Returns: DataFrame: 包含职位信息的 DataFrame """ base_url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' job_data = [] for page in range(1, pages + 1): params = { 'jl': location, 'kw': keyword, 'p': page, } response = requests.get(base_url, headers=headers, params=params) response.encoding = 'utf-8' soup = BeautifulSoup(response.text, 'html.parser') job_list = soup.find_all('table', class_='newlist') for job in job_list[1:]: # 跳过第一个表格,它包含了筛选条件 job_title = job.find('td', class_='zwmc').a.text.strip() company_name = job.find('td', class_='gsmc').a.text.strip() salary = job.find('td', class_='zwyx').text.strip() location = job.find('td', class_='gzdd').text.strip() job_data.append([job_title, company_name, salary, location]) df = pd.DataFrame(job_data, columns=['职位', '公司', '薪资', '地点']) return df def save_to_excel(df, filename="job_data.xlsx"): """保存数据到Excel""" df.to_excel(filename, index=False) def visualize_data(df): """数据可视化""" # 将薪资列转换为字符串类型 df['薪资'] = df['薪资'].astype(str) # 使用正则表达式提取最低薪资和最高薪资 # 初始化最低薪资和最高薪资列 df['最低薪资'] = None df['最高薪资'] = None # 遍历每一行,提取薪资范围 for i, row in df.iterrows(): salary = row['薪资'] # 使用正则表达式匹配薪资范围 match = re.match(r'(\d+)k?-(\d+)k?', salary) if match: min_salary = float(match.group(1)) * 1000 max_salary = float(match.group(2)) * 1000 df.at[i, '最低薪资'] = min_salary df.at[i, '最高薪资'] = max_salary # 过滤掉无法转换为数字的行 df = df.dropna(subset=['最低薪资', '最高薪资']) plt.figure(figsize=(10, 5)) plt.hist(df['最低薪资'], bins=10, edgecolor='black') plt.xlabel('最低薪资 (元)') plt.ylabel('职位数量') plt.title('金融科技岗位薪资分布') plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 plt.show() if __name__ == '__main__': keyword = "金融科技" location = "北京" pages = 3 # 爬取3页数据 df = get_job_data(keyword, location, pages) save_to_excel(df) visualize_data(df)帮我改进代码
06-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白村第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值