Парсинг картинок с nastol.com.ua - Python
Формулировка задачи:
Есть скрипт который успешно парсит обои из нужных категорий, но для одной категории нужна авторизация - авторизавался, а он все равно не дает парсить с этой ссылки как быть? (ош 404)
Cкрипт авторизации:
авторизирует нормально: структура страницы меняется
Решение задачи: «Парсинг картинок с nastol.com.ua»
textual
Листинг программы
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д