鱼C论坛

 找回密码
 立即注册
查看: 123176|回复: 3809

[作品展示] 最终版【18禁】一只贼能爬动图的——黄虫。绅士和妹子都来看看吧!

    [复制链接]
发表于 2016-10-19 19:29:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一个账号 于 2020-3-28 11:17 编辑

学了一个星期鱼哥的《python零基础系列》终于弄出点东西了!

花了一下午搞了一只“黄虫”。欢迎各位高手指导,新手建议。

方便的easygui 与 强大的beautiful soup是必须的

只要弄清楚网站的结构,找到你要爬取的资源的共同点,合理的匿名和异常处理就基本没有问题了。

代码已更新,最终问题解决——>带作品番号...^_^

代码:

  1. import urllib.request as ur
  2. import urllib.parse as up
  3. import re
  4. import easygui as e
  5. import socket  
  6. from bs4 import BeautifulSoup

  7. def find_download(h_soup,where,count):
  8.       #下面的三条语句是为了分类,过滤取番号。没个网站的特点都不一样,要自己找规律。
  9.       H = h_soup.find("h1",class_ = "article-title").a.get_text()
  10.       if H[0] != "【" :
  11.             try :#有些番号未知
  12.                   str1 = h_soup.find("h2").span.span.get_text()
  13.             except :
  14.                   str1 = "404notfind%d"
  15.       elif "【广告招租】" in H:
  16.             return count
  17.       else :
  18.             str1 = ''
  19.             for i in H:
  20.                   str1 += i
  21.                   if i == "】":
  22.                         break
  23.                   
  24.       timeout = 10#设置下载被允许的最大时间
  25.       for l in h_soup.find_all("img",class_ = re.compile("align.+"),src = re.compile(".[a-zA-Z]{3,4}[        DISCUZ_CODE_0        ]quot;)):
  26.             #下面的if是过滤四个垃圾图片
  27.             if l["src"] in ["http://ww1.sinaimg.cn/large/e75a115bgw1ezy20gtzgpj20m80b4gol.jpg","http://ww2.sinaimg.cn/mw690/e75a115bgw1f8ambv7odog20a00327h9.gif","http://ww3.sinaimg.cn/mw690/e75a115bgw1f76bno2v7kj20a0032wew.jpg","http://ww2.sinaimg.cn/mw690/e75a115bgw1ezm9k3vracj20by0by0tk.jpg"]:
  28.                   continue
  29.             url_fin = l["src"]
  30.             for i in range(3):#网路或资源问题引发错误最多3次
  31.                   try :
  32.                         request_fin = ur.Request(url_fin,headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 BIDUBrowser/6.x Safari/537.31'})#匿名
  33.                         fin_img = ur.urlopen(request_fin,timeout = timeout).read()
  34.                         break
  35.                   except :
  36.                         pass
  37.             else :
  38.                   continue
  39.             file = open(where+"\"+"%s_%d.gif" % (str1,count),'wb')
  40.             file.write(fin_img)
  41.             file.close()
  42.             print("已下载:"+"\n"+"%s_%d.gif" % (str1,count))
  43.             count += 1
  44.       return count

  45.             
  46. def tryopen(req):#网路有错误最多5次
  47.       errorTimes = 0
  48.       while errorTimes != 10:
  49.             try:
  50.                   errorTimes += 1
  51.                   return ur.urlopen(req,timeout = 10).read().decode("utf-8")
  52.             except:
  53.                   pass
  54.       return None
  55.       

  56. def main():
  57.       if e.buttonbox("Are you ready?","黄虫",choices = ("of cause!","i'm Gay.")) == "of cause!":
  58.             while 1:
  59.                   have = e.multenterbox("输入你要的页数,如果只要一页就填一样的:","黄虫",fields = ("起始页","结束页"))
  60.                   if have[0] != '' and have[1] != '':
  61.                         nice = int(have[0])
  62.                         day = int(have[1])
  63.                         if nice > 1000 or day > 1000:
  64.                               e.msgbox("绅士请注意身体!")
  65.                               continue
  66.                         break
  67.                   e.msgbox("serious?")
  68.             
  69.             where = e.diropenbox("你要保存到哪?")
  70.             i = nice
  71.             while 1:#分三层
  72.                   url1 = "http://www.gifjia.com/neihan/page/%d/" % i
  73.                   request1 = ur.Request(url1,headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 BIDUBrowser/6.x Safari/537.31'})#匿名
  74.                   html1 = tryopen(request1)
  75.                   h1_soup = BeautifulSoup(html1)#主页
  76.                   text = '&&!@#$#@' #为了第一次能运行
  77.                   word = 0#词条数
  78.                   for j in h1_soup.find_all("a",href = re.compile("[0-9]+/[        DISCUZ_CODE_0        ]quot;)):
  79.                         if text in j["href"]: #为了防止重复爬,他网站有的url后面多点东西但是表示的和当前页面是同一个意思
  80.                               continue
  81.                         word += 1
  82.                         if word > 11:#词条后面还有未知连接防止爬偏了。。11是因为前面还有一个废连接,一共10个词条。太不智能了。。。
  83.                               break
  84.                         url2 = j["href"]
  85.                         text = url2
  86.                         count = 0 #主页上每一个词条里的图片编号
  87.                         request2 = ur.Request(url2,headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 BIDUBrowser/6.x Safari/537.31'})#匿名
  88.                         html2 = tryopen(request2)
  89.                         try :
  90.                               h2_soup = BeautifulSoup(html2)#第一层连接副页
  91.                               count = find_download(h2_soup,where,count)
  92.                         except:
  93.                               continue
  94.                         for k in h2_soup.find_all("a",href = re.compile(j["href"]+"[0-9]+/")):
  95.                               url3 = k["href"]
  96.                               if j["href"]+"1/" == k["href"]:#防重复爬第一页
  97.                                     continue
  98.                               request3 = ur.Request(url3,headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 BIDUBrowser/6.x Safari/537.31'})#匿名
  99.                               html3 = tryopen(request3)
  100.                               try :                                    
  101.                                     h3_soup = BeautifulSoup(html3)#副页还分好多页
  102.                                     count = find_download(h3_soup,where,count)
  103.                               except:
  104.                                     pass
  105.                   if i >= day:
  106.                         break
  107.                   i += 1                  
  108.       else :
  109.             e.msgbox("╭∩╮(︶︿︶)╭∩╮")
  110.       

  111. if __name__ == '__main__':
  112.       main()
复制代码


里面用到的知识都是鱼哥讲过的,各位比我还新的手只要努力学一周,这种玩意信手拈来

另外,程序可能还会有些小问题,我会持续更新,把发现的问题解决,也欢迎发现问题的各位反馈

评分

参与人数 13荣誉 +26 鱼币 +51 贡献 +19 收起 理由
苟义文 + 1 + 1 + 1 感谢楼主无私奉献!
呆头大哥 + 5 + 5 + 3
542624047 + 5 + 5 + 3 感谢楼主无私奉献!
helloxiaoc + 1 + 5 + 1 感谢楼主无私奉献!
默默無名 + 1 + 3 + 1 支持楼主!
njh586 + 1 + 1 这是一个励志的故事!
膜法记者 + 1 + 2 榜样!
304079992 + 1 + 4 + 1
wangguohui + 5 + 5 + 3 支持楼主!
闹闹破 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-19 19:30:02 | 显示全部楼层
自顶一下,明天看反馈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 19:59:20 | 显示全部楼层
我看了一个月啥都没学会~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

 楼主| 发表于 2016-10-19 20:05:08 | 显示全部楼层
xuwei276 发表于 2016-10-19 19:59
我看了一个月啥都没学会~~

兄弟(女士)不必灰心,只要抛开杂念耐心坐一下午,总能搞点东西出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-10-19 20:33:53 | 显示全部楼层
你咋学得这么快。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 20:53:22 | 显示全部楼层
真厉害哦,我学了三四天了,希望能和你一样厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-19 20:54:40 | 显示全部楼层
20498.4 发表于 2016-10-19 20:33
你咋学得这么快。。。

工科大学呗,你懂得,太闲了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-19 21:00:37 | 显示全部楼层
wxl123992851 发表于 2016-10-19 20:53
真厉害哦,我学了三四天了,希望能和你一样厉害

加油,我们论坛,静态图片有了,动态图片有了,下一步就,,呵呵,不要误解我的意思啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 21:05:31 | 显示全部楼层
看看大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 21:17:35 | 显示全部楼层
怎么搞的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 21:34:19 | 显示全部楼层
可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 21:43:10 | 显示全部楼层
look
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-19 21:47:49 | 显示全部楼层
一下 有没有代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-19 21:52:17 | 显示全部楼层
本帖最后由 疾风。意破天晴 于 2016-10-19 21:55 编辑
麦农 发表于 2016-10-19 21:47
一下 有没有代码



楼下的各位。回复可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 23:49:28 | 显示全部楼层
666啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 23:54:36 | 显示全部楼层
这么厉害,来学习下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-20 00:10:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-20 07:35:57 | 显示全部楼层
AV??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-20 07:50:46 | 显示全部楼层
理清关系结构
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-20 08:38:36 | 显示全部楼层
我也想变得这么厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表