无法在创建的列表中使用正则表达式

时间:2018-01-06 21:41:55

标签: python

我想:

  1. 从括号中提取数字" javascript:analysis(XXXXXXX)"每场比赛

  2. 创建一个包含直接超链接的列表,例如:http://www.nowgoal.cc/analysis/XXXXXXX.html

  3. 还有更多......

  4. 代码:

    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')
        lista = []
    
        for x in soup.find_all("a", attrs={'title' : 'Match analyze'}):
            lista.append(x)
    
        for element in lista:
            z = re.search(r"\((.......\))",element)
            if z:
                print(z.groups())
    
    if __name__ == '__main__': main()
    

    Python产生:TypeError:期望的字符串或类似字节的对象

    我现在挣扎了几天,没有更多的想法来解决这个问题。我挖掘并尝试,搜索并结束无能为力。我真的想写更多代码并发展我的想法。请帮助,我在这里死。

1 个答案:

答案 0 :(得分:0)

根据以下文档https://www.crummy.com/software/BeautifulSoup/bs4/doc/

soup.find_all返回的元素不是字符串。它们是物体。除了每个对象都有各自的__str__方法覆盖。

所以你没有传递字符串来搜索。但实际上是定制的美丽汤品。

for element in lista:
    z = re.search(r"\((.......\))",element)
    if z:
        print(z.groups())

要修复,请务必将element转换为字符串

for element in lista:
    z = re.search(r"\((.......\))", str(element))
    if z:
        print(z.groups())