Python资源爬取-源码

时间:2022-07-23
本文章向大家介绍Python资源爬取-源码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这个整合资源的网站,因不知名的原因所以可能也许是暂时的关闭了一下,所以想着把写的python代码公布出来也没啥关系(虽然本来也就没什么关系),当然写的比较垃圾,也没有什么优化的手段

在这里顺便吐槽一下,原本写微信公众号就是防止文章给轻易的爬到,但是发现并没有什么用,那些人还是该爬的爬,该盗的盗,所以在除了我的博客(blog.ernket.top)和微信公众号外任何一个地方看到这篇东西,都是未经许可的,虽然有点生气,但是也没什么办法,所以考虑到这点,我会弄原创申明,当然不是要打赏,毕竟我也不靠这个吃饭,可以的话还是希望能把钱放在有用的地方上面

用到的Python库有 requests urllib bs4 re sys io sysio主要是用来转字符串的,如果爬取的结果是特殊符号或者是例如韩文这样的文字的话,爬虫是会报错的,得这么来一下让他默认输出的都是gb18030编码

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

这个东西比较有意思,不单可以在这里这么用,比如爬取微信消息时也可以这么用

那么因为网站关闭的关系呢,所以大部分内容都是靠脑补,8喜勿喷,喷也不会发生什么事情

首先通过url可以分析出来,网站是通过传入s参数的值,然后去搜索的,所以可以通过拼接url来实现结果的查询

url="http://yqqdf.cn/?s="
video_name = input("请输入资源名: ")
video_name=parse.quote(video_name)
html=urlopen(url+video_name)

这里用到了一个parse.quote,这个的意思是进行一个url编码,这样在后续urlopen的打开网页的时候不会报错,具体用法如下

那么获取到了网页源代码后,就用bs4这个库来进行网页解析

def find_video(html):
    url_list=[]
    schtml=BeautifulSoup(html,"html5lib")

我这里做了一个比较奇怪的操作,因为考虑到内容有多页,所以我先在页面中查找有没有下一页这个选项,这里有两个部分的操作,一个是有下一页的一个是没有下一页的,无疑就是多了个询问而已 大致的做法如下:

···
    nextpage=("next_page")
    next_page=schtml.select('a[class="next page-numbers"]')
    if next_page == []:
         ......
    else:
        return nextpage,schtml

如果存在下一页的话,就return一个值,外面if到这个值后,就转给另外一个部分来完成工作

elapse=find_video(html)
if elapse[0]==("next_page"):
    print("存在下一页")

那么回到没有下一页的操作中,我通过拼接url后访问,得到了一个页面,我得把资源整合出来 首先获取对应的元素

title = schtml.select('h2.entry-title a')

这里要注意的是,获取到的结果有时不止为一个,所以不能直接print出来,我用的是

...
title = schtml.select('h2.entry-title a')
for i in title:
    url_list.append(i) #将结果append到列表url_list中,方便下一步选择
num=0 # 初始化数字
for n in title:
    num = num + 1
if num==(0):
    return num
print("已找到"+str(num)+"个资源")
num=0
for i in title:
    num = num + 1
    video_name=(i.get_text())
    video_url=(i.get('href'))
    print("ID: "+str(num)+"  资源名: "+video_name) #每一个资源都给一个ID,供选择
return url_list #将结果return出来
time.sleep(1)

这部分工作完成,接下来就是选择资源的问题了 这边会多问一个问题,就是选择你想要的资源ID

video_num=input("请输入你想要的资源ID: ")
src_video=which_video(video_num,elapse) #调用

通过给定数字,赋值给videonum,然后传入给whichvideo中去,因为python中是从0开始算的,开头的时候我减去了一位

def which_video(num,urllist):
    num = int(num)-1
    turl=urllist[num] # 选择指定url

选择好了url后,就开始打开对应的url,然后进行内容爬取

...
    video_url=(turl.get('href'))
    new_html=urlopen(video_url)
    wphtml=BeautifulSoup(new_html,"html5lib") #如果后面没有"html5lib"的话,会报警告,但是不影响,只是为了美观
    pan_url=wphtml.select('a') #查找网盘链接
    key=wphtml.select('p') #查找网盘密码
    for i in pan_url: #以防多个url
        e = i.get('href')
        if re.match('https://pan', str(e)):
            print(e)
        elif re.match('http://pan', str(e)):
            print(e)
        else:
            continue
    # 密码抓取
    for password in key:
        ps = password.get_text()
        if re.search('密码', str(ps)):
            print("网盘密码为: "+ps.encode('utf-8').decode('utf-8')[-4:])
        elif re.search('提取码', str(ps)):
            print("网盘密码为: "+ps.encode('utf-8').decode('utf-8')[-4:])

这里就是全部的工作了,那么多余的就是那个爬取多页的内容了 上一个def中,检测到了存在下一页的话,就return一个值,告诉程序存在下一页,得换个操作,其实和没有下一页的操作是一样的,就是多了询问和爬取的功能而已

...
        confirm = input("是否爬取下一页内容(Y/N):  ") 
        if confirm.upper() == ("Y"): #.upper()全部替换为大写,如果是Y的话进行下面的操作
            nexturl = schtml.select('a[class="next page-numbers"]') #获取下一页的url
            nexturl = nexturl[0].get('href') #获取该元素中的href的内容
            ehtml = urlopen(nexturl) #获取该网页源代码
            schtml=BeautifulSoup(ehtml,"html5lib")
        elif confirm.upper() == ("N"):
            return url_list #如果为N的话,直接进行资源爬取的操作
            break
        else:
            print("请输入正确指令!")

# 结尾

说实话写的不怎么样,倒不如说很蠢,就是按照想法来写的,丝毫没有什么技术含量,但是考虑到这么久没有水文了,又想整点什么东西来写,至于为什么要挑这个python程序,一方面是因为当时用的确实挺方便的,另一方面是我菜,完整的文件我会放到网盘里,想看完整的也可以自行下载来看看(玩是玩不了了)

链接:https://pan.baidu.com/s/1W34yJw5_1ktYbGeBApzONw

提取码:76fk

"这种垃圾文章还有人盗那我也没话说,虽然生气但是也没有解决办法"