如果在使用 python 和 beautifulsoup 的网页中找到部分匹配项,则显示整个字符串

Display the entire string if a partial match is found in a webpage using python and beautifulsoup

我设法在下面的代码片段中提取了我想要的内容,但我认为它有问题。我需要帮助return根据部分匹配对整个字符串进行处理。

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

想要的输出:#-- return 整个字符串

Found - www.shibuttinu.com
Found - https://t.me/Shibuttinu
Not Found - twitter

您可以使用给定的 queries 构建正则表达式。以下示例假设您的整个字符串以引号 a space 或换行符终止(可能并非总是如此?)

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])

这将 return 整个字符串作为:

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

它试图做的是定位您的所有查询,但前提是它们继续使用某些有效字符,并且也只有它们被括在引号或 space 中。正则表达式语法允许定义这些限制。 re.I 标志的使用允许这些测试不区分大小写(因此无需将文本小写)。