以下是我用于抓取网页的代码。我想要抓取的网站有启用图像延迟加载,因此scrapy只能抓取100个图像中的10个,其余的都是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);
});
答案 0 :(得分:2)
问题是懒惰加载是由javascript进行的,scrapy无法处理,casperjs处理这个问题。
要使用scrapy进行此操作,您必须将其与Selenium或scrapyjs混合
答案 1 :(得分:1)
要在延迟加载中抓取图像,您必须跟踪返回图像的ajax请求。在此之后你在scrapy中击中了这个请求。从特定页面获取所有数据后。您必须通过scrapy请求中的meta将提取的数据发送到其他回调。如需进一步的帮助Scrapy request