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