You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在lxml中结合Pandas与正则表达式筛选特定格式URL

用正则过滤符合特定结尾规则的URL

嘿,我来帮你搞定这个URL过滤的问题!既然你已经有了在regex101验证过的正则,那核心就是把它和你的爬取逻辑结合起来,筛选出符合要求的URL就行。我用Python举例子(毕竟爬虫场景里最常用这个),你可以对应到自己用的编程语言调整:

1. 过滤已爬好的URL列表

如果你已经把所有爬取到的URL存在了all_urls列表里,直接用列表推导式加正则模块就能快速筛选:

import re

# 把这里换成你验证过的正则,记得一定要加结尾锚定$,确保是URL末尾匹配
# 比如对应/[若干字母][3个数字]结尾的示例正则是:r'\/[a-zA-Z]+\d{3}$'
pattern = re.compile(r'\/[a-zA-Z]+\d{3}$')

# 过滤出符合规则的URL
filtered_urls = [url for url in all_urls if pattern.search(url)]

为啥要加$?要是不加的话,可能会误判那些中间包含/字母+3数字的URL(比如/abc123/def这种明显不符合你的需求,但没加$就会被匹配到),加了$就只会匹配正好以该模式结尾的URL,和你要的完全一致。

2. 爬取时直接过滤(更省内存)

要是不想先爬一堆URL再过滤,还能在爬取到单个URL的时候就判断,符合条件再存起来,这样能少占内存:

import re
import requests
from bs4 import BeautifulSoup

pattern = re.compile(r'\/[a-zA-Z]+\d{3}$')
target_urls = []

# 举个用BeautifulSoup爬取的例子,你换成自己的爬取逻辑就行
response = requests.get("你的目标网站地址")
soup = BeautifulSoup(response.text, 'html.parser')

for link in soup.find_all('a', href=True):
    url = link['href']
    # 先检查是否符合正则,符合才加入结果列表
    if pattern.search(url):
        target_urls.append(url)

小提醒

  • 不管是相对URL(比如/abc123)还是绝对URL(比如https://xxx.com/abc123),这个正则都能正常匹配到结尾的部分,不用额外调整。
  • 写正则的时候记得用原始字符串(前面加r),避免转义字符搞出问题。

这样修改后,你得到的就是完全符合要求的URL列表啦!

内容的提问来源于stack exchange,提问作者SeagullWardy

火山引擎 最新活动