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简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
python中学习K-Means和图片压缩
Nov 20 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
详解Python3 基本数据类型
Apr 19 Python
django的model操作汇整详解
Jul 26 Python
python退出循环的方法
Jun 18 Python
利用python 下载bilibili视频
Nov 13 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
Python获取指定网段正在使用的IP
Dec 14 Python
python和opencv构建运动检测器的实现
Mar 03 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 表单提交给自己
2008/07/24 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
原生JavaScript实现随机点名表
2021/01/14 Javascript
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
3种python调用其他脚本的方法
2020/01/06 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
python简单实现插入排序实例代码
2020/12/16 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
会计助理的岗位职责
2013/11/29 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
小学毕业寄语大全
2014/04/03 职场文书
宣传标语大全
2014/07/01 职场文书
励志演讲稿200字
2014/08/21 职场文书
中队活动总结
2014/08/27 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书