For 循环遍历列表中的前 2 项,然后在第三项出现 Tracback 错误
For loop goes through the first 2 items on the list then has a Tracback error on the Third
我正在使用 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:
有人知道我为什么会收到此错误以及如何解决吗?
当我 运行 使用与您相同的代码时,它卡在了 "yahoo" 而 google 和我曾尝试过的其他几个网站上,都可以正常工作。它为我抛出以下错误。
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
文档以找出错误来源。
我还没有找到 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')
希望这对您有所帮助。
我正在使用 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:
有人知道我为什么会收到此错误以及如何解决吗?
当我 运行 使用与您相同的代码时,它卡在了 "yahoo" 而 google 和我曾尝试过的其他几个网站上,都可以正常工作。它为我抛出以下错误。
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
文档以找出错误来源。
我还没有找到 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')
希望这对您有所帮助。