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基础教程之循环介绍
Aug 29 Python
跟老齐学Python之用Python计算
Sep 12 Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
linux下python使用sendmail发送邮件
May 22 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
python的等深分箱实例
Nov 22 Python
python异常处理try except过程解析
Feb 03 Python
python实现人脸签到系统
Apr 13 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
Python eval函数介绍及用法
Nov 09 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
PHP基础知识介绍
2013/09/17 PHP
php的ajax简单实例
2014/02/27 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
php构造函数与析构函数
2016/04/23 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
js登录弹出层特效
2014/03/07 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
python判断字符串是否纯数字的方法
2014/11/19 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python实战购物车项目的实现参考
2019/02/20 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
打架检讨书100字
2014/01/19 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
学校后勤岗位职责
2014/02/19 职场文书
2014年国培研修感言
2014/03/09 职场文书
个人承诺书格式
2014/06/03 职场文书
销售代理协议书
2014/09/30 职场文书
教师个人学习总结
2015/02/11 职场文书