使用python抓取liaoxuefeng网站正文和目录

本文档参考了该博客和其源代码不过为了方便,我没有使用beautifulsoup和pdfkit,而是直接通过python自带的HTMLParser来处理html,然后解析出html中的主体内容,然后重新生成一个新的html,并重命名为章节内容。首先我们看一下廖雪峰python的网页结构 分为:目录、正文、其他。对于我们有用的信息都在目录和正文中,而且目录我们只需要解析一次,因为各个页面中的目录都
摘要由CSDN通过智能技术生成

本文档参考了该博客和其源代码

不过为了方便,我没有使用beautifulsoup和pdfkit,而是直接通过python自带的HTMLParser来处理html,然后解析出html中的主体内容,然后重新生成一个新的html,并重命名为章节内容。

首先我们看一下廖雪峰python的网页结构
网页结构
分为:目录、正文、其他。对于我们有用的信息都在目录和正文中,而且目录我们只需要解析一次,因为各个页面中的目录都是一样的。
所以我们的解析思路是这样的:
1. 从第一页中解析目录,提取目录各项名称和对应的url地址,分别保存到两个列表中,即titleList和addrList
2. 创建一个以titleList中各项为文件名的html文件并打开,将文件名写入文件开头作为标题,
3. 依次次访问addrlist中对应的各个网页,提取网页中的正文部分,并将正文部分内容写入到之前打开的文件中,同时规划好各个部分的格式。

从首页中获取目录信息

def get_url_list():
    """
    获取所有URL目录列表
    :return:
    """
    response = urllib.request.urlopen("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000")

    htmlcontext=response.read().decode("UTF-8")

    myHp=hp()
    myHp.feed(htmlcontext)
    myHp.close()

首先通过urllib.response的函数来获取网页内容,然后我们创建一个hp对象来处理读取的html文档内容。
对于hp类是继承自HTMLParser类的,同时需要重载HTMLParser的三个函数handle_starttag、handle_endtag和handle_data
当检测到节点头时,就会触发handle_starttag的调用,例如<div>
当检测到节点尾时,就会触发handle_endtag的调用,例如</div>
当检测到其他内容是会调用handle_data,这个通常来处理节点头和节点尾之间的文本节点,例如<div>ABC</div>中的ABC
另外节点头中通常包含有属性值,这些值通常在调用handle_starttag是通过attr这样的一个元组序列来保存传递的。
于是,当我们需要判断某一个节点头中是否包含我们需要的属性值是,我们就需要遍历这个attr,比如有这样一个代码:

<div class="start">
python教程
</div>

判断该段代码头是否class=”start”

for each in attr:
    if class == each[0] and "start"== each[1]:
        return True
return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值