使用python和漂亮的汤在xml页面上找不到关键字的组合

时间:2018-12-10 22:03:02

标签: python xml beautifulsoup xml-parsing

我想找到一个标签,其中存在两个关键字。例如,我想要找到一个标签,其中包含出现的“扬基” “鸭”。代码如下:

DATE

这是我要获取的xml:

        elif len(keywords) == 2:
            keyword1 = keywords[0]
            keyword2 = keywords[1]

            print("Searching for product...")
            keywordLinkFound = False
            while keywordLinkFound is False:
                html = self.driver.page_source
                soup = BeautifulSoup(html, 'lxml')
                try:
                    keywordLink = soup.find('loc', text=re.compile(keyword1 + keyword2)).text
                    return keywordLink
                except AttributeError:
                    print("Product not found on site, retrying...")
                    time.sleep(monitorDelay)
                    self.driver.refresh()
                break

2 个答案:

答案 0 :(得分:0)

keyword1 + keyword2是字符串yankeeduck,因此您正在搜索该字符串,当两个单词没有这样连接时,它将不匹配。您需要允许它们之间有任何东西,并以相反的顺序识别它们。因此,正则表达式应为:

yankee.*duck|duck.*yankee

因此,代码应为:

regexp = "%s.*%s|%s.%s"%(keyword1, keyword2, keyword2, keyword1)
keywordLink = soup.find('loc', text=re.compile(regexp)).text

如果关键字包含正则表达式中的特殊字符,则应转义它们:

keyword1 = re.escape(keywords[0])
keyword2 = re.escape(keywords[1])

答案 1 :(得分:0)

好的,谢谢! 因此,代码应该是:

regexp = "%s.*%s|%s.%s"%(keyword1, keyword2, keyword2, keyword1)
keywordLink = soup.find('loc', text=re.compile(regexp)).text

如果关键字包含正则表达式中的特殊字符,您应该将它们转义:

keyword1 = re.escape(keywords[0])
keyword2 = re.escape(keywords[1])