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利用不到一百行代码实现一个小siri
Mar 02 Python
python实现发送邮件及附件功能
Mar 02 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
分析python请求数据
Aug 19 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
python 写一个性能测试工具(一)
Oct 24 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
python图像处理 PIL Image操作实例
Apr 09 Python
python manim实现排序算法动画示例
Aug 14 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 array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
python实现telnet客户端的方法
2015/04/15 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
酒后驾驶检讨书
2014/01/27 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
团员年度个人总结
2015/02/26 职场文书
保护环境的宣传语
2015/07/13 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS