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

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

31.07.2017, 03:02. Показов 3283. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru