繁体   English   中英

使用python和beautiful Soup在xml页面上找不到关键字组合

[英]Can't find a combination of keywords on an xml page using python and beautiful soup

我想找到一个包含两个关键字的标签。例如,我想找到一个包含“Yankee”“duck”的标签。 代码如下:

        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

这是我想要获取的 xml:

<url>
<loc>
  https://packershoes.com/products/copy-of-382-new-balance-m999jtc-1
</loc>
<lastmod>2018-12-04T21:49:25-05:00</lastmod>
<changefreq>daily</changefreq>
<image:image>
<image:loc>
  https://cdn.shopify.com/s/files/1/0208/5268/products/NB999JTC-2_4391df07-a3a2-4c82-87b3-49d776096473.jpg?v=1543851653
</image:loc>
  <image:title>NEW BALANCE M999JTC "MADE IN USA"</image:title>
</image:image>
</url>
<url>
<loc>
  https://packershoes.com/products/copy-of-382-packer-x-new-era-new-york-yankee-duck-canvas-1
</loc>
<lastmod>2018-12-06T14:39:37-05:00</lastmod>
<changefreq>daily</changefreq>
<image:image>
<image:title>
  NEW ERA JAPAN 59FIFTY NEW YORK YANKEES "DUCK CANVAS"
</image:title>
</image:image>
</url>

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])

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

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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM