爬虫实战:爬掉 MBA 智库中的百科

目标

首先说下目标:Spider 以下可以链接到的所有百科文本。

地址:https://wiki.mbalib.com/wiki/MBA%E6%99%BA%E5%BA%93%E7%99%BE%E7%A7%91:%E5%88%86%E7%B1%BB%E7%B4%A2%E5%BC%95

在这里插入图片描述


一些初始化

由于使用类,所以要进行一些初始化:

def __init__(self):
    self.wikiURL = 'https://wiki.mbalib.com'
    self.headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/51.0.2704.63 Safari/537.36'}
    self.hadGone = {
   }  # 用来保存已经爬取过的网页

从主页面开始说起

简单分析

首先需要明确一点:该页面下可能存在许多重复的网页。

为了防止漏爬,我们选择遍历所有索引;同时,为了提高效率和防止重复爬取,使用一个集合来存储已经爬过的 url,劲儿保证每次遍历的都是未曾经走过的网页。

例如:对于“金融理论”下的网页而言,存在以下四种子类(见下图),因此该随后的“国际收支调节理论”,“货币理论”,“银行理论”等网页无需重复爬取。
在这里插入图片描述

网页格式

在该网页内使用开发者模式,观察其格式:
在这里插入图片描述

注意到,索引界面都是用<p>表示的,我们可以一路 next 到底了。

现在,我们的任务是:将“金融百科”目录下的所有 href 属性爬取下来,并以列表的形式存储。
在这里插入图片描述

获取 href

吐槽:MBA中总共有 6 大类,竟然用style标签来区分。

代码:

def get_home_html(self):  # 用来爬取首页所需的索引
    url = "https://wiki.mbalib.com/wiki/MBA%E6%99%BA%E5%BA%93%E7%99%BE%E7%A7%91:%E5%88%86%E7%B1%BB%E7%B4%A2%E5%BC%95#.E9.87.91.E8.9E.8D.E7.99.BE.E7.A7.91"
    r = requests.get(url, headers=self.headers)
    soup = BeautifulSoup(r.text, 'lxml')  # 第二个参数是解析器,不知道为什么,此处不能使用'html.parser'
    # 为直观一点,多写了点 find
    indexs = soup.find("div", id="globalWrapper") \
        .find("div", id="column-content") \
        .find("div", id="content") \
        .find("div", id="bodyContent") \
        .find("div", style="margin:10px 5px;border:1px solid #B2DE90;background-color:#E3F0D8;padding:5px") \
        .find("div", style="padding:0 5px;") \
        .find_all('a')
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值