抓取网页生成电子书(Python爬虫实践:将网页转换为pdf电子书写爬虫)

优采云 发布时间: 2021-11-07 14:05

  抓取网页生成电子书(Python爬虫实践:将网页转换为pdf电子书写爬虫)

  2018-03-26 • 用 Python 阅读

  Python实践一、将网页转成pdf电子书

  我是个“采集狂”(别以为是歪的,我就是喜欢采集技术帖),遇到好东西就喜欢采集或者记录好东西,尤其是好的技术文章或者工具。这里要提一下廖雪峰老师的官方网站。廖老师写的Python、JavaScript、Git教程真的很好,经常去逛街。所以今天有必要把廖老师的教程从网页转成PDF电子书,让你随时随地离线学习和采集。说到这里,进入今天的话题Python爬虫练习:将网页转成pdf电子书

  写爬虫好像不比用Python好。Python社区提供的爬虫工具让你眼花缭乱。各种可以直接使用的库,分分钟写一个爬虫。今天想写一个爬虫。, 爬下廖雪峰的Python教程,制作PDF电子书供离线阅读。

  在开始写爬虫之前,我们先来分析一下网站的页面结构。页面左侧是教程目录大纲。每个URL对应右边文章的一篇文章,右上角是文章的标题,中间是文章的正文部分。正文内容是我们关注的焦点。我们要抓取的数据是所有网页的正文部分。下面是用户的评论区。评论区对我们来说什么都不是。使用它,所以它可以被忽略。

  

  工具准备

  搞清楚网站的基本结构后,就可以开始准备爬虫依赖的工具包了。requests和beautifulsoup是爬虫的两大神器,reuqests用于网络请求,beautifulsoup用于操作html数据。有了这两个班车,我们就可以顺利工作了。我们不需要像scrapy这样的爬虫框架。小程序有点像大锤。另外,既然是把html文件转换成pdf,就得有相应的库支持。wkhtmltopdf 是一个非常好的工具。它可用于从 html 到 pdf 的多平台转换。pdfkit 是 wkhtmltopdf 的 Python 包。先安装以下依赖包,然后安装wkhtmltopdf

  1234

  pip install requestspip install beautifulsoup4pip install pdfkitpip install PyPDF2

  安装 wkhtmltopdf

  Ubuntu 和 CentOS 可以直接从命令行安装。

  12

  $ sudo apt-get install wkhtmltopdf # ubuntu$ sudo yum intsall wkhtmltopdf # centos

  Windows平台直接在wkhtmltopdf官网2下载稳定版进行安装。安装完成后,将程序的执行路径添加到系统环境$PATH变量中,否则pdfkit会找不到wkhtmltopdf而报错。No wkhtmltopdf executable found 几句,因为这里的处理不好,程序执行pdfkit.from_file(htmls, file_name, options=options)时会报错。

  现在开始手动安装wkhtmltopdf(博主电脑操作系统为macOS 10.12.2)

  1、去官网。下载并运行 wkhtmltox-0.12.4_osx-cocoa-x86-64.pkg

  2、将wkhtmltoimage和wkhtmltopdf复制到/usr/bin目录下,更改所有者,并添加可执行属性

  123456

  sudo cp /usr/local/bin/wkhtmltopdf /usr/bin/sudo cp /usr/local/bin/wkhtmltoimage /usr/bin/sudo chown root:root /usr/bin/wkhtmltopdfsudo chown root:root /usr/bin/wkhtmltoimagesudo chmod +x /usr/bin/wkhtmltopdfsudo chmod +x /usr/bin/wkhtmltoimage

  不出意外,执行第一句时,会遇到chmod: Unable to change file modle on /usr/bin。这是因为 Apple 使用了 OS X El Capitan 10.11 的 Rootless 机制。这种机制可以理解为更高级别的系统内核保护措施,系统默认会锁定/system、/sbin、/usr三个目录。

  关闭无根

  关闭和打开 Rootless 非常简单。方法如下:重启Mac,听到启动声后按Command+R,进入recovery模式,在上面的菜单实用工具中找到并打开Terminal(如果菜单没有出现在顶部,请继续重启^_^)。输入以下命令:

  12

  $ csrutil disable #关闭 Rootless$ csrutil enable #开启 Rootless

  OK,到此我们的工具和环境都配置好了,下面开始实现功能。

  爬虫实现

  一切准备就绪后,就可以开始编写代码了,但是在编写代码之前,应该先整理一下思路。该程序的目的是将所有URL对应的html body部分保存在本地,然后使用pdfkit将这些文件转换为pdf文件。让我们拆分任务。首先将某个URL对应的html body保存到本地,然后找到所有的URL进行同样的操作。使用Chrome浏览器找到页面body部分的标签,按F12找到body对应的div标签:

  ,div是网页的body内容。使用requests在本地加载整个页面后,可以使用beautifulsoup操作HTML的dom元素来提取body内容。

  

  具体实现代码如下: 使用soup.find_all函数查找body标签,然后将body部分的内容保存到a.html文件中。

  12345678910111213141516171819202122232425262728293031323334353637

<p>def parse_url_to_html(url, name): """ 解析URL,返回HTML内容 :param url:解析的url :param name: 保存的html文件名 :return: html """ try: response = requests.get(url) soup = BeautifulSoup(response.content, &apos;html.parser&apos;) # 正文 body = soup.find_all(class_="x-wiki-content")[0] # 标题 title = soup.find(&apos;h4&apos;).get_text() # 标题加入到正文的最前面,居中显示 center_tag = soup.new_tag("center") title_tag = soup.new_tag(&apos;h1&apos;) title_tag.string = title center_tag.insert(1, title_tag) body.insert(1, center_tag) html = str(body) # body中的img标签的src相对路径的改成绝对路径 pattern = "(

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线