V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sjmcefc2
V2EX  ›  程序员

求教一个最简单的爬取 doc、rar、pdf 等文件的办法。

  •  
  •   sjmcefc2 · 2018-08-27 08:38:09 +08:00 · 4143 次点击
    这是一个创建于 2263 天前的主题,其中的信息可能已经有所发展或是发生改变。

    输入一个网址,然后根据这个网址定期不重复的把链接下面多有关联的 url 上的 rar、doc 等等文件都保存到本地? 有没有最简单的 python 或 go 处理办法?

    15 条回复    2018-08-28 01:29:45 +08:00
    nilrust
        1
    nilrust  
       2018-08-27 08:44:36 +08:00
    要看你那个网站怎么提供下载,

    如果是直接提供下载链接地址(静态 http 地址、ftp 地址、ed2k/bt/迅雷 等地址)那好办;

    但如果他的下载链接要鉴权用户登录,下载还要输入验证码,下载内容是通过代码业务逻辑处理后才转发文件,这个爬虫写起来就会麻烦点
    delectate
        2
    delectate  
       2018-08-27 09:11:19 +08:00
    简单的办法,就是用搜索引擎,google,加上 filetype:doc 这样的参数。
    sjmcefc2
        3
    sjmcefc2  
    OP
       2018-08-27 09:43:29 +08:00
    @delectate 小局域网。没法 google 哈

    @nilrust 不爬取需要鉴权的。
    csx163
        4
    csx163  
       2018-08-27 10:07:15 +08:00
    你这个需求可以考虑第三方工具
    lanwairen123
        5
    lanwairen123  
       2018-08-27 13:01:39 +08:00 via Android
    wget -r -p -np -k http://yoururl.com
    crontab
    应该可以解决问题吧
    PulpFunction
        6
    PulpFunction  
       2018-08-27 14:04:08 +08:00
    动手就能解决 beautifulsoup+requests
    太多了
    贴个网站源码看一下?
    sjmcefc2
        7
    sjmcefc2  
    OP
       2018-08-27 14:49:52 +08:00
    @PulpFunction 收到,可能也只能是 bs4+requests
    sjmcefc2
        8
    sjmcefc2  
    OP
       2018-08-27 14:54:20 +08:00
    @lanwairen123
    wget -c -r -np -k -L -l 3 -p www.xxx.org/pub/path/


    -c 断点续传
    -r 递归下载,下载指定网页某一目录下(包括子目录)的所有文件
    -np 递归下载时不搜索上层目录,如 wget -c -r www.xxx.org/pub/path/,没有加参数-np,就会同时下载 path 的上一级目录 pub 下的其它文件
    -k 将绝对链接转为相对链接,下载整个站点后脱机浏览网页,最好加上这个参数
    -L 递归时不进入其它主机,如 wget -c -r www.xxx.org/ 如果网站内有一个这样的链接:www.yyy.org ,不加参数-L,就会像大火烧山一样,会递归下载 www.yyy.org 网站;但是现在很多的 css、js、img 都不在项目的目录下保存,而是在 html 页面中 src 一个 http 引用,所以如果想要一并 download 当前页面引用的 http 资源,比如 js,css,img,那么这个参数就需要省略
    -l 下载层级,默认最大为 5 级,一般情况下 3 级就够了
    -p 下载网页所需的所有文件,如图片等


    哎呀,这样的话,是不是搜索引擎(爬虫部分)就失业了?


    想着做一个局域网内的搜索引擎,不知道哪里有可以参考的代码。
    PulpFunction
        9
    PulpFunction  
       2018-08-27 14:56:02 +08:00
    @sjmcefc2 还有 re
    主要是 re
    估计网站结构简单
    1,request 获取源码
    2,艾 不用 bs4 艾 直接正则匹配
    3,保存文件
    PulpFunction
        10
    PulpFunction  
       2018-08-27 14:57:13 +08:00
    全当我没说
    sjmcefc2
        11
    sjmcefc2  
    OP
       2018-08-27 16:18:17 +08:00
    @PulpFunction 非常感谢指点。确实网站特简单,一般就是,title,然后就是 doc 之类的下载链接了。就是怕爬重复了,想着每天怕新内容。
    loveCoding
        12
    loveCoding  
       2018-08-27 16:19:21 +08:00
    具体问题具体分析 , 写代码也不过半天功夫吧
    XxxxD
        13
    XxxxD  
       2018-08-27 16:22:16 +08:00
    urllib3 的 urlretrieve,不过比 request 慢得多,感觉就是 requests.get().content
    winglight2016
        14
    winglight2016  
       2018-08-27 20:58:29 +08:00
    既然是局域网,直接通过网络共享文件夹复制黏贴多简单
    sjmcefc2
        15
    sjmcefc2  
    OP
       2018-08-28 01:29:45 +08:00
    @loveCoding 主要都是自学,也没啥可以交流的人,所以其实写的思路上非常局限。得向大家讨教。

    @winglight2016 这个,,,,还真是不行。

    @XxxxD 嗯,觉得 requests 挺好用了,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3150 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:26 · PVG 21:26 · LAX 05:26 · JFK 08:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.