#python #selenium #web-scraping #beautifulsoup
#python #селен #веб-очистка #beautifulsoup
Вопрос:
Я пытаюсь получить доступ к элементам в списке ингредиентов следующего веб-сайта: https://www.jamieoliver.com/recipes/pasta-recipes/gennaro-s-classic-spaghetti-carbonara /
<div class="col-md-12 ingredient-wrapper">
<ul class="ingred-list ">
<li>
3 large free-range egg yolks
</li>
<li>
40 g Parmesan cheese, plus extra to serve
</li>
<li>
1 x 150 g piece of higher-welfare pancetta
</li>
<li>
200g dried spaghetti
</li>
<li>
1 clove of garlic
</li>
<li>
extra virgin olive oil
</li>
</ul>
</div
Сначала я попробовал просто использовать запросы и beautiful soup, но мой код не нашел элементы списка. Затем я попытался использовать Selenium, и это все равно не сработало. Мой код приведен ниже:
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
url = "https://www.jamieoliver.com/recipes/pasta-recipes/cracker-ravioli/"
driver = webdriver.Chrome()
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
for ultag in soup.findAll('div', {'class': "col-md-12 ingredient-wrapper"}):
# for ultag in soup.findAll('ul', {'class': 'ingred_list '}):
for litag in ultag.findALL('li'):
print(litag.text)
Ответ №1:
Чтобы получить список ингредиентов, вы можете использовать этот пример:
import requests
from bs4 import BeautifulSoup
url = 'https://www.jamieoliver.com/recipes/pasta-recipes/gennaro-s-classic-spaghetti-carbonara/'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0'}
soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
for li in soup.select('.ingred-list li'):
print(' '.join(li.text.split()))
С принтами:
3 large free-range egg yolks
40 g Parmesan cheese , plus extra to serve
1 x 150 g piece of higher-welfare pancetta
200 g dried spaghetti
1 clove of garlic
extra virgin olive oil
Комментарии:
1. Большое вам спасибо! Можно ли объяснить, что делает ваш код и почему он отличается, пожалуйста?
2. @wickedskengman В моем коде не используется Selenium (в данном случае в этом нет необходимости). В вашем коде
.findALL
это должно быть.findAll
. Кроме того, я использую селектор CSS (поэтому цикл в цикле не нужен).