这个整合资源的网站,因不知名的原因所以可能也许是暂时的关闭了一下,所以想着把写的python代码公布出来也没啥关系(虽然本来也就没什么关系),当然写的比较垃圾,也没有什么优化的手段
在这里顺便吐槽一下,原本写微信公众号就是防止文章给轻易的爬到,但是发现并没有什么用,那些人还是该爬的爬,该盗的盗,所以在除了我的博客(blog.ernket.top)和微信公众号外任何一个地方看到这篇东西,都是未经许可的,虽然有点生气,但是也没什么办法,所以考虑到这点,我会弄原创申明,当然不是要打赏,毕竟我也不靠这个吃饭,可以的话还是希望能把钱放在有用的地方上面
用到的Python库有 requests urllib bs4 re sys io sys和io主要是用来转字符串的,如果爬取的结果是特殊符号或者是例如韩文这样的文字的话,爬虫是会报错的,得这么来一下让他默认输出的都是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
"这种垃圾文章还有人盗那我也没话说,虽然生气但是也没有解决办法"