鱼C论坛

 找回密码
 立即注册
查看: 2531|回复: 4

[技术交流] 小甲鱼的爬取妹子图失效了,自己写了一个,望指正

[复制链接]
发表于 2020-2-10 19:59:34 | 显示全部楼层 |阅读模式

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

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

x
  1. import urllib.request
  2. #引入解析器包
  3. from bs4 import BeautifulSoup as bs
  4. import os
  5. #打开网址
  6. def open_url(url):
  7.     req = urllib.request.Request(url)
  8.     req.add_header('user-agent','Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36')
  9.     response = urllib.request.urlopen(req)
  10.     html = response.read()
  11.     return html

  12. #将打开后的网页对象解析后返还
  13. def url_bs(html):
  14.     soup = bs(html,'html.parser')
  15.     return soup

  16. #接收空白列表,将所有上一页递归直至没有上一页为止返回列表尾部元素
  17. def a(x,ls):
  18.     d = x.find('a','next-comment-page')
  19.     url = 'http:'+d['href']
  20.     url2 = open_url(url).decode()
  21.     url3 = url_bs(url2)
  22.     ls.append(url)
  23.     #用try抓住TypeError防止结尾报错
  24.     if d:
  25.         try:
  26.             a(url3,ls)
  27.         except TypeError:
  28.             return
  29.     else:
  30.         pass
  31.     #返回列表尾部的元素,也就是首页的url
  32.     return ls[-1]
  33.         
  34. #判断网页是否首页
  35. def judge(html):
  36.     p_page = html.find('a','next-comment-page')
  37.     #如果有上一页这个元素的话
  38.     if p_page:
  39.         new_page = 'http:' + p_page['href']
  40.         new_html = open_url(new_page).decode()
  41.         #将页面用写好的解析器解析
  42.         soup = url_bs(new_html)
  43.         ls = []
  44.         #a函数上面有说明
  45.         p = a(soup,ls)
  46.         #将返还的用自创open_url函数打开
  47.         p = open_url(p)
  48.         return p
  49.     #没有上一页这个元素说明为首页,直接返回html
  50.     else:
  51.         return html

  52. #把页面变成第二页   
  53. def next_page(html):
  54.     a = html.find('a','previous-comment-page')
  55.     aa = 'http:'+a['href']
  56.     bb = open_url(aa)
  57.     cc = url_bs(bb)
  58.     return cc
  59.    
  60. def find_img(html,ls):
  61.     for i in html.find_all('img'):
  62.         s = str(i)
  63.         a = s.find('src')+5
  64.         b = a + 60
  65.         new_h = 'http:' + s[a:b].strip('"')
  66.         ls.append(new_h)      
  67.     return ls

  68. #提取图片src,进行url拼接,存入一个列表
  69. def save_img(img):
  70.     for i in img:
  71.         filename = i.split('/')[-1]
  72.         pic = open_url(i)
  73.         with open(filename,'wb') as f:
  74.             f.write(pic)
  75.         print(filename)
  76.    

  77. #主函数下载图片
  78. def download(folder='pic',pages=10):
  79.    
  80.     #在当前目录下创建文件夹
  81.     os.mkdir(folder)
  82.    
  83.     #进入当前文件夹操作
  84.     os.chdir(folder)
  85.     url = 'http://i.jandan.net/ooxx'
  86.    
  87.     #打开网址
  88.     html = open_url(url).decode()
  89.    
  90.     #得到解析器解析后的对象
  91.     html2 = url_bs(html)

  92.     #判断后得到首页
  93.     first_page = judge(html2)
  94.    
  95.     #创建空列表备用传入find_img函数
  96.     ls =[]
  97.     for i in range(pages):
  98.         #将解析过后的第一页传进函数进行提取图片src
  99.         img_ls = find_img(first_page,ls)
  100.         save_img(img_ls)
  101.         #把页面变成第二页
  102.         first_page = next_page(first_page)
  103.          
  104. if __name__ == '__main__':
  105.     download()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-10 20:20:24 | 显示全部楼层
还不错!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 13:40:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:04:02 | 显示全部楼层
谢谢分享,学习一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-23 17:07:23 | 显示全部楼层
请问文件存储在哪?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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