2014-11-27 2 views
0

Я пытаюсь загрузить изображения с этого сайта: http://www.domu.com/chicago/neighborhoods/humboldt-park/1641-n-maplewood-ave-apt-1-chicago-il-60647Scrapy Загрузить изображение 403 Ошибка

Цель сайта в последнее время изменилось, как они поставляют изображения с уникальным URL. Я получаю ошибку 403 при загрузке изображений. Ссылка ниже. Я могу загрузить каждое изображение один раз в браузере. После загрузки изображения один раз последующие запросы создают ошибку 403. Когда я изменяю браузер в частный режим, я могу повторно загрузить изображение несколько раз. Это заставило меня поверить, что они каким-то образом отслеживают файлы cookie. Я попытался отключить куки в scrapy, но по-прежнему получаю ошибку 403. Я также пытался включить файлы cookie, но обрабатывать один запрос за раз. Это также приводит к ошибке 403. Целевой сайт использует сервер лаков для кеша. Я предполагаю, что Varnish включает в себя некоторую технологию защиты от царапин.

http://www.domu.com/sites/default/files/styles/gallery/public/filefield/field_img/20141117_133559.jpg?itok=pDSP-06i

Любые мысли о том, как загружать изображения?

ответ

1

Здесь возможно решение с использованием Selenium Webdriver и команды wget.

С помощью Webdriver вы эмулируете навигацию браузера и извлекаете уникальный URL-адрес и загружаете команду wget.

from selenium import webdriver 
import time 
import scrapy 
class domuSpider(CrawlSpider): 
    name = "domu_spider" 
    allowed_domains = ['domu.com'] 
    start_urls = ['http://www.domu.com/chicago/neighborhoods/humboldt-park/1641-n-maplewood-ave-apt-1-chicago-il-60647'] 

    def __init__(self): 
     self.driver = webdriver.Firefox() 

    def parse(self, response): 
     self.driver.get(response.url) 

     for element in self.driver.find_elements_by_css_selector("img"): 
      print element.get_attribute('src') 
      time.sleep(1) 
      os.system('wget ' + element.get_attribute('src')) 
     self.driver.quit() 

Документация на http://selenium-python.readthedocs.org

+0

определенно разумное решение. Я надеялся избежать селена и выяснить, как его решить с помощью лучевой терапии. Я попытался повернуть IP через прокси-сервер и агент пользователя. Оба не решают проблему. – dfriestedt

+0

Интересно, могу ли я писать файлы непосредственно из ответа в scrapy. – dfriestedt

+0

Я получил ваше мнение, но когда я прочитал, был вопрос 403, первой хорошей идеей был Selenium. Несколько недель назад у меня была аналогичная проблема с сценарием ajax, который загружал изображения на лету. Было бы интересно понять, каким образом именно изображения на этом сайте доставлены – aberna

0

Я был в состоянии решить эту проблему, добавив ссылку на этот заголовок.

Я использовал этот пост, чтобы помочь: How to add Headers to Scrapy CrawlSpider Requests?

Вот мой заказ трубопровода изображения:

class MyImagesPipeline(ImagesPipeline): 
    def get_media_requests(self, item, info): 
     return [Request(x, headers={'referer': 'http://www.domu.com'}) for x in item.get(self.IMAGES_URLS_FIELD, [])] 
Смежные вопросы