Python 3 实战Scrapy爬取美女壁纸图

简介

之前写了一篇爬妹子图的文章《Python 3 实战Scrapy爬取妹子图》,但是有点粗糙,几乎都是无差别抓取页面所有图片和链接然后过滤,这篇文章优化了代码,让我们的爬虫更高效,爬取的图片质量更高,这里我选了一个妹子图非常多、质量非常高、又很正经的壁纸网站来实验,这里是爬取页面入口->,点击查看

1.一级页面分析

打开F12分析了这个页面,你会发现这个页面很简单,分页都给你写清楚了多少页,主体页面是一个div+css结构,列表用了ul+li标签:


Screenshot from 2017-07-12 22-08-13.png

用一句xpath表达式就能获取到li标签里面所有的a链接地址,高效而且无多余的链接

 # 一级页面的处理函数
    def parse(self, response):
        # 提取界面所有的符合入口条件的url
        all_urls = response.xpath('//div[@class="main"]/ul/li/a/@href').extract()
        # 遍历获得的url,继续爬取
        for url in all_urls:
            # urljoin生成完整url地址
            url = urljoin(response.url, url)
            yield Request(url, callback=self.parse_img)

2.二级页面分析

当我们点击一个美女图片之后会进去一个二级页面,这个页面的才是这个美女的所有图片合集,这个页面比较简单:


Screenshot from 2017-07-12 22-16-35.png
# 二级页面的处理函数
    def parse_img(self, response):
        item = PicscrapyItem()
        # 提前页面符合条件的图片地址
        item['image_urls'] = response.xpath('//img[@id="bigImg"]/@src').extract()
        yield item
        # 提取界面所有复合条件的url
        all_urls = response.xpath('//ul[@id="showImg"]/li/a/@href').extract()
        # 遍历获得的url,继续爬取
        for url in all_urls:
            url = urljoin(response.url, url)
            yield Request(url, callback=self.parse_img)

通过parse和parse_img这两个函数的递归调用就可以获取所有符合条件的图片,基本上不会访问多余的链接,下载多余的图片...
另外下载图片的时候做了一些优化,之前图片名称是随机生成,现在改成取url一部分加随机数,这样同一个妹子的图片就可以放到一起了,不会乱七八糟了,方法是重写父类函数

 # 重写函数,修改了下载图片名称的生成规则,改成了url地址的最后一个加了随机送
    def file_path(self, request, response=None, info=None):
        if not isinstance(request, Request):
            url = request
        else:
            url = request.url
        url = urlparse(url)
        img_name = url.path.split('/')[5].split('.')[0] + '-' + str(random.randint(1000, 9999))
        return '%s.jpg' % img_name

总结

经过优化后,100M宽带轻轻松松跑满,目测这个页面应该有上万张图片,童鞋,你的硬盘吃的消吗?

Screenshot from 2017-07-12 23-34-50.png

Github地址如下:点击获取代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,807评论 25 709
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,826评论 1 92
  • 序言第1章 Scrapy介绍第2章 理解HTML和XPath第3章 爬虫基础第4章 从Scrapy到移动应用第5章...
    SeanCheney阅读 15,172评论 13 61
  • 漫天的灰尘让我眼前缭绕 喷涌的喧闹使我耳边烦躁 高楼底下车流 车流两旁杨柳 随风吹啊 随车流涌动啊 全都静止在那一霎那
    a5768599b114阅读 472评论 0 1
  • 或许我们经历了太多太多,刚生下来的时候我们饿了就哭,困了就睡还会有人拍打我们抱着我们睡,等我们一岁了我们开始学着走...
    穆木大青阅读 70评论 0 0