爬取指定目录的html,爬取目录型整站URL的思路

目标

https://opendev.org/openstack/neutron 是Openstack 中的一个网络组件项目,这次示例目标是爬取这个项目中所有文件的URL,有了URL再去检索内容,简单的就只剩下写写正则啦。

页面分析

用元素选择器定到目标位置,通过观察发现整个目标内容都包裹在

标签中。内容分为两种元素:文件和目录,它们都被包裹在标签中。其中文件的标签中包含了 标签,目录的标签中包含了 标签。如下表:

爷爷标签

父标签

子标签

tbody

-

-

文件是末梢,目录下包含了目录和文件。点击文件超链接能进入内容呈现页面。点击目录的链接进入到它所包含内容的呈现页面。因此我们只需要一层层不断进入目录中,拿到该目录所包含的所有文件的URL,即算是完成目标。

4e80b5e14c35

tbody

4e80b5e14c35

4e80b5e14c35

爬取思路

我们把爬取的目标抽象成树型结构,先假设这是一颗无环的生成树,不对爬到的URL进行重复检测。因此只需要借助队列,对树进行层次遍历即可。

4e80b5e14c35

目录树

工具

爬网页用的两库已经很熟悉了,除此之外我还需要用到python自带的队列库queue。我要用到 queue.Queue() 类中提供了三个方法,入队put()、出队get()和判队空empty()。get()如果在空队列上操作,会一直阻塞等待新元素入队。

from bs4 import BeautifulSoup

import requests

from queue import Queue

我准备设置两个队列,一个是用于暂存URL的cache,一个用于输出爬取成果的result。

处理流程如下:

4e80b5e14c35

处理流程

先来看看伪码的实现

def 爬取(url):

html = 访问(url)

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值