Данные таблицы скрапа - PullRequest
       13

Данные таблицы скрапа

0 голосов
/ 27 февраля 2020

Я новичок в кодировании, теперь я начал с Python и Scrapy, и это мой первый код.

В связи со следующей проблемой, что таблица, которую я собираю, не отформатирована в столбцах с заголовком / index, но в строке, поскольку каждая страница имеет переменное количество столбцов и строк, становится трудно разделить все впоследствии в .CSV или JSON, поскольку атрибуты будут смешаны.

Примеры: https://www.kavalier.cz/en/lab-burners-sp292.html

Столбцы:

Код
Тип
Давление (Па)
Расход (Нм3 / ч)
Выход (Вт)
Вес (г)

https://www.kavalier.cz/en/desiccator-with-glass-knob-sp94.html

Столбцы:

Код
Номер
Тип
d1 (мм)
d2 (мм)
ч (мм)
Упаковка (p c)

    #Open product page
def parse(self, response):
    urls = response.css('a.btn.btn-default::attr(href)').extract()
    for url in urls:
        url = response.urljoin(url)
        yield scrapy.Request(url=url, callback=self.parse_details)


    #Pagination
    next_page_url = response.css('a.page-link.next::attr(href)').extract_first()
    if next_page_url:
        next_page_url = response.urljoin(next_page_url)
        yield scrapy.Request(url=next_page_url, callback=self.parse)

#Product Details
def parse_details(self, response):
    yield {
    'Product_Name': response.css('.content > h2::text').extract_first(),
    'Category': response.css('.breadcrumb > li:nth-child(4) > a ::text').extract_first(),
    'Image_Url': response.css('.main-img > a::attr(href)').extract_first(),
    'Table': response.xpath('//tr/td/text()').extract(),

    }`

Как настроить мой код так, чтобы все переменные заголовки таблиц были подсчитаны и помещены в столбцы + их данные.

1 Ответ

1 голос
/ 27 февраля 2020

Я предполагаю, что вы пытаетесь удалить данные таблицы с веб-сайта, в этом случае вы можете использовать приведенный ниже код. Это сделает работу за вас легко.

import requests
import pandas as pd
url = 'https://www.kavalier.cz/en/desiccator-with-glass-knob-sp94.html'
html = requests.get(url).content
df_list = pd.read_html(html)
df = df_list[-1]
print(df)
...