我尝试通过reg来使用beautifulsoup4方法提取信息。进出口。 但我得到以下答案:
AttributeError:'NoneType'对象没有属性'group'
我不明白有什么问题。我正在努力:
这是我的代码:
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)
有人知道错误在哪里吗?
答案 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)?