Невозможно получить доступ к IMG в Div с BeautifulSoup - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь получить доступ к SRC изображения, используя BeautifulSoup в Python. Вот способ, которым изображение вложено:

<div class="artistAndEventInfo-7c13900b">
   <a class="artistAndEventInfo-48455a81" href="https://www.bandsintown.com/a/11985-perkele?came_from=257&amp;utm_medium=web&amp;utm_source=artist_event_page&amp;utm_campaign=artist">
       <img src="https://assets.bandsintown.com/images/fallbackImage.png" alt="">
       </a>

Я пробовал три метода.

1: Логика заключается в том, что я выбираю родительский div рассматриваемого изображения, а затем дочерний img внутри него:

image = soup.select_one('[class^=artistAndEventInfo-7c13900b] img')
        print "band image", image

Это печатает "none". (Должен выводить SRC).

2: использование более явного метода nth типа:

image = soup.select_one('[class^=artistAndEventInfo-7c13900b] :nth-of-type(1) img')

Но на выходе все еще "нет".

3: я также пытался использовать селен:

driver.find_element_by_xpath("//div[@class^=artistAndEventInfo-48455a81']")

Что дает мне ошибку:

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression //div[@class^=artistAndEventInfo-7c13900b']/img because of the following error:

SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//div[@class^=artistAndEventInfo-7c13900b']/img' is not a valid XPath expression.
  (Session info: chrome=74.0.3729.157)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.11.6 x86_64)

Может кто-нибудь сказать мне конкретно, почему мой код не работает во всех этих случаях? Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 22 мая 2019

Возможно, значение атрибута класса тега div является динамическим. Вместо использования полного значения атрибута класса вы можете попробовать это ниже.

from bs4 import BeautifulSoup
html='''<div class="artistAndEventInfo-7c13900b">
   <a class="artistAndEventInfo-48455a81" href="https://www.bandsintown.com/a/11985-perkele?came_from=257&amp;utm_medium=web&amp;utm_source=artist_event_page&amp;utm_campaign=artist">
       <img src="https://assets.bandsintown.com/images/fallbackImage.png" alt="">
       </a>'''
soup=BeautifulSoup(html,'lxml')
image = soup.select_one('div[class^=artistAndEventInfo-] img')
print(image['src'])
0 голосов
/ 22 мая 2019

Если вы хотите получить источник изображения, используйте код ниже с исправленным xpath.

print(driver.find_element_xpath("//div[@class='artistAndEventInfo-7c13900b']//img").get_attribute("src"))

И если вы хотите использовать опции 1 и 2, убедитесь, что вы получите атрибут src, как показано ниже.

print image['src']
0 голосов
/ 22 мая 2019

Используя BeautifulSoup, вы сделаете это:

from bs4 import BeautifulSoup

html = ''' <div class="artistAndEventInfo-7c13900b">
   <a class="artistAndEventInfo-48455a81" href="https://www.bandsintown.com/a/11985-perkele?came_from=257&amp;utm_medium=web&amp;utm_source=artist_event_page&amp;utm_campaign=artist">
       <img src="https://assets.bandsintown.com/images/fallbackImage.png" alt="">
       </a>
'''

soup = BeautifulSoup(html,'html5lib')

img = soup.find('img')

src = img['src']

print(src)
0 голосов
/ 22 мая 2019

Похоже на ошибку с вашим xpath

//div[@class^=artistAndEventInfo-7c13900b']/img'

должно быть

//div[@class='artistAndEventInfo-7c13900b']/img'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...