Перейти к следующему классу с тем же именем в Web Scraper - PullRequest
1 голос
/ 22 апреля 2020

Моя идея состоит в том, чтобы построить скребок для рынка, где я мог бы найти нужные мне вещи, в данном конкретном случае, кассеты, проблема в том, что когда я soup.find(attrs="NameOfTheClass"),

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

Я пытался некоторое время l oop, но он продолжает возвращать одно и то же верхнее значение.

import requests
from bs4 import BeautifulSoup
import time

URL = 'https://listado.mercadolibre.com.ar/cassette#D[A:cassette]'


headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'}

page = requests.get(URL, headers=headers)

soup = BeautifulSoup(page.content, 'html.parser')
try:
    while True:
        title = soup.find(attrs={'main-title'})
        price = soup.find(attrs=('price__fraction'))
        print(title,price)
        time.sleep(1)
except KeyboardInterrupt:
    print('done')


Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Попробуйте работать с CSS селектором

Пример

import requests
from bs4 import BeautifulSoup

URL = 'https://listado.mercadolibre.com.ar/cassette#D[A:cassette]'

headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/81.0.4044.113 Safari/537.36'}

page = requests.get(URL, headers=headers)

soup = BeautifulSoup(page.text, 'html.parser')

span = soup.select("span.main-title")
div = soup.select("div.price__container")


def get_title_and_price(span, div):
    for i, item in enumerate(span):
        title = item.getText()
        price = div[i].getText()
        print(title)
        print(price)


get_title_and_price(span, div)
0 голосов
/ 22 апреля 2020

Попробуйте использовать метод find_all

он должен вернуть список всех элементов этого класса. тогда вы можете перебрать этот список

...