Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72

Парсинг картинок с nastol.com.ua

31.07.2017, 03:02. Показов 3318. Ответов 21

Студворк — интернет-сервис помощи студентам
Есть скрипт который успешно парсит обои из нужных категорий, но для одной категории нужна авторизация - авторизавался, а он все равно не дает парсить с этой ссылки как быть? (ош 404)
Cкрипт авторизации:

Python
1
2
3
4
5
6
7
8
9
def auth():
    session = requests.Session()
    url ='http://www.nastol.com.ua/index.php'
    params = {'login':"submit",'login_name':"DarkChirik",
            'login_password':"e2RmE5ars09",
            'image':"%C2%EE%E9%F2%E8"}
 
    
    r = session.post(url,params)
авторизирует нормально: структура страницы меняется
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2017, 03:02
Ответы с готовыми решениями:

Парсинг html страницы картинок
Здравствуйте. Есть код: import requests from bs4 import BeautifulSoup as bs import random import lxml.html r =...

Парсинг подгружаемых картинок с aliexpress
Вообщем я пытаюсь достать ссылки картинок с алиэкспрес при помощи selenium, проблема возникла тогда когда понадобилась ссылка не на первую...

Парсинг картинок
Здравствуйте. Хочу спарсить ссылки картинок в гугле. Допустим запрос - яблоко через selenium не могу получить атрибут. хочу получить...

21
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
31.07.2017, 17:19
клик
1
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
01.08.2017, 09:33
'image':"войти"
Интересная картинка наверное.
А если серьезно, то что конкретно надо парсить?
1
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
01.08.2017, 10:43  [ТС]
Цитата Сообщение от Delvin-fil Посмотреть сообщение
'image':"войти"
Не помогло. Надо спарсить картинки 18+
0
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
01.08.2017, 10:52
Еще раз: Какой выхлоп нужен? Адреса конечных картинок? Размеры? Новинки? Что спаристь?
0
01.08.2017, 11:04

Не по теме:

Цитата Сообщение от DarkChirik Посмотреть сообщение
Не помогло. Надо спарсить картинки 18+
Раз не можешь распарсить, значит наверно рано пока такие картинки качать :D

0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
01.08.2017, 11:19  [ТС]
Сами картинки
Цитата Сообщение от Delvin-fil Посмотреть сообщение
Еще раз: Какой выхлоп нужен? Адреса конечных картинок? Размеры? Новинки? Что спаристь?
Добавлено через 2 минуты
Цитата Сообщение от Delvin-fil Посмотреть сообщение
Еще раз: Какой выхлоп нужен? Адреса конечных картинок? Размеры? Новинки? Что спаристь?
сами картинки
0
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
02.08.2017, 14:51
Цитата Сообщение от DarkChirik Посмотреть сообщение
сами картинки
Адреса картинок? ВСЕХ?
Если только адреса, то ночером(или завтра) наваяю. Выхлоп под wget(можно и CSV), ибо сам питон будет зверски на скачивании тормозить.
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
02.08.2017, 16:17  [ТС]
В общем вся суть да дело в вопросе: он мне парсит картинки нормально, но я хотел еще и авторизироваться, а вот это вроде как выходит, а инфа для зарегистрированных все еще недоступна (ошибка 404 при парсинге), короче надо залогиниться, что ни пробывал не выходит, а может криво пробовал Х ))) Поможешь?

Добавлено через 1 минуту
У меня, кстати, парсит 10 фото в минуту. Это как по скорости медленно или норм?
0
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
02.08.2017, 18:05
Цитата Сообщение от DarkChirik Посмотреть сообщение
короче надо залогиниться, что ни пробывал не выходит, а может криво пробовал
Дай весь код.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.08.2017, 19:33
Лучший ответ Сообщение было отмечено DarkChirik как решение

Решение

Цитата Сообщение от DarkChirik Посмотреть сообщение
парсит 10 фото в минуту
У меня 35 фото в минуту вместе с загрузкой каждого изображения.

Дарю готовый код (заголовки, доп. проверки на ошибки и пр. - это уже добавляйте сами):-)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import requests
import lxml.html
import re
import os
import time
 
def gettime():
    return time.strftime("%d.%m.%Y %H:%M:%S",time.localtime()) 
 
def get_pagination(html):
    tree = lxml.html.fromstring(html)
    num_page = tree.xpath('.//div[@class="navigation"]//a/text()')
    return int(num_page[-1])
 
pattern = re.compile(r'images/(\d+)/.+_(\d+)\..+')
 
def get_url_by_resolution(url,resolution):
    result = None
    match = pattern.search(url)
    if match:
        images,number = match.groups()
        result ='{host}/download.php?img={images}/{resolution}/nastol.com.ua-{number}.jpg'.format(
                host=host,
                images=images,
                resolution=resolution,
                number=number)
                
    return result
 
def get_original_url(html):
    tree = lxml.html.fromstring(html)
    url_original = tree.xpath('.//span[@class="orig"]//a/@href')
    return url_original
 
def save_image(image_name,content):
    with open(os.path.abspath(os.path.join('./Images/',image_name)),'wb') as f:
        f.write(content)
        print("Сохранен файл:",image_name,'|',gettime())
 
 
def main(resolution=None):
    
    form = {
    'login':'submit',
    'login_name':login,
    'login_password':password,
    'image':''
    }
    
    session = requests.Session()
    resp = session.post("{}/ero/".format(host),data=form)
    html = resp.text
    
    tree = lxml.html.fromstring(html)
    title = tree.xpath('.//title')[0].text
    
    if title == 'www.nastol.com.ua':
        raise Exception('Авторизация не пройдена!')
    print('Title:',title.encode(resp.encoding,'replace').decode('1251'))
    
    num_page = get_pagination(html)
    print('Всего страниц:',num_page)
    
    for page in range(1,num_page):
        resp = session.get('{}/ero/page/{}'.format(host,page))
        tree = lxml.html.fromstring(resp.text)
        # парсим на каждой странице 9 ссылок на страницы выбора вариантов загрузки
        hrefs = tree.xpath('.//a[@class="screen-link"]/@href')
        
        for href in hrefs:
            resp = session.get(href)
            #  страницы выбора вариантов загрузки берем url на оригинальную картиинку
            url_original = get_original_url(resp.text)
            if not url_original:
                print('Url для загрузки оригинального изображения не найден.')     
            else:
                url = '{}/{}'.format(host,url_original[0])
                #  для выбора по разршению - get_url_by_resolution(url,resolution)
                if resolution:
                    url = get_url_by_resolution(url,resolution)
                    if url is not None:
                        image_name = url.split('-')[1]
                    else:
                        print('Для данного разрешения {} изображение не найдено' % resolution)
                else:
                    image_name = url.split('_')[1]
                
                print(url)
                resp = session.get(url)
                status = resp.status_code
                if status == 200:
                    try:
                        save_image(image_name,resp.content)
                    except OSError as err:
                        print(err)
                else:
                    print('Status:',status,url)                
 
if __name__ == "__main__":
    host = 'http://www.nastol.com.ua'
    try:
        main(resolution='1920x1080')
    except KeyboardInterrupt:
        pass
Добавлено через 25 минут
Мелкие ошибки:
В строке 'Для данного разрешения {} изображение не найдено' % resolution нужно {} заменить на %s.
В цикле for page in range(1,num_page) добавить единицу к num_page: range(1,num_page + 1 )
1
 Аватар для Delvin-fil
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 215
02.08.2017, 19:47
Цитата Сообщение от Garry Galler Посмотреть сообщение
Дарю готовый код

А я не успел
ЗЫ: На свистке не более десяти в минуту при разрешении 1920x1080.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.08.2017, 20:13
К ошибкам: еще нужно добавить continue после строки print('Для данного разрешения..., чтобы скрипт перешел на следующую итерацию.

Добавлено через 26 минут
И еще: сайт, оказывается, не шлет 404, если файл по url'у не найден, а отдает html со строкой File Not Found.
Поэтому стоит добавить такую проверку перед строкой if status == 200:
Python
1
2
3
4
content = resp.content
if content in b'File Not Found':
    print('File Not Found')
    continue
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.08.2017, 16:47
Цитата Сообщение от Garry Galler Посмотреть сообщение
print("Сохранен файл:",image_name,'|',gettime())
Для этого есть библиотека logging
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
03.08.2017, 20:58  [ТС]
А что такое "свисток"?
0
03.08.2017, 21:27

Не по теме:

Цитата Сообщение от DarkChirik Посмотреть сообщение
А что такое "свисток"?
Я так понимаю, имелся ввиду usb-модем. (Свисток - его народное прозвание. С одной стороны - похож, с другой - воткнул и свистишь, в том смысле, что деньги на ветер :-))

0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.08.2017, 06:31
3g модем
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
04.08.2017, 10:26  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Мелкие ошибки:
В строке 'Для данного разрешения {} изображение не найдено' % resolution нужно {} заменить на %s.
В цикле for page in range(1,num_page) добавить единицу к num_page: range(1,num_page + 1 )
__________________
Вот еще какую ошибку выдает:

Traceback (most recent call last):
File "C:\Users\admin\Desktop\Тест.py", line 102, in <module>
main(resolution='1920x1080')
File "C:\Users\admin\Desktop\Тест.py", line 61, in main
num_page = get_pagination(html)
File "C:\Users\admin\Desktop\Тест.py", line 13, in get_pagination
return int(num_page[-1])
IndexError: list index out of range
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.08.2017, 12:43
DarkChirik,
А что вы передаете функции get_pagination? Если что-то отличное от стартовой страницы категории, то там xpath, конечно, не будет находить нужный элемент содержащий пагинацию страниц.
В том виде, в каком я вам дал скрипт - он полностью рабочий,
Кликните здесь для просмотра всего текста

за исключением того, что для длительной закачки всех изображений (порядка 30 тысяч) требуется механизм учета загруженных картинок и режим докачки (без повторов уже загруженных фото) на случай преждевременного завершения скрипта.
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
04.08.2017, 13:37  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
DarkChirik,
А что вы передаете функции get_pagination? Если что-то отличное от стартовой страницы категории, то там xpath, конечно, не будет находить нужный элемент содержащий пагинацию страниц.
В том виде, в каком я вам дал скрипт - он полностью рабочий,
Кликните здесь для просмотра всего текста
за исключением того, что для длительной закачки всех изображений (порядка 30 тысяч) требуется механизм учета загруженных картинок и режим докачки (без повторов уже загруженных фото) на случай преждевременного завершения скрипта.
Спасибо )) Извиняюсь. Не подскажете где лучше посмотреть про парсинг методом xpath, а то я об этом ничего не знаю (пользуюсь BeautifulSoup )?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2017, 13:37
Помогаю со студенческими работами здесь

Парсинг картинок
Есть каталог ейвон, нужно его скачать. Но доступно только по одной страничке Картинка Меняются числа(номера страниц, только...

Парсинг картинок
Есть каталог ейвон, нужно его скачать. Но доступно только по одной страничке Картинка Меняются числа(номера страниц, только...

Парсинг картинок
Прошу помочь в решении задачи все равно на каком языке, программой или методом, главное чтобы быстро. Есть HTML код сохраненный в файл...

Парсинг картинок
Непонятная ошибка вылетает при парсинге: Warning: file_get_contents(http://www.planespotters.net/photo/676169/) : failed to open stream:...

Парсинг картинок в массив
Господа, помогите! Много рыл, но так и не нашел нормального ответа, т.к. только начинаю работать с сетью на плюсах.Есть сайт онлайн...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru