python爬取网页转换为PDF文件


Posted in Python onJune 07, 2018

爬虫的起因

官方文档或手册虽然可以查阅,但是如果变成纸质版的岂不是更容易翻阅与记忆。如果简单的复制粘贴,不知道何时能够完成。于是便开始想着将Android的官方手册爬下来。

全篇的实现思路

  1. 分析网页
  2. 学会使用BeautifulSoup库
  3. 爬取并导出

参考资料:

* 把廖雪峰的教程转换为PDF电子书
* Requests文档
* Beautiful Soup文档

配置

在Ubuntu下使用Pycharm运行成功
转PDF需要下载wkhtmltopdf

具体过程

网页分析

如下所示的一个网页,要做的是获取该网页的正文和标题,以及左边导航条的所有网址

python爬取网页转换为PDF文件

接下来的工作就是找到这些标签喽…

关于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)

最后的效果图

python爬取网页转换为PDF文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
神经网络理论基础及Python实现详解
Dec 15 Python
python+opencv实现动态物体追踪
Jan 09 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
代码分析Python地图坐标转换
Feb 08 Python
python频繁写入文件时提速的方法
Jun 26 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
基于pandas中expand的作用详解
Dec 17 Python
Python telnet登陆功能实现代码
Apr 16 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 #Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 #Python
python生成ppt的方法
Jun 07 #Python
python实现按长宽比缩放图片
Jun 07 #Python
python实现批量修改图片格式和尺寸
Jun 07 #Python
python实现批量图片格式转换
Jun 16 #Python
python脚本实现验证码识别
Jun 07 #Python
You might like
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
EJB的几种类型
2012/08/15 面试题
医护人员英文求职信范文
2013/11/26 职场文书
英文自荐信
2013/12/19 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
植树节口号
2014/06/21 职场文书
租房协议书样本
2014/08/20 职场文书
校车安全责任书
2014/08/25 职场文书
2014年关工委工作总结
2014/11/17 职场文书
阿凡达观后感
2015/06/10 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技