Соскрести стол, построенный на основе Spry, используя BeautifulSoup - PullRequest
0 голосов
/ 29 августа 2018

Эта страница содержит таблицу, которую я хочу записать с BeautifulSoup:
Ароматы какао - Шоколадная база данных

Таблица расположена внутри div с идентификатором spryregion1, однако ее нельзя идентифицировать с идентификатором, поэтому вместо этого я расположил ее по ширине таблицы, а затем разместил все элементы tr.

printing all 'tr' elements

Заголовки столбцов заключены в элементы th, а записи в каждой строке - в td. Я попробовал несколько способов, но не смог очистить все строки и поместить их в файл CSV.

Может ли кто-нибудь дать мне помощь / совет? Спасибо!

Статья о создании Spry Regions, которую я нашел

1 Ответ

0 голосов
/ 31 августа 2018

Таблица, которую вы ищете, не содержится в HTML для страницы, которую вы запрашиваете. Страница использует Javascript для запроса другого HTML-документа, содержащего его, который затем оборачивает, используя <div>, который вы искали.

Чтобы получить таблицу, вы можете использовать инструмент браузера, чтобы найти URL, который запрашивает страница, и использовать его, чтобы получить нужную страницу:

import requests
from bs4 import BeautifulSoup
import csv

r = requests.get("http://flavorsofcacao.com/database_w_REF.html")
soup = BeautifulSoup(r.content, "html.parser")

with open('output.csv', 'w', newline='', encoding='utf-8') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow([th.get_text(strip=True) for th in soup.table.tr.find_all('th')])

    for tr in soup.table.find_all("tr")[1:]:
        csv_output.writerow([td.get_text(strip=True) for td in tr.find_all('td')])

Оттуда вы можете сначала извлечь строку заголовка путем поиска записей <th>, а затем выполнить итерацию всех строк. Данные могут быть записаны в файл CSV с использованием библиотеки CSV Python.

Даю вам output.csv файл, начинающийся с:

Company (Maker-if known),Specific Bean Origin or Bar Name,REF,Review Date,Cocoa Percent,Company Location,Rating,Bean Type,Broad Bean Origin
A. Morin,Bolivia,797,2012,70%,France,3.5,,Bolivia
A. Morin,Peru,797,2012,63%,France,3.75,,Peru
A. Morin,Brazil,1011,2013,70%,France,3.25,,Brazil

Протестировано с использованием Python 3.6.3

...