Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2019 01:06:08

tihiy
Зарегистрирован: 2019-08-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсить картинки

Помогите адаптировать скрипт под любой сайт где есть качественные картинки товаров.
Скрипт: https://holoborodko.com.ua/software/parsing-images-on-python/

Список подходящих сайтов
https://rozetka.com.ua
https://www.ebay.com
Любой другой выпадаюющий с гугл поиска при вводе артикула товара.

Список товаров/артикулов.
8809071365238
8809520941846
8809520941860
8809317961149
8809520941907

Прикреплённый файлы:
attachment python-site-parser-with-logs-master.zip (3,5 KБ)

Офлайн

#2 Авг. 23, 2019 06:25:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Парсить картинки

tihiy
Помогите адаптировать скрипт
Ты его не сможешь адаптировать потому, что он сделан непрофессионально. Именно поэтому нихрена не понятно, что он делает (то есть надо сидеть три часа разбираться, нет ли в нём ошибок вообще), и переделать его тоже нельзя, так как он не приспособлен для этого изначально. Профессиональный же скрипт можно поправить в двух-трёх местах, чтобы он начал работать полностью по-другому, при этом не имея в себе ошибок. В таких скриптах всё прозрачно и везде видно сразу, что он делает и что он правильный в каждой своей части и в соединениях между частями.

Так что пиши скрипт заново, а из этого скрипта можешь брать только некоторые общие идеи.



Отредактировано py.user.next (Авг. 23, 2019 06:28:12)

Офлайн

#3 Авг. 23, 2019 11:18:49

tihiy
Зарегистрирован: 2019-08-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсить картинки

py.user.next
К сожалению в данный момент я не располагаю стольким временем, чтоб заново написать скрипт. Нужно многому учиться.

этот скрип рабочий. свою функцию выполняет. python3 его отрабатывает на отлично.

Я завтыкал на 27 строчке. Незнаю как найти нужный клас с картинкой и взять на нее ссылку.

Отредактировано tihiy (Авг. 23, 2019 18:24:48)

Офлайн

#4 Авг. 23, 2019 11:31:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Парсить картинки

tihiy
К сожалению в данній момент я не располагаю стольким временем, чтоб заново написать скрипт

Я, конечно, дико извиняюсь, но у вас там целых 50 строк кода! Правда, из них шесть строк принты, восемь строк комментариев и две пустые, но… Я понимаю, что переделать такой объем кода непрсто и времени потребуется пару недель минимум, но вы то просите ровно о том же. То есть вы на свой код времени тратить не хотите, а кто то другой, вероятно, захочет. Такая логика?



Офлайн

#5 Авг. 23, 2019 18:23:49

tihiy
Зарегистрирован: 2019-08-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсить картинки

FishHook
Извиняюсь если вас потревожил и отвлек своим сообщением. Вы так много написали текста но к сожалению не того, что мне поможет. Все же спасибо.

Код переделал.
Поднял свой скил.
Вот результат.
 import urllib.request
import os
import time
from bs4 import BeautifulSoup
import re
#Определяем время в системе
time = time.strftime("%Y-%m-%d-%H-%M")
print(time)
#Определяем директорию в системе
dir = os.path.dirname(os.path.abspath(__file__))
#Прописываем хост сайта, который будем парсить
host = 'https://www.ebay.com'
#Определяем название файла с логом.
file = open("log-{}.txt".format(time), "w")
#Пробуем что-то написать в файл.
file.write(time)
for line in open("products.txt"):
	data = line.split(",")
	Serchartikul = data[1].strip()
	
	#Параметры строки поиска на сайте   не знаю как формировать из 2х частей славо богу работает без второй части
	#/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=8809071365238&_sacat=0&LH_TitleDesc=0&_osacat=0&_odkw=8809520941846
	url = "{}/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw={}".format(host, data[0])
	#Получаем ответ
	print(url)
	url = urllib.request.urlopen(url)
	if url.getcode() == 200:
		soup = BeautifulSoup(url, "lxml")
		product = soup.find('div', {'class': 's-item__image'})
		links = product.find_all('a')
		
		#Тут Нужна проверка для выхода из цикла, на случай если переменнаproduct = soup.find('div', {'class': 's-item__image'})
		links = product.find_all('a')я   links = пустая  + запись в текстовый файл артикула товара которого нет на сайте соответственно нет картинок.
		
		for a in links:
			link = a.get('href')
			print(link)
			#Достаем ссылку на товар в результатах поиска
			link = urllib.request.urlopen(link)
			if link.getcode() == 200:
				soup = BeautifulSoup(link, "lxml")
				#Разбираем страницу товара
				picture = soup.find('meta', content=re.compile('i.ebayimg.com')).get('content')
				print(picture)
				
				#href = "{}{}".format(host, data)
				#Отладочный принт
				#print(href)
				img = urllib.request.urlopen(picture).read()
				#Обрабатываем имя картинки. чтобы сохранить в коректном формате
				name = data[0] +'.jpg'
				print(name)
				
				#Формируем путь для сохранения картинок
				path = "{}/images/{}.{}".format(dir, Serchartikul, name)
				f = open(path, "wb")
				f.write(img)
				f.close()
				
			else:
				print("Не удалось открыть страницу товара {}".format(data[1]))	
		
	else:
	 	print("Не получен HTTP ответ 200")

На 40 ковой строчке столкнулся с проблемой выхода из цикла(вернее перезапуска, для поиска нового артикула) в случае пустой переменной.
product = soup.find('div', {'class': ‘s-item__image’})
links = product.find_all('a')
Повторюсь я не знаю языка Python, когда-то немного учил Java.
Написание даеться трудно, если у кого-то есть возможность подсобите.
Спасибо.

Отредактировано tihiy (Авг. 23, 2019 20:51:35)

Офлайн

#6 Авг. 23, 2019 19:50:15

tihiy
Зарегистрирован: 2019-08-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсить картинки

Нужно добавить
try:
except AttributeError:
continue


О Исключениях в python. Конструкция try - except для обработки исключений
https://pythonworld.ru/tipy-dannyx-v-python/isklyucheniya-v-python-konstrukciya-try-except-dlya-obrabotki-isklyuchenij.html

Отредактировано tihiy (Авг. 23, 2019 21:57:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version