如何在python中将网页转换为pdf,就像在print中另存为pdf选项一样

时间:2017-10-18 13:54:08

标签: python macos python-2.7 mechanize pdfkit

我有一个网站需要登录(身份验证),其中有一个消息页面,我想将所有注释转换为pdfs。最初我只是点击每个评论并在firefox浏览器中选择打印,只是将评论流保存为pdf。问题是有这么多,所以我决定写一个python脚本,但我遇到了问题。这是我的代码:

import mechanize
import pdfkit
import os

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [("User-agent","Firefox")]
sign_in = br.open("www.mysite.com")

br.select_form(nr = 0)
br["username"] = "username"
br["password"] = "password"
logged_in = br.submit()

br.open("comments_page")
all_comment_links = []

# Iterate the links
for link in br.links():
  if "comment" in link.url:
    all_comment_links.append(link)

for l in all_comment_links:
  ret = br.open("comments_page").read()
  pdfkit.from_url(l.url, l.text + ".pdf")
  # pdfkit.from_string(ret, l.text + ".pdf")

  file = open(l.text + ".html", "w")
  file.write(ret)
  file.close()

# try from file
#for f in glob.glob("*.html"):
#  pdfkit.from_file(f, f.replace(".html", ".pdf"))

我正在尝试使用pdfkit lib将每个评论页面转换为pdf,但一直未成功。我尝试过使用网址(pdfkit.from_url),只是字符串(pdfkit.from_string),并将html保存到文件(pdfkit.from_file),但无法弄清楚为什么这不是工作。据我所知,机械化的东西是有效的,因为我的html文件包含我想要的所有正确内容的评论。我已经四处寻找不同的方法,但这就是我想要的东西。

脚本不会抛出任何错误,它只是挂起第一个pdf,就像它无法访问页面/内容一样。我让它运行了一段时间,但只创建了第一个pdf文件,但是当我尝试打开它时,它说它已经损坏了。我使用pdfkit是错误的还是我应该使用其他东西将这些页面转换为pdf?谢谢,任何帮助表示赞赏。在mac os x上运行。

1 个答案:

答案 0 :(得分:0)

我最初的猜测是pdfkit没有收到来自mechanize的任何会话信息,所以它试图在没有登录的情况下使用身份验证后的页面。

您可能应首先使用mechanize下载html,然后在本地进行转换。

但是,既然你说你没有从文件中获得结果,你应该尝试交互式python shell并尝试手动将pdfkit应用到本地文件,看看你得到了什么错误。

其他可能是pdfkit输入或输出文件都不在您可能合理期望的目录中,因此应该尝试使用绝对路径作为参数。