利用Python抓取阿里云盘资源

 更新时间:2022年02月22日 09:50:12   作者:派森酱  
相对于百度云盘,阿里云盘的下载不限速,以及大容量空间深受大家的喜爱。本文将通过Python实现抓取阿里云盘的资源,感兴趣的可以学习一下

前阵子阿里云盘大火,送了好多的容量空间。而且阿里云盘下载是不限速,这点比百度网盘好太多了。这两天看到一个第三方网站可以搜索阿里云盘上的资源,但是它的资源顺序不是按时间排序的。这种情况会造成排在前面时间久远的资源是一个已经失效的资源。小编这里用 python 抓取后重新排序。

网页分析

这个网站有两个搜索路线:搜索线路一和搜索线路二,本文章使用的是搜索线路二。

打开控制面板下的网络,一眼就看到一个 seach.html 的 get 请求。

上面带了好几个参数,四个关键参数:

  • page:页数,
  • keyword:搜索的关键字
  • category:文件分类,all(全部),video(视频),image(图片),doc(文档),audio(音频),zip(压缩文件),others(其他),脚本中默认写 all
  • search_model:搜索的线路

也是在控制面板中,看出这个网页跳转到阿里云盘获取真实的的链接是在标题上面的。用 bs4 解析页面上的 div(class=resource-item border-dashed-eee) 标签下的 a 标签就能得到跳转网盘的地址,解析 div 下的 p 标签获取资源日期。

抓取与解析

首先安装需要的 bs4 第三方库用于解析页面。

pip3 install bs4

下面是抓取解析网页的脚本代码,最后按日期降序排序。

import requests
from bs4 import BeautifulSoup
import string


word = input('请输入要搜索的资源名称:')
    
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}

result_list = []
for i in range(1, 11):
    print('正在搜索第 {} 页'.format(i))
    params = {
        'page': i,
        'keyword': word,
        'search_folder_or_file': 0,
        'is_search_folder_content': 0,
        'is_search_path_title': 0,
        'category': 'all',
        'file_extension': 'all',
        'search_model': 0
    }
    response_html = requests.get('https://www.alipanso.com/search.html', headers = headers,params=params)
    response_data = response_html.content.decode()
   
    soup = BeautifulSoup(response_data, "html.parser");
    divs = soup.find_all('div', class_='resource-item border-dashed-eee')
    
    if len(divs) <= 0:
        break

    for div in divs[1:]:
        p = div.find('p',class_='em')
        if p == None:
            break

        download_url = 'https://www.alipanso.com/' + div.a['href']
        date = p.text.strip();
        name = div.a.text.strip();
        result_list.append({'date':date, 'name':name, 'url':download_url})
    
    if len(result_list) == 0:
        break
    
result_list.sort(key=lambda k: k.get('date'),reverse=True)

示例结果:

模板

上面抓取完内容后,还需要将内容一个个复制到 google 浏览器中访问,有点太麻烦了。要是直接点击一下能访问就好了。小编在这里就用 Python 的模板方式写一个 html 文件。

模板文件小编是用 elements-ui 做的,下面是关键的代码:

<body>
    <div id="app">
        <el-table :data="table" style="width: 100%" :row-class-name="tableRowClassName">
            <el-table-column prop="date" label="日期" width="180"> </el-table-column>
            <el-table-column prop="name" label="名称" width="600"> </el-table-column>
            <el-table-column label="链接">
              <template slot-scope="scope">
              <a :href="'http://'+scope.row.url" rel="external nofollow" 
                target="_blank"
                class="buttonText">{{scope.row.url}}</a>
            </template>
        </el-table>
    </div>

    <script>
      const App = {
        data() {
          return {
              table: ${elements}
            
          };
        }
      };
      const app = Vue.createApp(App);
      app.use(ElementPlus);
      app.mount("#app");
    </script>
  </body>

在 python 中读取这个模板文件,并将 ${elements} 关键词替换为上面的解析结果。最后生成一个 report.html 文件。

with open("aliso.html", encoding='utf-8') as t:
    template = string.Template(t.read())

final_output = template.substitute(elements=result_list)
with open("report.html", "w", encoding='utf-8') as output:
    output.write(final_output)

示例结果:

跳转到阿里云盘界面

完整代码

aliso.html

<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <script src="https://unpkg.com/vue@next"></script>
    <!-- import CSS -->
    <link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css">
    <!-- import JavaScript -->
    <script src="https://unpkg.com/element-plus"></script>
    <title>阿里云盘资源</title>
  </head>
  <body>
    <div id="app">

        <el-table :data="table" style="width: 100%" :row-class-name="tableRowClassName">
            <el-table-column prop="date" label="日期" width="180"> </el-table-column>
            <el-table-column prop="name" label="名称" width="600"> </el-table-column>
            <el-table-column label="链接">
              <template v-slot="scope">
              <a :href="scope.row.url"
                target="_blank"
                class="buttonText">{{scope.row.url}}</a>
            </template>
        </el-table>
    </div>

    <script>
      const App = {
        data() {
          return {
              table: ${elements}
            
          };
        }
      };
      const app = Vue.createApp(App);
      app.use(ElementPlus);
      app.mount("#app");
    </script>
  </body>
</html>

aliso.py

# -*- coding: UTF-8 -*-

import requests
from bs4 import BeautifulSoup
import string


word = input('请输入要搜索的资源名称:')
    
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}

result_list = []
for i in range(1, 11):
    print('正在搜索第 {} 页'.format(i))
    params = {
        'page': i,
        'keyword': word,
        'search_folder_or_file': 0,
        'is_search_folder_content': 0,
        'is_search_path_title': 0,
        'category': 'all',
        'file_extension': 'all',
        'search_model': 2
    }
    response_html = requests.get('https://www.alipanso.com/search.html', headers = headers,params=params)
    response_data = response_html.content.decode()
   
    soup = BeautifulSoup(response_data, "html.parser");
    divs = soup.find_all('div', class_='resource-item border-dashed-eee')
    
    if len(divs) <= 0:
        break

    for div in divs[1:]:
        p = div.find('p',class_='em')
        if p == None:
            break

        download_url = 'https://www.alipanso.com/' + div.a['href']
        date = p.text.strip();
        name = div.a.text.strip();
        result_list.append({'date':date, 'name':name, 'url':download_url})
    
    if len(result_list) == 0:
        break
    
result_list.sort(key=lambda k: k.get('date'),reverse=True)
print(result_list)

with open("aliso.html", encoding='utf-8') as t:
    template = string.Template(t.read())

final_output = template.substitute(elements=result_list)
with open("report.html", "w", encoding='utf-8') as output:
    output.write(final_output)

总结

用 python 做一些小爬虫,不仅去掉网站上烦人的广告,也更加的便利了。

以上就是利用Python抓取阿里云盘资源的详细内容,更多关于Python抓取云盘资源的资料请关注脚本之家其它相关文章!

相关文章

  • 详解C++编程中一元运算符的重载

    详解C++编程中一元运算符的重载

    这篇文章主要介绍了C++编程中一元运算符的重载,特别对递增和递减运算符重载作了着重讲解,需要的朋友可以参考下
    2016-01-01
  • Python中导入csv数据文件的详细示例教程

    Python中导入csv数据文件的详细示例教程

    Python中的csv模块是一种用于读取和写入csv文件的模块,csv可以用于将数据从文件或者其他来源导入到Python中进行分析和处理,在这篇文章中,我们将全面介绍Python中如何导入csv文件,并将从多个方面进行详细探讨,感兴趣的朋友一起看看吧
    2024-03-03
  • 深入理解Django自定义信号(signals)

    深入理解Django自定义信号(signals)

    这篇文章主要介绍了深入理解Django自定义信号(signals),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • python将文本分每两行一组并保存到文件

    python将文本分每两行一组并保存到文件

    这篇文章主要介绍了python将文本分每两行一组并保存到文件,需要的朋友可以参考下
    2018-03-03
  • Python爬虫获取基金基本信息

    Python爬虫获取基金基本信息

    这篇文章主要介绍了Python爬虫获取基金基本信息,文章基于上一篇文章内容基于python的相关资料展开主题,需要的小伙伴可以参考一下
    2022-05-05
  • Python搭建代理IP池实现存储IP的方法

    Python搭建代理IP池实现存储IP的方法

    这篇文章主要介绍了Python搭建代理IP池实现存储IP的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • pandas 实现将NaN转换为None

    pandas 实现将NaN转换为None

    这篇文章主要介绍了pandas 实现将NaN转换为None的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 使用Python生成200个激活码的实现方法

    使用Python生成200个激活码的实现方法

    这篇文章主要介绍了使用Python生成200个激活码的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 解决Python获取字典dict中不存在的值时出错问题

    解决Python获取字典dict中不存在的值时出错问题

    今天小编就为大家分享一篇解决Python获取字典dict中不存在的值时出错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Pyqt5 Designer构建桌面应用设计及实现代码

    Pyqt5 Designer构建桌面应用设计及实现代码

    这篇文章主要为大家介绍了Pyqt5 Designer构建桌面应用设计及实现代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论