如何使用get_txt仅匹配部分文本而不是精确文本

时间:2018-01-17 04:20:32

标签: python html python-3.x beautifulsoup

我正在使用partnumber = get_txt(soup, 'Part Number')但有时部件号是复数部件号,这会破坏我的脚本。我如何解决这个问题,以便如果文本零件编号匹配,那么我可以get_txt

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
r = requests.get(urldet, headers=headers)
soup = BeautifulSoup(r.content, "lxml")
partnumber = get_txt(soup, 'Part Number')

,这是

时的错误
Traceback (most recent call last):
  in get_txt
    key_tag = soup.find('span', text=key).parent
AttributeError: 'NoneType' object has no attribute 'parent'

我收到错误是有意义的,因为没有文字零件编号,而是文字零件编号所以要解决它我手动更改文字我'我正在寻找,但我想避免不得不手动完成。

1 个答案:

答案 0 :(得分:2)

  

如何使用get_txt仅匹配部分文本而不是精确文本

答案是regex

您可以在get_txt功能中添加正则表达式搜索文本。

def get_txt(soup, key):
    key_tag = soup.find('span', text=re.compile(key)).parent
    return key_tag.find_all('span')[1].text

您可以看到我已将text=key更改为text=re.compile(key)。这会将Part NumberPart Numbers或其中包含Part Number的任何其他文字匹配。