从零学习的歪经小 发表于 2020-9-5 11:18

python爬取 个性图片【70行】

终于到了周末,昨天打开吾爱看到了一位老哥写@三木猿 的一个爬虫,我激动的打开pycharm本想白嫖,然而,发现一直爬不到,当然,这不可能是代码问题,我就看了看网址,发现打开是404{:301_995:}

然后就去看看这个主页,发现能打开,然后看到有很多分类就自己动手写了个带分类了。{:301_1001:}

虽然那位老哥的代码只有40行,但我觉得,还是挺难搞明白的。
就把自己的注释了一下
我,觉,得,新,手,应,该,能,勉,强,看,的,懂,了。


没弄多线程了,我写完,老师又在催打卡,我想研究一下钉钉那个,智慧校园的打卡任务。

欢迎白嫖~
# -*- coding: utf-8 -*-

import requests,time,os
from lxml import etree
from urllib import request

name_url = {}            #创建一个字典
def sort():
    req = requests.get('https://www.tujigu.com/')         #首页
    req.encoding = 'utf-8'                               #中文出现乱码,调整编码
    req_xp = etree.HTML(req.text)                     #装换为xp,text是为了变成字符串形式,不然会报错
    text_list = req_xp.xpath('//*[@class="menu"]/li/a/text()|//*[@id="tag_ul"]/li/a/text()')               #读取分类名
    href_list = req_xp.xpath('//*[@class="menu"]/li/a/@href|//*[@id="tag_ul"]/li/a/@href')                   #获取网址
    for href,text in zip(href_list,text_list):
      name_url = href                     #已分类名做为key,网址作为值
    return text_list               #返回分类名列表,好为后面打印分类名

def dow(url,name):
    if not os.path.exists("图集谷"):          #检查并创建文件夹,强迫症~~~
      os.mkdir('图集谷')
    if not os.path.exists("图集谷/{}".format(name)):         #同上,创建分类
      os.mkdir('图集谷/{}'.format(name))
    atlas = requests.get(url)               #get你选择的网址
    atlas.encoding = 'utf-8'                      #同上,乱码问题
    atlas_xp=etree.HTML(atlas.text)
    text_list = atlas_xp.xpath('//*[@class="biaoti"]/a/text()')       #获取图集名
    href_list = atlas_xp.xpath('//*[@class="biaoti"]/a/@href')
    for text,href in zip(text_list,href_list):
      req = requests.get(href)
      req.encoding = 'utf-8'
      req_xp1=etree.HTML(req.text)
      src_list = req_xp1.xpath('//*[@class="content"]/img/@src')
      num = 1          #创建图片名,美观
      #下面是为了删除一些图集中包含了文件夹不能创建的符号
      text = text.replace('\n', '').replace('/', '').replace('\\', '').replace(':', '').replace('*', '').replace('"', '').replace('<', '').replace('>', '').replace('|', '').replace('?', '')
      if not os.path.exists("图集谷/{}/{}".format(name,text)):       #检测此图集是否下载过
            os.mkdir("图集谷/{}/{}".format(name,text))
            for src in src_list:
                request.urlretrieve(src,"图集谷/{}/{}/{}.jpg".format(name,text,num))   #保存图片
                num += 1
            print('{}-------------成功下载'.format(text))
      else:
            print('{}--------------内容已下载'.format(text))

def get():
    while 1:
      text_list = sort()       #从首页获取分类信息和url
      i = 1                  #序号
      for text in text_list:      #从2到-1是为了去除没用的分类
            print('%02d.{}'.format(text)%i)    #打印分类信息
            i += 1
      opt = input('输入您要爬取的内容(首页为默认)>>>>> ')
      if not opt.isdigit():         #判断输入内容
            print('傻X输入中文懂么')
            time.sleep(3)
            continue
      opt = int(opt)
      if not 0 < opt < len(text_list)-3:   #判断输入内容
            print('输入范围错误')
            time.sleep(3)
            continue
      opt += 1            #以为删除了首页,所以+1才能正确选择分类
      url=name_url]         #获取你选择的地址
      name = text_list             #分类的名字,好创建一个文件夹放入
      print('{}====开始爬取'.format(name))
      dow(url,name)                   #开始运行下载程序
      input('爬取完成,按下回车重新开始')

if __name__ == '__main__':
    get()            #开始运行主程序


觉得还行就丢 点 热 心 值 也 OK

qq926494 发表于 2020-9-28 17:51

text = text.replace('\n', '').replace('/', '').replace('\\', '').replace(':', '').replace('*', '').replace('"', '').replace('<', '').replace('>', '').replace('|', '').replace('?', '')
35行这个,可以用正则优化下,还有下载图片前,判断图集是否存在,要是只下了一张结束了,再次运行,就不会接着下了吧,

从零学习的歪经小 发表于 2020-9-5 16:26

天地我有 发表于 2020-9-5 15:23
今天刚刚接触py上面是不是还要cmd ----pip installrequests ; pip install wheel;pip install lxml---- ...

是这3个。刚接触,可以去百度找一些国内镜像源,这样以后下这些库也能快点。{:301_1009:}

铩羽神音 发表于 2020-9-5 11:40

这个好啊,终于有一个可以简单上手爬图的教程了,可以学习一波:lol

从零学习的歪经小 发表于 2020-9-5 11:47

铩羽神音 发表于 2020-9-5 11:40
这个好啊,终于有一个可以简单上手爬图的教程了,可以学习一波

嘿嘿,加油{:301_993:}

silent小泷 发表于 2020-9-5 11:50

厉害了。大碗面。

fenglianyun 发表于 2020-9-5 11:55

这个真是很火爆的语言!不知道好不好学习?零基础开始?

hxw0204 发表于 2020-9-5 13:22

谢谢分享,学习爬图用

从零学习的歪经小 发表于 2020-9-5 14:43

fenglianyun 发表于 2020-9-5 11:55
这个真是很火爆的语言!不知道好不好学习?零基础开始?

学习,应该是最好学的了吧。。慢慢学,零基础也没事啊。{:301_993:}

三木猿 发表于 2020-9-5 14:58

楼主厉害啦{:1_921:}

抹杀你的浪漫 发表于 2020-9-5 15:08

大佬 能不能带带我{:301_1009:}

nnnr 发表于 2020-9-5 15:08

期待楼主钉钉那个打卡天天早起扛不住啊:'(weeqw
页: [1] 2 3
查看完整版本: python爬取 个性图片【70行】