[入门级项目]采集《python进阶》教程

首发于:mp.weixin.qq.com/s/Xo7S


前言


  • 难度:入门级


  • python版本:3.7


  • 主要收获:爬虫经验+100;python经验+100



主要会用到python和爬虫技术,入门级项目,偏简单,适合新人练手,看这个之前最好是对python和爬虫有一些了解


需求


需求名称:采集《python进阶》教程


网页:docs.pythontab.com/inte


需求:采集网页上的所有进阶内容,并整理成文档


采集具体的进阶教程内容即可



f55c9695e9565d837c0c031d019bb913.jpeg
0b970b03fcf8c02d95e0fb0ae4fbbac9.png



需求分析


我们看下需求,需要采集的东西并不是很多,我们先打开网页看一下



7bacce6ee957c674c7802c4ff94e22bb.jpeg



看下目录,数据量不是很多


大致数了一下就几十个页面,这很少了


对应下需求,根据经验,列下我们需要解决的一些问题


  1. 单页面抓取问题


  1. 多页面url获取问题


  1. 整理成文档



单页面抓取问题


这个问题其实就是看下抓取页面的请求构造


我们先找下源代码中是否有包含我们所需要的数据


在页面上找个稍微特殊的词



1e86a3440a9d5bd1932db761601b7cec.jpeg



比如说 “小清新”


键盘按下ctrl+U查看下源代码


在按下ctrl+F,查找“小清新”



ea2f9944925e350c5767310c9c87b005.jpeg



可以看到,源码中就直接有我们所需要的数据,那么可以判断,这八成就是一个get请求


如果没有反爬,那就比较简单了


直接构建一个最简单的get请求试一下


import requests 
r = requests.get('https://docs.pythontab.com/interpy/')
print(r.text)
print(r)

运行一下,打印输出的是有我们需要的数据(由于太多就不贴了),完美!


多页面url获取问题


我们可以看到所需要采集的页面几十个,并不是很多,就需求目标而言,我们其实是可以一个个的复制下来,但是这样没有技术范儿,而且如果说我们采集的页面很多呢,几百几千,甚至几十万,手动复制的效率实在过于低下


我们打开网页


可以看到有个Next按钮



9c1adbeeb9b032e9dec8f96e81fdb930.jpeg



这里就有下一页的url


我们跳到最后一页,就会发现Next没有了



24873fab25f94575eb062cbb6eac28ff.jpeg



那么我们是不是就可以通过这种方式来拿到各个页面的url


我们一直去提Next按钮获取下一页的url,直到最后一页,没有Next,判断结束


整理成文档


本来想将抓取到的内容(去标签)保存成txt的,然后在转成pdf格式,好看一些


不过由于保存的内容没有格式,转换后并不好看,所以决定不去标签,直接存成html文件


然后在转换成pdf


这里有个在线的将html转成pdf,还是满好用的:aconvert.com/cn/ebook/


代码实现


逻辑理清了,代码实现就比较简单了


直接上下代码


import requests 
from lxml import etree
from urllib import parse
def get_html(url):
    """网页采集数据,并保存到文件中

    Args:
        url (str): 待采集的url

    Returns:
        str: 下一页的url
    """
    r = requests.get(url)
    html = etree.HTML(r.text)
    content = html.xpath('//div[@role="main"]')
    content0 = etree.tostring(content[0])
    # print(content0)
    with open("python进阶教程.html","ab+") as f:
        f.write(content0)
    _next = html.xpath("//a[contains(text(),'Next »')]/@href")
    if not _next:
        return ''
    nexturl = parse.urljoin(url,_next[0])
    print(nexturl)
    return nexturl
url = 'https://docs.pythontab.com/interpy/'
while 1:
    url = get_html(url)
    if not url:
        break 


运行代码会在当前目录生成一个python进阶教程.html文件


打开看一眼



4a370209416bb301118b2f5c850fb17e.jpeg



还是可以的,不过我这里把它转换成更通用的pdf类型


html转换成pdf


先打开在线转换的网页:aconvert.com/cn/ebook/


选择html文件


选择转换的目标格式


点击转换


下载文件



19c8ed6fb050a7d5095890b240d1a6eb.jpeg



打开pdf看一下



0f737fa32669b1a9982c46abdf5f2785.jpeg



格式还是很完美的!


注:


其实python有个pdfkit库,可以将一个html转换成pdf,有兴趣的朋友可以尝试下


关注我获取更多内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值