Python 在excel文件中以两张表的形式保存已删除的文档
我创建了一个scraper,用来解析网页中的一些文档,并将其保存到一个excel文件中,创建两张工作表。但是,当我运行它时,我可以看到它只将最后一个链接的文档保存在一张表单中,而应该有两张表单包含来自两个链接的文档。我甚至打印了结果以查看背景中发生了什么,但我发现没有任何错误。我觉得第一张纸被覆盖了,第二张永远不会被创建。如何绕过此问题,以便将数据保存在excel文件中的两张表格中。提前感谢您的关注 这是我的密码:Python 在excel文件中以两张表的形式保存已删除的文档,python,excel,python-3.x,web-scraping,pyexcel,Python,Excel,Python 3.x,Web Scraping,Pyexcel,我创建了一个scraper,用来解析网页中的一些文档,并将其保存到一个excel文件中,创建两张工作表。但是,当我运行它时,我可以看到它只将最后一个链接的文档保存在一张表单中,而应该有两张表单包含来自两个链接的文档。我甚至打印了结果以查看背景中发生了什么,但我发现没有任何错误。我觉得第一张纸被覆盖了,第二张永远不会被创建。如何绕过此问题,以便将数据保存在excel文件中的两张表格中。提前感谢您的关注 这是我的密码: import requests from lxml import html fr
import requests
from lxml import html
from pyexcel_ods3 import save_data
name_list = ['Altronix','APC']
def docs_parser(link, name):
res = requests.get(link)
root = html.fromstring(res.text)
vault = {}
for post in root.cssselect(".SubBrandList a"):
if post.text == name:
refining_docs(post.attrib['href'], vault)
def refining_docs(new_link, vault):
res = requests.get(new_link).text
root = html.fromstring(res)
sheet = root.cssselect("#BrandContent h2")[0].text
for elem in root.cssselect(".ProductDetails"):
name_url = elem.cssselect("a[class]")[0].attrib['href']
vault.setdefault(sheet, []).append([str(name_url)])
save_data("docs.ods", vault)
if __name__ == '__main__':
for name in name_list:
docs_parser("http://store.immediasys.com/brands/" , name)
但是,当我为另一个站点编写代码时,它满足了创建不同的工作表并在这些工作表中保存文档的期望。以下是链接:
问题:我发现第一张纸被覆盖,而第二张永远不会被创建。如何绕过此问题,以便将数据保存在excel文件中的两张表格中
您可以在每个附加的链接上覆盖工作簿文件。您应该决不调用
在循环中保存数据(…
),只在脚本结束时一次
比较您的两个脚本,没有任何差异,两个脚本的行为相同,一次又一次地覆盖工作簿文件。在短时间内覆盖工作簿文件超过160次时,文件IO可能会过载
第一个脚本应创建13张工作表:
data sheet:powerpivot-etc links:20
data sheet:flappy-owl-videos links:1
data sheet:reporting-services-videos links:20
data sheet:csharp links:14
data sheet:excel-videos links:9
data sheet:excel-vba-videos links:20
data sheet:sql-server-videos links:9
data sheet:report-builder-2016-videos links:4
data sheet:ssrs-2016-videos links:5
data sheet:sql-videos links:20
data sheet:integration-services links:19
data sheet:excel-vba-user-form links:20
data sheet:archived-videos links:16
vault sheet:Altronix links:16
vault sheet:APC links:16
第二个脚本应创建2张工作表:
data sheet:powerpivot-etc links:20
data sheet:flappy-owl-videos links:1
data sheet:reporting-services-videos links:20
data sheet:csharp links:14
data sheet:excel-videos links:9
data sheet:excel-vba-videos links:20
data sheet:sql-server-videos links:9
data sheet:report-builder-2016-videos links:4
data sheet:ssrs-2016-videos links:5
data sheet:sql-videos links:20
data sheet:integration-services links:19
data sheet:excel-vba-user-form links:20
data sheet:archived-videos links:16
vault sheet:Altronix links:16
vault sheet:APC links:16
save_data(…
必须作为\uuu main\uuuu
中的最后一条语句调用一次。感谢stovfl的建议。您所说的方式解决了这个问题。但是,请按照我在上面粘贴的链接,我在那里为另一个站点编写了代码,我发现那里的结果没有任何错误。我从未使用过“save_data”“main”中的参数声明。为什么会有差异?顺便说一句,请提供它作为答案,因为你的建议很有说服力。链接代码与此处的代码大不相同。因此,你的过程不同,因此在保存文件方面也存在差异。很可能是数据的形状/格式被废弃。链接代码怎么会有这么大的差异?我在你的代码中没有发现任何逻辑statement.Shape、format等与在启用javascript之前不创建任何单独的表单无关。感谢stovfl的回答。我现在可以理解数据是如何被刮取的。但是,我提出了我的问题,因为第二个脚本也没有按照您在回答中所说的逻辑进行。调用“save_data”在“main”中不过,语句是有效的!您解释了该机制应该如何工作,但忘记提到为什么第二个脚本的行为不同,因为它只创建了一个工作表而不是两个。@Topto:我已经测试了您的两个脚本,没有发现任何差异。为什么在工作簿文件中只找到最后一个工作表的解释是由于每次保存_数据(…
Dict数据/vault
已清除。感谢stovfl所做的一切。我当时不在电脑旁,因此延迟了响应。