Используя функцию поиска BeutifulSoups (), но вместо этого получая функцию поиска pythons()

#python #beautifulsoup

#питон #прекрасный суп

Вопрос:

Я изучаю веб-скребок и столкнулся с проблемой. Я пытаюсь использовать метод .find (), встроенный в BS4, но он видит код как питоны, встроенные в .find()

Я не знаю, как это исправить. Я пробовал использовать .soup.find (), но, похоже, это тоже не помогло.

Вот мой код, я получаю ошибку в строках 9 и 10

 from bs4 import BeautifulSoup import requests  html_text = requests.get('https://www.diyelectronics.co.za/store/353-printers') soup = BeautifulSoup(html_text.text, 'lxml')  printers = soup.find('ul', class_='product_list grid row') for printer in printers:  printer_price = printer.find('span', class_='price product-price')  printer_name = printer.find('h5', class_='product-name-container')   print(f'''  Printer Name: {printer_name}  Printer Price: {printer_price}  ''')  

Комментарии:

1. printers = soup.find('ul', class_='product_list grid row') —gt; printers = soup.find_all('ul', class_='product_list grid row')

Ответ №1:

Если существует несколько lt;ulgt; элементов с классом of product_list grid row , вы должны использовать .find_all() вместо .find() :

 printers = soup.find_all('ul', class_='product_list grid row')  

Комментарии:

1. Это все исправило, но я не совсем понимаю, почему. Я понимаю, почему вы используете find_all (), поскольку существует более 1 элемента lt;ulgt;. Но почему это меняет код, который виден из Pythons .find (), на BeutifulSoups .find() Я все еще новичок, но я просто хочу учиться и избегать ошибок?

2. потому что, если вы используете, .find() он вернет первое вхождение, похожее на строку, а затем вы пройдете по этой строке и вызовете .find() каждый символ в этой строке, и это вызовет ошибку. @JonathanLangford

3. О, теперь я понимаю, большое вам спасибо! Я действительно ценю это.