1

我正在使用 python 来抓取网页并且我正在迭代地进行操作 - 所以我使用 3 个 html 文件来存储网页,但不知何故我发现这些文件没有被覆盖,而且我仍然得到旧文件。这是我正在使用的代码:

def Vals(a,b):
    file1="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file1.html"
    file2="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file22.html"
    file3="C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file33.html"

    Query1='"http://scholar.google.com/scholar?q=%22'+a+'%22&btnG=&hl=en&as_sdt=0%2C24"'
    URL1='wget --user-agent Mozilla '+Query1+' -O '+file1

    Query2='"http://scholar.google.com/scholar?q=%22'+b+'%22&btnG=&hl=en&as_sdt=0%2C24"'
    URL2='wget --user-agent Mozilla '+Query2+' -O '+file2

    Query3='"http://scholar.google.com/scholar?q=%22'+a+'%22+%22'+b+'%22&btnG=&hl=en&as_sdt=0%2C24"'
    URL3='wget --user-agent Mozilla '+Query3+' -O '+file3
##    print Query1
##    print Query2
##    print Query3
##    
##    print URL1
##    print URL2
##    print URL3


    os.system("wget "+ URL1)
    os.system("wget "+ URL2)
    os.system("wget "+ URL3)

    f1 = open(file1,'r+')
    f2 = open(file2,'r+')
    f3 = open(file3,'r+')

    S1=str(f1.readlines())

    start=S1.find("About")+6
    stop=S1.find("results",start)-1
    try:
        val1=float((S1[start:stop]).replace(",",""))
    except ValueError:
        val1=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file1.html')

    S1=str(f2.readlines())
    #f2.close()
    start=S1.find("About")+6
    stop=S1.find("results",start)-1

    try:
        val2=float((S1[start:stop]).replace(",",""))
    except ValueError:
        val2=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file22.html')

    S1=str(f3.readlines())
    #f3.close()
    start=S1.find("About")+6
    stop=S1.find("results",start)-1
    try:
        val3=float((S1[start:stop]).replace(",",""))
    except ValueError:
        val3=Reads('C:\\Users\\YAS_ayush\\Desktop\\dataset_recommendation\\file33.html')
    f1.truncate()
    f2.truncate()
    f3.truncate()
    f1.close()
    f2.close()
    f3.close()
    return (val1,val2,val3)

谁能告诉我关闭文件是否有错误,或者我应该如何关闭它们以达到我的目的。

谢谢

4

1 回答 1

0

您正在使用-O(capital O) 选项,它将所有内容连接到 1 个文件。

'-O 文件' '--output-document=file'</p>

这些文档不会被写入适当的文件,但所有文件将连接在一起并写入文件。如果使用“-”作为文件,文档将打印到标准输出,禁用链接转换。(使用 './-' 打印到一个字面上名为 '-' 的文件。)使用 '-O' 并不意味着简单地表示“使用名称文件而不是 URL 中的文件名”;相反,它类似于 shell 重定向:wget -O file http://foo旨在像wget -O - http://foo > file; 文件将被立即截断,所有下载的内容都将写入那里。

由于这个原因,'-N'(用于时间戳检查)不支持与'-O'结合使用:因为文件总是新创建的,它总是有一个非常新的时间戳。如果使用此组合,将发出警告。

类似地,使用 '-r' 或 '-p' 和 '-O' 可能不会像你期望的那样工作:Wget 不会只是将第一个文件下载到文件,然后将其余文件下载到它们的正常名称:所有下载的内容都将是放在档案里。这在 1.11 版本中被禁用,但在 1.11.2 中已恢复(带有警告),因为在某些情况下此行为实际上可以使用。

请注意,仅在下载单个文档时才允许与“-k”组合,因为在这种情况下,它只会将所有相关 URI 转换为外部 URI;当多个 URI 都被下载到单个文件时,'-k' 没有意义;'-k' 只能在输出为常规文件时使用。

这个片段取自wget 的手册

希望这可以帮助。

于 2013-01-16T17:52:14.510 回答