鱼C论坛

 找回密码
 立即注册
查看: 1651|回复: 3

[技术交流] 针对新人入门PY的几点思考

[复制链接]
发表于 2018-1-3 08:04:44 | 显示全部楼层 |阅读模式

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

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

x
首先我自己就是一个新人,来这里只是想分享一些个人心得。

近来论坛里的PY区比较火,特别是入门版块,可能跟PY广泛应用于各领域以及人工智能的大泡沫有关,也可能是各大学要考PY。但真心想入门的同学来看小甲鱼的视频是很好的,有幽默风趣的讲解还有BILIBILI里弹幕提神醒脑,这对于那些希望涉猎一下这门胶水语言的同学是很不错的。但是如果想学爬虫,想更快更深入地了解学习这门语言的同学,我建议先一定不要去看视频,因为视频有分P之嫌和聊天扯淡较多,一开始一定要自己去找书来看,对于很多同学来说书上的知识在经过精心编译后还是通俗易懂的,在此推荐一下《21天学通Python》这本书。书里面有详细的从安装到深入的知识,这比自己从百度搜XX如何安装XX如何配置环境变量XX报错是啥意思高效地多,当然看书往往是很枯燥的,也不易懂,这时就可以练习书上的代码。如有不懂就可以去找对应章节的小甲鱼视频来看,甚至把他的作业也做了来加深印象。

如果目的是学习爬虫,可以了解了大概的语法后直接上手去爬自己想要的东西,当然我们还是不会爬,于是就可以找到相应的鱼塘里的源代码来练习,注意一定要多练几遍,这样就有了印象也提升了手速。这是就会思考这些这些代码是表示什么意思,这时就可以直接找到小甲鱼论坛里入门PY板块的扩展阅读了,里面都有分类好了的通俗易懂的解释。如若再不懂就可以发帖求助,注意发帖前先了解规则和提问的正确方式。在爬各类小黄图的路上,各位肯定不会枯燥啦,而兴趣又是最好的老师,它会强行快速磨练你,提升你,这时你回头看看好多同学还挣扎徘徊在小甲鱼视频里的前三集里(活不过前三集哈哈哈哈手动滑稽),这时你可以看着电脑上的弹幕,点一杯卡布奇诺,默默打开某OOXX文件夹没有说话地“学习”起来了。

然后随着入越深你会发现好多基础没搞明白,但,这没关系。在多行代码多日奋战中相信很多基础的东西都能搞明白,这时不要停下来——直接去学习别的语言如C如JAVA(选择一门就好了),然后还是同样的方法学习。因为各语言之间有它们的共性,先学了胶水语言就能很好地将各类语言粘在一起,而随着对编程的广泛了解我们会不知觉地把基础更加扎实。


最后分享一段代码:import urllib.request as u
import urllib.parse as p
import chardet
import re
import os
import easygui as e
import socket

def open_url(url):
    req = u.Request(url)
    response = u.urlopen(req)
    html = response.read()
    return html

def find_thum_detail(url):
    html = open_url(url).decode('gbk')
    r_thum = re.compile(r'A class=neihan-list-pic   (.+?)/SPAN',re.S)
    thum_list = r_thum.findall(html)
    return thum_list

def get_thum_list(url):
    list_detail = []
    thum_list = find_thum_detail(url)
    r_next_page = re.compile(r'href="(.+?)" target=_blank')
    r_title = re.compile(r'alt="(.+?)"></A')
    r_thum_url = re.compile(r'src="(.+?\.png)|src="(.+?\.jpg)')
   
    for i in thum_list:
        thum_url = r_thum_url.findall(i)[0][0]
        if not thum_url:
            thum_url = r_thum_url.findall(i)[0][1]
        list_tmp = [r_next_page.findall(i)[0],r_title.findall(i)[0],thum_url]
        list_detail.append(list_tmp)
    return list_detail

def save_thum(url,p_path):
    print(url)
    index = 0
    try:
        with open(p_path+os.sep+'xuchuan.txt') as f_xuchuan:
            length = len(f_xuchuan.readlines())
            print(length)
    except:
        pass
   
    if os.path.isfile(p_path+os.sep+'xuchuan.txt'):
        print('发现上次未下载完成内容,继续上次下载~!')
        with open(p_path+os.sep+'xuchuan.txt') as f_xuchuan:
            list_xuchuan = f_xuchuan.readlines()
            url = re.findall(r'.+',list_xuchuan[0])[0]
            print(url)
            if length > 1:
                if list_xuchuan[-1] == '\n':
                    try :
                        detail_img_url = re.findall(r'.+',list_xuchuan[-2])[0]
                    except:
                        pass
                else:   
                    detail_img_url = re.findall(r'.+',list_xuchuan[-1])[0]
                try:
                    detail_img_url_short = re.findall(r'.+/(.+\.html)',detail_img_url)[0]
                    list_thum = get_thum_list(url)
                    for i in list_thum:
                        if detail_img_url_short == re.findall(r'.+/(.+\.html)+',i[0])[0]:
                            index = list_thum.index(i)
                except:
                    pass
    with open(p_path+os.sep+'xuchuan.txt','w') as f_xuchuan:
        f_xuchuan.write(url+'\n')
   
    thum_list = get_thum_list(url)[index:]
    re_ext = re.compile(r'.+(\..+)')        
    p_path = p_path + os.sep
    for i in thum_list:
        ext = re_ext.findall(i[2])
        path_tmp = p_path+i[1]+os.sep
        if not os.path.isdir(path_tmp):
            os.mkdir(path_tmp)
        with open(path_tmp+'缩略图'+ext[0],'wb') as f:
            img = open_url(i[2])
            f.write(img)
        save_detail(url,path_tmp,i,p_path)
    os.remove(p_path+'xuchuan.txt')
    return url
            
def save_detail(url,path_tmp,i,p_path):
    re_detail = re.compile(r'div class="wz-picrrc".+src="(.+?\.jpg)')
    re_next_page = re.compile(r'''<div class="wz-page">.+href='(.+)'>下一页''',re.S)
    re_page_short = re.compile(r'.+/(.+?\.html)')
    count = 0
    n =1
    url_main_short = re.findall(r'.+/(.+\.html)',url)[0]
    url_short = re.findall(r'.+/(.+\.html)',i[0])[0]
    url = re.sub(url_main_short,url_short,url)
    with open(p_path+'xuchuan.txt','a') as f_xuchuan:
        f_xuchuan.write(url+'\n')
    print('开始下载【%s】图集' %i[1])
    while True:
        print('正在处理%s.....' %url)
        try:
            html = open_url(url).decode('gbk')
        except:
            print('打开%s地址出错,继续下载下一个妹妹~' %url)
            break
        try:
            img_detail_url =re_detail.findall(html)[0]
            with open(path_tmp+str(count)+'.jpg','wb') as f:
                try:
                    img_detail = open_url(img_detail_url)
                except:
                    print('【%s】图片打开错误,重试第%d次' %(img_detail_url,n))
                    n += 1
                    if n<= 3:
                        continue
                    else:
                        print('【%s】图片下载失败~!-_-'%img_detail_url)
                        pass
                    
                n = 1
                try:
                    f.write(img_detail)
                except:
                    pass
        except IndexError:
            print('本妹子下载完成~!')
            break
        page_short = re_page_short.findall(url)[0]
        try:
            next_page_short = re_next_page.findall(html)[0]
        except:
            print('靠,这个几把网站,有的有下一页按钮,有的没有,这个是没有下一页的页面,已经全部下载完成了~!!!!')
            break
        url = re.sub(page_short,next_page_short,url)

        count += 1
        
        
                                                                                                
def next_url(url):
    html = open_url(url).decode('gbk')
    r_page_short = re.compile(r'.+/(.+?\.html)')
    r_next_page_short = re.compile(r'''<ul class="pagelist">.+<li><a href='(.+)'>下一''',re.S)
   
    try:
        next_page_short = r_next_page_short.findall(html)[0]
    except:
        print('没有下一页了')
        return None
    page_short = r_page_short.findall(url)[0]
    next_page = re.sub(page_short,next_page_short,url)
    print('开始下载下一页~!')
    print('======================================================')
    return next_page




if __name__ == '__main__':
    socket.setdefaulttimeout(10)
    url = 'http://www.qqcyl.net/mntp/wlmn/list_6051_1.html'
    p_path = input('请输入想要保存的文件夹:【例C://meinv】')
    while True:
        a = save_thum(url,p_path)
        url = next_url(a)
        if not url:
            break

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

使用道具 举报

发表于 2018-1-3 09:34:23 | 显示全部楼层
爬虫真的像你说的这么浅吗?学会了基础就向Java和其他语言学习。。你的意思是说把这门语言和其他语言融合在一起吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-3 10:54:46 | 显示全部楼层
代码报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-3 22:50:33 From FishC Mobile | 显示全部楼层
感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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