首页 编程教程正文

某图片网爬虫

piaodoo 编程教程 2020-02-22 22:06:25 925 0 python教程

本文来源吾爱破解论坛

感觉逻辑还是有点乱,希望有大神们多指点,该网站没有什么反爬措施,因此没有加headers,因为主要是练手用,我特意把爬取的页数改小了,感觉做人还是要厚道一些。

爬取过程中有一个提示,大概就是这个if else需要改成别的(这种if else 写法是我前几天刚刚学到的,感觉很实用嗨学网),但是我不知道怎么改,期待大神指教。
[Python] 纯文本查看 复制代码

 FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead.
  img_url_ = tr.xpath('//li/*[@target="_blank"]/@href') if tr else None

全部代码如下:
[Python] 纯文本查看 复制代码
import requests
from lxml import etree
import os


class MeiNV(object):
    def __init__(self):
        self.urls = []
        self.imgs = []

    def url_link(self):

        start_url = 'http://pic.netbian.com/4kmeinv/'
        for x in range(1, 5):

            if x != 1:

                self.urls.append(f"{start_url}index_{x}.html")
            else:
                self.urls.append('http://pic.netbian.com/4kmeinv/')

    def download(self, url):
        r = requests.get(url)
        return r.content

    def go(self):
        self.url_link()
        self.parse()
        self.get_img()

    def parse(self):
        for url in self.urls:
            html = self.download(url)
            tr = etree.HTML(html)
            img_url_ = tr.xpath('//li/*[@target="_blank"]/@href') if tr else None
            self.imgs.append(list(map(lambda x: f"http://pic.netbian.com{x}", img_url_)))

    def get_img(self):
        imgs = self.imgs
        print(len(imgs))
        cont = 1
        for links in imgs:
            for link in links:
                img_html = self.download(link)
                img_tr = etree.HTML(img_html)
                img_link1 = img_tr.xpath('//*[@id="img"]//@src')
                img_link = f"http://pic.netbian.com{img_link1[0]}" if img_link1 else None
                img = self.download(img_link)
                img_name = img_link.split('/')[-1]
                path = f'第{cont}页图片'
                if not os.path.exists(path):
                    os.makedirs(path)
                with open(f'第{cont}页图片/{img_name}', 'wb') as f:
                    f.write(img)
                print(f"正在下载第{cont}页图片", img_link)

            cont += 1


if __name__ == '__main__':
    meinv = MeiNV()
    meinv.go()

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7535.html

搜索