BeautifulSoup和regexp:属性错误

时间:2018-06-11 13:31:19

标签: regex python-3.x beautifulsoup

我尝试通过reg来使用beautifulsoup4方法提取信息。进出口。 但我得到以下答案:

AttributeError:'NoneType'对象没有属性'group'

我不明白有什么问题。我正在努力:

  1. 获取Typologie名称:'herenhuizen'
  2. 获取网络链接
  3. 这是我的代码:

    import requests
    from bs4 import BeautifulSoup
    import re
    
    url = 'https://inventaris.onroerenderfgoed.be/erfgoedobjecten/4778'
    page = requests.get(url)
    
    soup = BeautifulSoup(page.text, 'html.parser')
    text = soup.prettify()
    
    ##block
    p = re.compile('(?s)(?<=(Typologie))(.*?)(?=(</a>))', re.VERBOSE)
    block = p.search(text).group(2)
    
    
    ##typo_url
    p = re.compile('(?s)(?<=(href=\"))(.*?)(?=(\">))', re.VERBOSE)
    typo_url = p.search(block).group(2)
    
    
    ## typo_name
    p = re.compile('\b(\w+)(\W*?)$', re.VERBOSE)
    typo_name = p.search(block).group(1)
    

    有人知道错误在哪里吗?

1 个答案:

答案 0 :(得分:0)

我会改变这个:

## typo_name
block_reverse = block[::-1]
p = re.compile('(\w+)', re.VERBOSE)
typo_name_reverse = p.search(block_reverse).group(1)
typo_name = typo_name_reverse[::-1]
print(typo_name)

如果你在最后寻找东西,有时候反转字符串会更容易。这只是在块的末尾找到名称。有很多方法可以找到你想要的东西,我们可以提出各种聪明的正则表达式,但是如果这样做的话可能就足够了:)

更新

但是我刚刚注意到原始正则表达式无效的原因是使用\b它需要像\\b那样进行转义,或者像这样生成:

## typo_name
p = re.compile(r'\b(\w+)(\W*?)$', re.VERBOSE)
typo_name = p.search(block).group(1)

这里有一些好的关注Q和A:Does Python re module support word boundaries (\b)?