You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则处理BeautifulSoup列表遇TypeError,求提取链接数字生成新链接方案

解决Python爬虫提取赛事分析链接的TypeError问题

嘿,我看到你被这个TypeError困扰多日了,咱们来一步步搞定它~

错误根源

你代码里的re.search(r"\((.......\))",element)这行出了问题:这里的element是BeautifulSoup返回的<a>标签对象,而不是字符串类型。re.search()只能处理字符串或字节对象,所以才会抛出TypeError: expected string or bytes-like object。

修正方案

我们需要先从标签里取出包含javascript:analysis(XXXXXXX)的href属性值,再用正则提取数字,最后拼接成目标链接。下面是修正后的完整代码:

import bs4 as bs
import sys
import re
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl

class Page(QWebEnginePage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.html = ''
        self.loadFinished.connect(self._on_load_finished)
        self.load(QUrl(url))
        self.app.exec_()

    def _on_load_finished(self):
        self.html = self.toHtml(self.Callable)
        print('READY!')

    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()

def main():
    page = Page('http://www.nowgoal.cc/')
    soup = bs.BeautifulSoup(page.html, 'html.parser')
    analysis_links = []  # 存储最终生成的分析页面链接
    
    # 遍历所有带赛事分析标识的a标签
    for a_tag in soup.find_all("a", attrs={'title' : 'Match analyze'}):
        # 提取a标签的href属性值(这才是包含javascript代码的字符串)
        href_content = a_tag.get('href')
        if href_content:
            # 用正则精准提取analysis()括号内的数字
            match_result = re.search(r"analysis\((\d+)\)", href_content)
            if match_result:
                match_id = match_result.group(1)
                # 拼接成直接访问的分析页面URL
                full_link = f"http://www.nowgoal.cc/analysis/{match_id}.html"
                analysis_links.append(full_link)
    
    # 输出所有生成的链接
    print("生成的赛事分析直接链接列表:")
    for link in analysis_links:
        print(link)

if __name__ == '__main__':
    main()

关键修正点

  • 获取正确的字符串源:用a_tag.get('href')拿到实际的javascript代码字符串,而不是直接操作Tag对象
  • 优化正则表达式:r"analysis\((\d+)\)"专门匹配analysis(数字)的格式,\d+可以适配任意长度的数字,比固定7位的匹配更灵活
  • 结构化存储结果:把生成的链接存入列表,方便后续批量使用

运行这段代码后,就能成功提取所有赛事的分析页面直接链接,不会再抛出类型错误啦~

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:35:16