如何使用Python的requests与BeautifulSoup在网页中搜索多个预定义模式的字符串及代码修复
解决Python网页多模式字符串搜索问题
首先得指出你原来代码的核心问题:你现在的判断逻辑根本没去网页内容里搜索,只是在检查每个查询字符串是否以queries里的任意元素开头——而每个q本身就是queries的成员,所以必然返回True,这就是为什么所有结果都显示Found,完全没实现你要的网页搜索功能。
正确实现思路
要完成你想要的“在网页中搜索符合预定义模式的完整字符串(比如完整链接)”,我们可以结合requests获取网页内容,用正则表达式匹配完整链接(或者用BeautifulSoup解析HTML后提取链接),具体步骤如下:
- 用
requests请求目标网页,获取HTML内容(注意添加浏览器头避免反爬) - 针对每个预定义的模式(
t.me、twitter、www.),编写正则表达式匹配对应的完整URL - 遍历每个模式,在网页内容中查找匹配项:
- 如果找到匹配的完整链接,输出链接+
- Found - 如果没有找到,输出模式+
- not found
- 如果找到匹配的完整链接,输出链接+
修复后的完整代码
import requests import re # 目标网页URL url = "https://bscscan.com/address/0x88c20beda907dbc60c56b71b102a133c1b29b053#code" # 预定义的搜索模式及对应的正则表达式 query_patterns = { "t.me": r"https?://t\.me/[\w/]+", "twitter": r"https?://(www\.)?twitter\.com/[\w/]+", "www.": r"https?://www\.[\w\-\.]+\.[a-z]{2,}" } try: # 添加headers模拟浏览器,避免被反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) response.raise_for_status() # 检查请求是否成功 html_content = response.text # 遍历每个搜索模式处理结果 for pattern_name, regex in query_patterns.items(): matches = re.findall(regex, html_content) if matches: # 去重后输出所有匹配的完整链接 unique_matches = list(set(matches)) for match in unique_matches: print(f"{match} - Found") else: print(f"{pattern_name} - not found") except requests.exceptions.RequestException as e: print(f"请求网页时出错: {e}")
代码说明
- 反爬处理:添加
User-Agent头模拟浏览器访问,避免被目标网站的反爬机制拦截 - 清晰维护:用字典存储模式名称和对应正则,方便后续新增或修改搜索规则
- 去重处理:通过
set对匹配结果去重,避免重复输出相同链接 - 异常捕获:处理请求过程中可能出现的网络问题、HTTP错误等情况
运行这段代码后,就能得到你期望的类似输出:
https://t.me/Shibuttinu - Found www.shibuttinu.com - Found twitter - not found
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

