Как скрести ленивую загрузку изображений с помощью 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