python - 如果使用 python 和 beautifulsoup 在网页中找到部分匹配,则显示整个字符串
问题描述
我设法在下面的代码段中提取了我想要的东西,但是我认为它有问题。我需要帮助来根据部分匹配返回整个字符串。
import requests
url = "https://bscscan.com/address/0x88c20beda907dbc60c56b71b102a133c1b29b053#code"
queries = ["twitter", "www.", "https://t.me"]
r = requests.get(url)
for q in queries:
q = q.lower()
if q in r.text.lower():
if q.startswith(tuple(queries)):
print("Found ", q)
else:
print("Not Found ", q)
电流输出:
Found www.
Found https://t.me
想要的输出:#-- 返回整个字符串
Found - www.shibuttinu.com
Found - https://t.me/Shibuttinu
Not Found - twitter
解决方案
您可以使用给定的queries
. 以下示例假设您的整个字符串都以引号、空格或换行符终止(可能并非总是如此?)
import requests
import re
url = "https://bscscan.com/address/0x88c20beda907dbc60c56b71b102a133c1b29b053#code"
r = requests.get(url)
queries = ["twitter", "www.", "https://t.me"]
re_queries = '|'.join(re.escape(q) for q in queries)
valid_url = "[a-z0-9:/?\-=&.]"
re_query = rf"['\" ]({valid_url}*?({re_queries}){valid_url}*?)['\"\n]"
for match in re.finditer(re_query, r.text, re.I):
print(match.groups()[0])
这将返回整个字符串:
twitter:card
twitter:title
twitter:description
twitter:site
twitter:image
https://www.googletagmanager.com/gtag/js?id=UA-46998878-23
www.shibuttinu.com
https://t.me/shibuttinu
https://www.binance.org/en/smartChain
https://twitter.com/BscScan
Twitter
这试图做的是找到您的所有查询,但前提是它们使用某些有效字符进行,并且仅当它们用引号或空格括起来时。正则表达式语法允许定义这些限制。该re.I
标志的使用允许这些测试不区分大小写(因此无需将文本小写)。
推荐阅读
- php - 全屏面板引导与高图表(100% 高度)
- java - 如何使用 Firestore 对象填充数组
- python - 将 .sql 数据库转储转储为 pandas 数据框
- javascript - 如何使用 React 为 SVG 组件中的新样式设置动画?
- python - Python - 用 sudo date 替换缺失的日期
- c# - 跨多个数据网格视图的函数处理,重复代码最少
- c - 用指针/数组差异赋值
- c - 使用 `setp` 代替 `setb` 有什么好处吗?
- javascript - Javascript 中的 window.setInterval 不会多次运行一个函数
- regex - xpath+ 正则表达式:匹配文本