Не могу найти тег XML, используя красивый суп и питона - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь извлечь тег image: title с определенными ключевыми словами со страницы XML.Ключевые слова работают хорошо, если я просто ищу по тегам loc.Код ниже

print("Searching for product...")
        keywordLinkFound = False
        while keywordLinkFound is False:
            html = self.driver.page_source
            soup = BeautifulSoup(html, 'xml')
            try:
                regexp = "%s.*%s|%s.%s" % (keyword1, keyword2, keyword2, keyword1)
                keywordLink = soup.find('image:title', text=re.compile(regexp))
                print(keywordLink)
                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-adidas-predator-accelerator-trainer
</loc>
<lastmod>2018-11-24T08:22:42-05:00</lastmod>
<changefreq>daily</changefreq>
<image:image>
    <image:loc>
    https://cdn.shopify.com/s/files/1/0208/5268/products/adidas_Yung-1_B37616_side.jpg?v=1537395620
    </image:loc>
    <image:title>ADIDAS YUNG-1 "CLOUD WHITE"</image:title>
</image:image>
</url>

Кажется, что я не могу получить к изображению: заголовок тега

1 Ответ

0 голосов
/ 11 декабря 2018

Это находит текст в <image:title>:

soup.findAll('image')[0].findAll('title')[0].text

или вы можете сделать

soup.image.title.text

с выводом:

'ADIDAS YUNG-1 "CLOUD WHITE"'

Вы должныиспользуйте встроенные методы в BeautifulSoup ( документация ) вместо регулярных выражений.Преимущество использования BeatifulSoup для анализа HTML заключается в том, что вы можете воспользоваться структурной формой языка.

Редактировать

Вот полный рабочий код:

from bs4 import BeautifulSoup

html = """
<url>
<loc>
   https://packershoes.com/products/copy-of-adidas-predator-accelerator-trainer
</loc>
<lastmod>2018-11-24T08:22:42-05:00</lastmod>
<changefreq>daily</changefreq>
<image:image>
    <image:loc>
    https://cdn.shopify.com/s/files/1/0208/5268/products/adidas_Yung-1_B37616_side.jpg?v=1537395620
    </image:loc>
    <image:title>ADIDAS YUNG-1 "CLOUD WHITE"</image:title>
</image:image>
</url>
"""

soup = BeautifulSoup(html, 'xml')
soup.image.title.text

Выход:

'ADIDAS YUNG-1 "CLOUD WHITE"'
...