BeautifulSoup не может найти div с определенным классом - PullRequest
1 голос
/ 22 апреля 2019

Webpage HTML and my code

Так что для некоторого фона я пытался изучить веб-скребинг, чтобы получить некоторые изображения для проектов машинного обучения с участием CNN. Я пытался очистить некоторые изображения с сайта (HTML-код слева, мой код справа), но безуспешно. мой код заканчивается печатью / возвращением пустого списка. Что-то я делаю не так?

Для чего бы то ни было, я попытался найти другие теги div, у которых был «id» вместо «class», и это сработало, но по какой-то причине он не может найти те, которые я ищу.

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

import requests
import urllib3
from bs4 import BeautifulSoup

http = urllib3.PoolManager()
url = 'https://www.grailed.com/shop/EkpEBRw4rw'

response = http.request('GET', url)
soup = BeautifulSoup(response.data, 'html.parser')

img_div = soup.findAll('div', {'class': "listing-cover-photo "})
print(img_div)

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

from bs4 import BeautifulSoup
from selenium import webdriver

url = 'https://www.grailed.com/shop/EkpEBRw4rw'
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')

listing = soup.select('.listing-cover-photo ')
for item in listing:
    print(item.select('img'))

ВЫВОД:

[<img alt="Off-White Off White Caravaggio Hoodie" src="https://process.fs.grailed.com/AJdAgnqCST4iPtnUxiGtTz/cache=expiry:max/rotate=deg:exif/resize=width:480,height:640,fit:crop/output=format:webp,quality:70/compress/https://cdn.fs.grailed.com/api/file/yX8vvvBsTaugadX0jssT"/>]
(...a few more of these...)
[<img alt="Off-White Off-White Arrows Hoodie Black" src="https://process.fs.grailed.com/AJdAgnqCST4iPtnUxiGtTz/cache=expiry:max/rotate=deg:exif/resize=width:480,height:640,fit:crop/output=format:webp,quality:70/compress/https://cdn.fs.grailed.com/api/file/9CMvJoQIRaqgtK0u9ov0"/>]
[]
[]
[]
[]
(...many more empty lists...)

1 Ответ

3 голосов
/ 22 апреля 2019

Похоже, что сайт загружает данные с помощью JavaScript. Попробуйте использовать Selenium и красивый суп.

from bs4 import BeautifulSoup
from selenium import webdriver

url = "https://www.grailed.com/shop/EkpEBRw4rw"
browser = webdriver.Chrome(executable_path="/path/to/chromedriver.exe")
browser.get(url)
soup = BeautifulSoup(browser.page_source,"html.parser")
items=soup.select(".listing-cover-photo ")
print(items)
...