Как скрести ленивую загрузку изображений с помощью Python Scrapy

Вот код, который я использовал для сканирования веб-страницы. На сайте, который я хочу очистить, включена отложенная загрузка изображений, так что scrapy может захватить только 10 из 100 изображений, все остальные - placeholder.jpg. Как лучше всего справиться с ленивой загрузкой изображений в Scrapy?

Спасибо!

class MasseffectSpider(scrapy.Spider):
name = "massEffect"
allowed_domains = ["amazon.com"]
start_urls = [
    'file://127.0.0.1/home/ec2-user/scrapy/amazon/amazon.html',
]


def parse(self, response):

for item in items:
    listing = Item()
    listing['image'] =  item.css('div.product img::attr(src)').extract()
    listing['url'] =  item.css('div.item-name a::attr(href)').extract()
    listings.append(listing)

Кажется, что другие инструменты, такие как CasperJS, имеют окно просмотра для загрузки изображений.

casper.start('http://m.facebook.com', function() {

// The pretty HUGE viewport allows for roughly 1200 images.
// If you need more you can either resize the viewport or scroll down the viewport to load more DOM (probably the best approach).
this.viewport(2048,4096);

this.fill('form#login_form', {
    'email': login_username,
    'pass':  login_password
}, true);
});

2 ответа

Решение

Проблема в том, что Javascript делает ленивую загрузку, с которой не справляется scrap, это делает casperjs.

Чтобы сделать это с помощью скрапа, вы должны смешать его с Selenium или scrapyjs.

Чтобы очистить изображения при ленивой загрузке, вы должны отслеживать ajax-запрос, который возвращает изображения. После этого вы ударили эту просьбу насквозь. После получения всех данных с определенной страницы. Вы должны отправить извлеченные данные на другой обратный вызов через мета в запросе scrapy. Для получения дополнительной помощи запрос Scrapy

Другие вопросы по тегам