鱼C论坛

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

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

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

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

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

x
import urllib.request
#引入解析器包
from bs4 import BeautifulSoup as bs
import os
#打开网址
def open_url(url):
    req = urllib.request.Request(url)
    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')
    response = urllib.request.urlopen(req)
    html = response.read()
    return html

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

#接收空白列表,将所有上一页递归直至没有上一页为止返回列表尾部元素
def a(x,ls):
    d = x.find('a','next-comment-page')
    url = 'http:'+d['href']
    url2 = open_url(url).decode()
    url3 = url_bs(url2)
    ls.append(url)
    #用try抓住TypeError防止结尾报错
    if d:
        try:
            a(url3,ls)
        except TypeError:
            return
    else:
        pass
    #返回列表尾部的元素,也就是首页的url
    return ls[-1]
        
#判断网页是否首页
def judge(html):
    p_page = html.find('a','next-comment-page')
    #如果有上一页这个元素的话
    if p_page:
        new_page = 'http:' + p_page['href']
        new_html = open_url(new_page).decode()
        #将页面用写好的解析器解析
        soup = url_bs(new_html)
        ls = []
        #a函数上面有说明
        p = a(soup,ls)
        #将返还的用自创open_url函数打开
        p = open_url(p)
        return p
    #没有上一页这个元素说明为首页,直接返回html
    else:
        return html

#把页面变成第二页   
def next_page(html):
    a = html.find('a','previous-comment-page')
    aa = 'http:'+a['href']
    bb = open_url(aa)
    cc = url_bs(bb)
    return cc
    
def find_img(html,ls):
    for i in html.find_all('img'):
        s = str(i)
        a = s.find('src')+5
        b = a + 60
        new_h = 'http:' + s[a:b].strip('"') 
        ls.append(new_h)       
    return ls

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

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

    #判断后得到首页
    first_page = judge(html2)
    
    #创建空列表备用传入find_img函数
    ls =[]
    for i in range(pages):
        #将解析过后的第一页传进函数进行提取图片src
        img_ls = find_img(first_page,ls)
        save_img(img_ls)
        #把页面变成第二页
        first_page = next_page(first_page)
          
if __name__ == '__main__':
    download()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-10 20:20:24 | 显示全部楼层
还不错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 13:40:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:04:02 | 显示全部楼层
谢谢分享,学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-23 17:07:23 | 显示全部楼层
请问文件存储在哪?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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