Помогите собраться

Всем привет, вообщем у меня такая робота появилась мне надо искать на просторах интернета по артиклю(кстати пример: ALZBETA NICKEL SP) информация о предмете (мебель), размеры, цвет, стили ну и всё сопутствующее. Было решено призвать какой-нибудь скрипт к себе на помощь.

Решил не выдумывать и воспользовался таким вариантом github.com/antonmedv/homer. Поначалу мой радости не было предела чуть разобравшись кучу ссылок, но позже осознал, ситуацию это не изменило. Сейчас у меня в задание более 3000 позиций После этого возможно дадут ещё больше.

Вообщем в чём заключается моя просьба , мне явно нужен скрипт чтобы оптимизировать работу , но не могу придумать . Как мне отсеивать ненужную инфу и как захватывать нужную. Может тут есть кто чтоб помочь мне составить план с чего начать, может тему какую подкините для большего понимания этого вопроса , или просто советом хорошим буду благодарен.

Я себе представляю это приблизительно так нахожу страницу по заголовку ,считываю всю инфу, ненужную выкидываю, нужную записываю в базу.

В любом случае спасибо

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Во первых хочу поблагодарить всех кто подкинул инфу да и просто мимо проходящих)))
Сейчас у меня проблема другого типа . Я сделал парсер(Excel’вскую табличку ещё не закончил) но не могу с картинкой разобраться . Имеем функции
def get_name_image / def get_img /def save_image. Последняя вызывает двух других и картинка у нас , но х** там плавал. Я уж не знаю что делать , если вдруг можете что подсказать + в карму гарантирован)) Ну и собственно код

import requests
from bs4 import BeautifulSoup
import os
import time
import re
from lxml import html
import lxml
from lxml import etree
from urllib.request import *
import xlsxwriter

def get_html(url):
    r = requests.get(url)
    return r.text

def get_page_data(html):
    soup = BeautifulSoup(html, 'lxml')
    info = soup.find('div', class_='catalog_hr')#.find_all('b')[5].text

    tovname = soup.find('div', class_='catalog_tovname').find('a').text
    index = re.findall('(\d+)',tovname )

    for ad in info:
        
        try:
            heightm = ad.find('b')[2].text
        except:
            heightm = ''
        try:
            width = ad.find('b')[3].text
        except:
            width = ''
        try:
            in_lamp = ad.find('b')[4]
            lamp = in_lamp.split('x')[0]
            socle = in_lamp.split('x')[1]
        except:
            in_lamp = ''
        try:
            color_stl = ad.find('b')[7].text
        except:
            color_stl = ''
        try:
            type_stl = ad.find('b')[8].text
        except:
            type_stl = ''
        try:
            color_lamp = ad.find('b')[9].text
        except:
            color_lamp = ''
        try:
            type_lamp = ad.find('b')[10].text
        except:
            type_lamp = ''
        try:
            maker = ad.find('b')[12].text
        except:
            maker = ''

        data = {'index': index,
                    'heightm': heightm,
                    'width': width,
                    'lamp': lamp,
                    'socle': socle,
                    'color_stl': color_stl,
                    'type_stl': type_stl,
                    'color_lamp': color_lamp,
                    'type_lamp': type_lamp,
                    'maker': maker}


def get_name_image(html):
   name = html.split('/')[-1]
    


def get_img (html):
    sup_url = 'https://www.lampa.kiev.ua'
    soup = BeautifulSoup(html, 'lxml')
    image = sup_url + soup.find('a', class_='multiple').get('href')

    return image.text

def save_image(name , file_object):
    with open(name, 'bw') as f:
        for chunk in file_object.iter_content():
            f.write(chunk)

#def get_index(html):
   # soup = BeautifulSoup(html, 'lxml')
    #tovname = soup.find('div', class_='catalog_tovname').find('a').text
    #index = re.findall('(\d+)',tovname )

    #return index



def export_excel(filename , data):
    workbook = xlsxwriter.Workbook(filename)
    worksheet = workbook.add_worksheet()

    field_names = ('код товару',
                     'назва серії, модель',
                      'група товару для сайту',
                      'опис',
                      'виробник',
                      'країна',
                      'дизайн',
                      'кількість патронів',
                      'цоколь',
                      'колір плафона',
                      'матеріал плафона',
                      'колір арматури',
                      'матеріал арматури',
                      'розмір (см) Ш',
                      'розмір (см) В',
                      'розмір (см) Г',
                      'фото')

    for i ,field in enumerate(field_names):
        worksheet.write(0, i, field)

    fields = ('index', 'name', '')

    workbook.close()

def main():
    url = 'https://www.lampa.kiev.ua/ua/katalog/searchANJA+X'
    save_image(get_name_image(html),get_img (html))
    data = []
    export_excel('data.xlsx', data)


if __name__ == '__main__':
    main()
Ну и ошибки
Traceback (most recent call last):
  File "C:\Users\игор\Desktop\4Wscript\lampa.py", line 139, in <module>
    main()
  File "C:\Users\игор\Desktop\4Wscript\lampa.py", line 129, in main
    save_image(get_name_image(html),get_img (html))
  File "C:\Users\игор\Desktop\4Wscript\lampa.py", line 73, in get_name_image
    name = html.split('/')[-1]
AttributeError: module 'lxml.html' has no attribute 'split'
Честное слово пробовал бороться !

Чистым нерусским языком написано «html это название модуля!» и добавлено по-русски уже от души «б.дь!» (к) (тм)

ЗЫ: копать отсюда

def main():
...
save_image(get_name_image(html),get_img (html))

В данном месте переменная html не определена и надо полагать туда проваливается модуль ’lxml.html’ и это первое место где по стеку вызовов этот параметр реально используется.

странно что не определена html , ведь get_page_data , откуда-то ж данные берёт

В get_name_image мне нужно передать ,image из функции get_img в таком виде чтоб он последнюю часть с циферками оставил и потом подставил как имя. но я блин не знаю как это сделать

ЗЫ: я таки не эксперт по питону но мне интересно общий вопрос а что это действительно реально трудно понять? (здесь вопрос к all)

Такие косяки повылазили поскольку мне не нужна прямая ссылка на картинка , мне нужно с одного url подгрузить все данные в нужной форме , а поскольку слабо знаком с взаимодействиями всего этого вот и косяки вылазят , мне по факту нужно из

def get_img

вытащить image и вставить его в

get_name_image

, ибо если в самом методе

get_img

получить имя , то потом вообще не понятно как из одного метода вытягивать обе переменные

Здається,

from lxml import html

взагалі зайвий

get_name_image(html),get_img (html)

після get_img — зайвий пробіл

да это всё мелочи , библиотеки лишние потому что я до 7 утра кучу вариантов перепробывал, а пробелы потому что я код много раз перекидывал то в файлик другой чтоб понять и пофиксить траблы , выхлопа ноль

просто через той імпорт з’являється змінна яка може перетиратись...

www.youtube.com/...​atch?v=8vwoc0n6Isc&t=955s
видео по которому писались

def get_name_image>
def get_img
def save_image

ясно, спробуй розібратись що ж воно робить...
бо бачу, що нема розуміння того що там відбувається.

Решил проблему таким образом

def get_html(url):
    html = requests.get(url)
    return html


def get_img (html):
    sup_url = 'https://www.lampa.kiev.ua'
    soup = BeautifulSoup(html.text)
    image = sup_url + soup.find('a', class_='multiple').get('href')
    urlretrieve(image , image[37:])
    print(image[37:] , 'download')



   



def main():
    url = 'https://www.lampa.kiev.ua/ua/katalog/searchANJA+X'
    html = get_html(url)
    get_img(html)

Идея почерпнул здесь stackoverflow.com/...​-type-response-has-no-len
компилятор конечно ругается но работу делает

Вручную не вариант , лучше по выбрать сайт и с него стягивать . Ибо ну очень долго по времени выходит

Есть два варианта: выбрать некие сайты, на которых ты уже знаешь где что размещено; либо делать анализ : к примеру: размеры — это цифры с «м», «мм», «см».... Цвета это слова : «красный», «синий»... Аналогично со всем остальным.

Размечтался. В этом и суть человеческой работы, чтобы нужное от ненужного отделять. Если бы ты это умел скриптом, Гугл бы тебе в подмётки не годился.

Спасибо за совет буду пользовать

Спасибо ,со временем всё относительно ,вроде сроков на скрипт нет , но и позиции надо делать поэтому делю время пополам на то и другое. Больше смогу сказать после ознакомления.

Крутил я как то api Prodvigator’a (который нынче serpstat) — это замерщик позиций, демо тут serpstat дот ком , и выдачу там можно организовать по ключевым словам и тп. С этого апи теоретически можно забирать интересные нам страницы, а дальше парсить их, и через какую то библиотечку аля jquery-on-php (названия не помню, но юзал такую) по тексту или по тегам, а в лучшем случае по микроразметке.

Спасибо за совет , скажу больше разобравшись

Имхо использовать самописный краулер- плохая идея. Я бы лучше заплатил гуглу, у них вроде есть custom search api. Вообще-то это поиск по своему сайту, но там могут быть ньюансы. Смысл в том, что вы по расписанию через rest api делаете поисковые запросы к сервису и получаете набор ссылок на сайты в json, который разбираете своим скриптом, вылавливая новые ссылки.
Вот нашел от майкрософт azure.microsoft.com/...​-services/search-api/web Вот гугл developers.google.com/...​docs/tutorial/creatingcse

Спасибо за ответ , после ознакомления скажу больше.

Подписаться на комментарии