27
Апр
2021

Как парсить данные с одинаковыми классами?

Как парсить данные с одинаковыми классами? На картинке у меня есть "Разработчик" с классом "dev_row" и "Издатель" с таким же классом, как мне спарсить только "Издателя". Ниже приведен код, который парсить данные со страницы стима, надо добавить еще и издателя.

import requests
from bs4 import BeautifulSoup
import csv

HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 YaBrowser/20.11.3.183 Yowser/2.5 Safari/537.36'
}
FILE = 'games.csv'


def get_html(url, params=None):
    req = requests.get(url, headers=HEADERS, params=params)
    return req


def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='block_content page_content')
    games = []

    for item in items:
        date = item.find('div', class_='date')
        if date:
            date = date.get_text(strip=True)
        else:
            date = 'Date unknown'
        games.append(
            {
                'date': date,
                'developer': item.find('div', class_='dev_row').get_text(strip=True).replace('Разработчик:', ''),
                'description': item.find('div', class_='game_description_snippet').get_text(strip=True)
            }
        )
    return games


def save_file(items, path):
    with open(path, 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file, delimiter=';')
        writer.writerow(['DATE', 'DEVELOPER','PUBLISHER', 'DESCRIPTION'])
        for item in items:
            writer.writerow([item['date'], item['developer'],item['publisher'], item['description']])


def parser():
    games = []
    with open("racesru.csv", newline='', encoding='cp1251') as csvfile:
        reader = csv.reader(csvfile, delimiter=';')
        for row in reader:
            link = row[4]
            if (link != '0' and link != 'LINK'):
                url = link
                print(url)
                html = get_html(url)
                if html.status_code == 200:
                    games.extend(get_content(html.text))
                else:
                    print('Error')
    save_file(games, FILE)

parser()

введите сюда описание изображения

Источник: https://ru.stackoverflow.com/questions/1275637/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%B0%D1%80%D1%81%D0%B8%D1%82%D1%8C-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81-%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2%D1%8B%D0%BC%D0%B8-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D0%BC%D0%B8

Тебе может это понравится...

Добавить комментарий