1

我正在使用 for 循环来查看列表并为 pdfkit 模块创建变量,它对于列表中的前两项工作正常,然后在第三项上出现错误。这是我的代码:

import pdfkit
import time


link1 = "https://www."
link2 = ".com"
pdf = ".pdf"
for line in open('links.txt'):
  print(line.strip("\n\r"))
  newlink = link1 + line.strip("\n\r") + link2
  print(newlink)
  newpdf = line.strip("\n\r") + pdf
  print(newpdf)
  pdfkit.from_url(newlink, newpdf)
print('Finished')

并将其从此列表中拉出:

bing
yahoo
google

它成功完成了前 2 个项目并在它们上打印了一个 pdf,然后我收到一条错误消息,

Traceback (most recent call last): File new.py, line 14 in module pdfkit.from_url(newlink, newpdf)

File "/usr/local/lib/python2.7/dist-packages/pdfkit/api.py", line 26 in from_return r.to_pdf(output_path)

File "/usr/local/lib/python2.7/dist-packages/pdfkit/pdfkit.py," line 156, in traise IOError('wkhtmltopdf reported an error:\n' + stderr)

IOError:wkhtmltopdf reported an error:

有谁知道我为什么会收到这个错误以及如何解决它?

4

2 回答 2

0

当我运行与您相同的代码时,它卡在“雅虎”上,而我尝试过的谷歌和其他一些网站可以正常工作。它为我抛出了以下错误。

raise IOError("wkhtmltopdf exited with non-zero code {0}. error:\n{1}".format(exit_code, stderr))
OSError: wkhtmltopdf exited with non-zero code 1. error:
Loading pages (1/6)
QFont::setPixelSize: Pixel size <= 0 (0)
QFont::setPixelSize: Pixel size <= 0 (0)
libpng warning: iCCP: known incorrect sRGB profile
Counting pages (2/6)                                               
QFont::setPixelSize: Pixel size <= 0 (0)
QFont::setPixelSize: Pixel size <= 0 (0)
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done                                                                      
Exit with code 1 due to network error: ProtocolFailure

正如您在此处看到的,这似乎是由于协议导致的错误,这意味着由于wkhtml某种原因无法加载页面。我认为您必须收到的错误一定来自类似的来源。因此,如果网站的选择只是随意的,那么选择有效的网站。

如果没有,请告诉我,我将深入研究wkhtml文档以尝试找出错误来源。

于 2018-06-04T04:03:40.140 回答
0

我还没有找到解决网络错误的方法wkhtml。但是,我反而找到了一个可以使用的替代插件,名为weasyprint.

这是实现了 weasyprint 的代码的替代版本。

from weasyprint import HTML

link1 = "https://www."
link2 = ".com"
pdf = ".pdf"
for line in open('links.txt'):
  print(line.strip("\n\r"))
  newlink = link1 + line.strip("\n\r") + link2
  print("newlink "+newlink)
  newpdf = line.strip("\n\r") + pdf
  print(newpdf)
  HTML(newlink).write_pdf(newpdf)
print('Finished')

希望这会有所帮助。

于 2018-06-04T05:37:20.850 回答