首页 > 解决方案 > 如果使用 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

标签: pythonpython-3.xbeautifulsoupwebrequest

解决方案


您可以使用给定的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标志的使用允许这些测试不区分大小写(因此无需将文本小写)。


推荐阅读