共计 1782 个字符,预计需要花费 5 分钟才能阅读完成。
首发于:https://mp.weixin.qq.com/s/Xo…
前言
- 难度:入门级
- python 版本:3.7
- 次要播种:爬虫教训 +100;python 教训 +100
次要会用到 python 和爬虫技术,入门级我的项目,偏简略,适宜新人练手,看这个之前最好是对 python 和爬虫有一些理解
需要
需要名称:采集《python 进阶》教程
网页:https://docs.pythontab.com/in…
需要:采集网页上的所有进阶内容,并整顿成文档
采集具体的进阶教程内容即可
需要剖析
咱们看下需要,须要采集的货色并不是很多,咱们先关上网页看一下
看下目录,数据量不是很多
大抵数了一下就几十个页面,这很少了
对应下需要,依据教训,列下咱们须要解决的 一些问题
- 单页面抓取问题
- 多页面 url 获取问题
- 整顿成文档
单页面抓取问题
这个问题其实就是看下抓取页面的申请结构
咱们先找下源代码中是否有蕴含咱们所须要的数据
在页面上找个略微非凡的词
比如说“小清爽”
键盘按下 ctrl+ U 查看下源代码
在按下 ctrl+F,查找“小清爽”
能够看到,源码中就间接有咱们所须要的数据,那么能够判断,这八成就是一个 get 申请
如果没有反爬,那就比较简单了
间接构建一个最简略的 get 申请试一下
import requests
r = requests.get('https://docs.pythontab.com/interpy/')
print(r.text)
print(r)
运行一下,打印输出的是有咱们须要的数据(因为太多就不贴了),完满!
多页面 url 获取问题
咱们能够看到所须要采集的页面几十个,并不是很多,就需要指标而言,咱们其实是能够一个个的复制下来,然而这样没有技术范儿,而且如果说咱们采集的页面很多呢,几百几千,甚至几十万,手动复制的效率切实过于低下
咱们关上网页
能够看到有个 Next 按钮
这里就有下一页的 url
咱们跳到最初一页,就会发现 Next 没有了
那么咱们是不是就能够通过这种形式来拿到各个页面的 url
咱们始终去提 Next 按钮获取下一页的 url,直到最初一页,没有 Next,判断完结
整顿成文档
原本想将抓取到的内容 (去标签) 保留成 txt 的,而后在转成 pdf 格局,难看一些
不过因为保留的内容没有格局,转换后并不难看,所以决定不去标签,间接存成 html 文件
而后在转换成 pdf
这里有个在线的将 html 转成 pdf,还是满好用的:https://www.aconvert.com/cn/e…
代码实现
逻辑理清了,代码实现就比较简单了
间接高低代码
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
文件
关上看一眼
还是能够的,不过我这里把它转换成更通用的 pdf 类型
html 转换成 pdf
先关上在线转换的网页:https://www.aconvert.com/cn/e…
抉择 html 文件
抉择转换的指标格局
点击转换
下载文件
关上 pdf 看一下
格局还是很完满的!
注:
其实 python 有个 pdfkit
库,能够将一个 html 转换成 pdf,有趣味的敌人能够尝试下
关注我获取更多内容