python爬取网页转换为PDF文件
作者:moluchase 发布时间:2023-02-11 08:48:24
标签:python,爬取,pdf
爬虫的起因
官方文档或手册虽然可以查阅,但是如果变成纸质版的岂不是更容易翻阅与记忆。如果简单的复制粘贴,不知道何时能够完成。于是便开始想着将Android的官方手册爬下来。
全篇的实现思路
分析网页
学会使用BeautifulSoup库
爬取并导出
参考资料:
* 把廖雪峰的教程转换为PDF电子书
* Requests文档
* Beautiful Soup文档
配置
在Ubuntu下使用Pycharm运行成功
转PDF需要下载wkhtmltopdf
具体过程
网页分析
如下所示的一个网页,要做的是获取该网页的正文和标题,以及左边导航条的所有网址
接下来的工作就是找到这些标签喽…
关于Requests的使用
详细参考文档,这里只是简单的使用Requests获取html以及使用代理翻墙(网站无法直接访问,需要VPN)
proxies={
"http":"http://vpn的IP:port",
"https":"https://vpn的IP:port",
}
response=requests.get(url,proxies=proxies)
Beautiful Soup的使用
参考资料里面有Beautiful Soup文档,将其看完后,可以知道就讲了两件事:一个是查找标签,一个是修改标签。
本文需要做的是:
1. 获取标题和所有的网址,涉及到的是查找标签
#对标签进行判断,一个标签含有href而不含有description,则返回true
#而我希望获取的是含有href属性而不含有description属性的<a>标签,(且只有a标签含有href)
def has_href_but_no_des(tag):
return tag.has_attr('href') and not tag.has_attr('description')
#网页分析,获取网址和标题
def parse_url_to_html(url):
response=requests.get(url,proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
s=[]#获取所有的网址
title=[]#获取对应的标题
tag=soup.find(id="nav")#获取第一个id为"nav"的标签,这个里面包含了网址和标题
for i in tag.find_all(has_href_but_no_des):
s.append(i['href'])
title.append(i.text)
#获取的只是标签集,需要加html前缀
htmls = "<html><head><meta charset='UTF-8'></head><body>"
with open("android_training_3.html",'a') as f:
f.write(htmls)
对上面获取的网址分析,获取正文,并将图片取出存于本地;涉及到的是查找标签和修改属性
#网页操作,获取正文及图片
def get_htmls(urls,title):
for i in range(len(urls)):
response=requests.get(urls[i],proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
htmls="<div><h1>"+str(i)+"."+title[i]+"</h1></div>"
tag=soup.find(class_='jd-descr')
#为image添加相对路径,并下载图片
for img in tag.find_all('img'):
im = requests.get(img['src'], proxies=proxies)
filename = os.path.split(img['src'])[1]
with open('image/' + filename, 'wb') as f:
f.write(im.content)
img['src']='image/'+filename
htmls=htmls+str(tag)
with open("android_training_3.html",'a') as f:
f.write(htmls)
print(" (%s) [%s] download end"%(i,title[i]))
htmls="</body></html>"
with open("android_training_3.html",'a') as f:
f.write(htmls)
2.转为PDF
这一步需要下载wkhtmltopdf,在Windows下执行程序一直出错..Ubuntu下可以
def save_pdf(html):
"""
把所有html文件转换成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(html, "android_training_3.pdf", options=options)
最后的效果图
来源:https://blog.csdn.net/molu_chase/article/details/77508260
0
投稿
猜你喜欢
- lambda表达式python中形如:lambda parameters: expression称为lambda表达式,用于创建匿名函数,该
- 一、我希望画面尽量干净一点,这样看的人会舒服一点。撇开这个“设计常识”不谈,先回忆一些生活经验。设想一下你站在29楼阴暗的走廊里等待电梯,你
- 在numpy中的ndarry是一个数组,因此index就是位置下标,注意下标是从0开始增加:在插入时使用np.insert(),在末尾添加时
- 从百度查到在django中,使用post方法时,需要先生成随机码,以防止CSRF(Cross-site request forgery)跨站
- 水平线对于制作网页的朋友来说一定不会陌生,它在网页的版式设计中是非常有作用的,可以用来分隔文本和对象。
- Capstone是Kali Linux自带的一款轻量级反汇编引擎。它可以支持多种硬件构架,如ARM、ARM64、MIPS、X86。该框架使用
- PS:这段时间有点不在状态,刚刚找回那个状态,那么我们继续曾经的梦想今天我们来补充一下文件的上传的几种方式:首先我们先补充的一个知识点:一、
- Python 变量类型变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什
- 遇到问题nohup python flush.py &这样运行,生成了nohup.out文件,但是内容始终是空的,试了半天也不行。浪
- 1. 特定版本的python-opencv安装在https://www.lfd.uci.edu/~gohlke/pythonlibs/#op
- 源由刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定;后来看到python可以操作win32相关的api,恰好这一段时间正在学习
- 自己也百度了一下,然后写的,分为了三个部分,见三段代码代码:主程序代码import timefrom selenium&
- 目录前期准备界面编写截图功能实现OCR实现内容显示总结前期准备在这个阶段主要准备整个小程序的结构,既然要实现ocr,那么输入就是一张图片,而
- 在来回切换中英文输入法的时候连按两下shift总是会蹦出来全局搜索框真的很是麻烦,现在是把这个框给禁用掉1.按ctrl+shift+a,弹出
- 在本文中,我将分享五个 Jupyter 扩展来提大家的工作效率。 欢迎收藏学习,喜欢点赞支持。技术交流群文末提供,欢迎畅聊。让我们开始吧!1
- 按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 代码如下:creat
- 引言本文以Python3.9.1读取data.xlsx中包含的西瓜数据集3.0数据为例,数据集如下:编号色泽根蒂敲声纹理脐部触感密度含糖率好
- 前言 BeautifulSoup是主要以解析web网页的Python模块,它会提供一些强大的解释器,以解
- python jenkins 打包构建代码# pip install python-jenkinsimport jenkinsimport
- <!--#include file="admin_Checkuser.asp"--> <%