0

我创建了一个刮板,它应该解析网页中的一些文档并将其保存到创建两张工作表的 excel 文件中。但是,当我运行它时,我可以看到它只将最后一个链接的文档保存在一张纸中,而应该有两张纸,其中包含来自两个链接的文档。我什至打印了结果以查看后台发生的情况,但我发现没有任何问题。我认为第一张纸被覆盖,第二张纸永远不会被创建。如何解决这个问题,以便将数据保存在 Excel 文件的两张表中。提前感谢您查看它。

这是我的代码:

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)

但是,就像我为另一个站点编写代码时一样,它满足了创建不同工作表并在其中保存文档的期望。这是链接: https ://www.dropbox.com/s/bgyh1xxhew8hcvm/Pyexcel_so.txt?dl=0

4

1 回答 1

1

问题:我认为第一张纸被覆盖,第二张纸永远不会被创建。如何解决这个问题,以便将数据保存在 Excel 文件的两张表中。

您会覆盖每个附加链接上的工作簿文件。
你不应该save_data(...一个循环中调用,只在你的脚本结束时调用一次。

比较你两个脚本没有区别,两者的行为相同,一次又一次地覆盖工作簿文件。当您在短时间内覆盖工作簿文件超过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

第二个脚本应该创建2 个工作表:

vault sheet:Altronix links:16
vault sheet:APC links:16
于 2017-09-02T14:14:55.983 回答