美文网首页python社区
「福利向」Python妹子图爬虫(二)

「福利向」Python妹子图爬虫(二)

作者: 3inchtime | 来源:发表于2018-10-13 11:36 被阅读918次

由于之前很多朋友表示Selenium很麻烦,于是我换了一种不使用Selenium的方法。

项目地址 https://github.com/3inchtime/mmjpg_spider

之前的思路是使用Selenium点击查看全部,一次操作获取全部的妹子图链接,但是很多朋友使用Selenium遇到了困难。
本篇思路非常简单,就是一页一页的访问,一页一页的爬图片链接。

# 获取图片的url的方法
    def get_pic_urls(self):
        for girl_url in self.girl_urls:
            html = requests.get(girl_url).content
            selector = etree.HTML(html)
            page_num = int(selector.xpath('//*[@id="page"]/a[last()-1]/text()')[0])
            self.girl_name = selector.xpath('//div[@class="article"]/h2/text()')[0]
            self.pic_urls = []
            for i in range(1, page_num+1):
                girl_pic_url = ''.join([girl_url, '/' + str(i)])
                html = requests.get(girl_pic_url).content
                selector = etree.HTML(html)
                pic_url = selector.xpath('//div[@id="content"]/a/img/@src')[0]
                self.pic_urls.append(pic_url)
            try:
                self.download_pic()
            except Exception as e:
                print("{}保存失败".format(self.girl_name) + str(e))

首先获取这个妹子所有的图片数量

 page_num = int(selector.xpath('//*[@id="page"]/a[last()-1]/text()')[0])

然后循环构造出每张图片的链接即可

self.pic_urls = []
    for i in range(1, page_num+1):
        girl_pic_url = ''.join([girl_url, '/' + str(i)])
        html = requests.get(girl_pic_url).content
        selector = etree.HTML(html)
        pic_url = selector.xpath('//div[@id="content"]/a/img/@src')[0]
        self.pic_urls.append(pic_url)

之后调用下载图片的方法即可

到了这里,很多朋友会抱怨了,这样爬取的效率太低,这个单进程的爬虫一直在等待网络的IO,并不高效,其实这个解决办法很简单,引入Python的协程就是很棒的解决办法,具体的实现方法,待我有时间慢慢更新,至于等多久我就不知道了......

仅供学习
转载注明出处
禁止商业用途

相关文章

网友评论

    本文标题:「福利向」Python妹子图爬虫(二)

    本文链接:https://www.haomeiwen.com/subject/nwhoaftx.html