1

私はPythonを使用してWebページをクロールし、それを繰り返し実行しています。そのため、3つのhtmlファイルを使用してWebページを保存していますが、どういうわけか、これらのファイルは上書きされず、古いファイルを取得しています。これが私が使用しているコードです:

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すべてを1つのファイルに連結する(大文字のO)オプションを使用しています。

'-Oファイル''--output-document= file' </ p>

ドキュメントは適切なファイルに書き込まれませんが、すべてが連結されてファイルに書き込まれます。'-'がファイルとして使用されている場合、ドキュメントは標準出力に出力され、リンク変換が無効になります。(「./-」を使用して、文字通り「-」という名前のファイルに出力します。)「-O」の使用は、単に「URL内のファイルの代わりに名前ファイルを使用する」ことを意味するものではありません。むしろ、シェルリダイレクトに似ています。;wget -O file http://fooのように機能することを目的としています。wget -O - http://foo > fileファイルはすぐに切り捨てられ、ダウンロードされたすべてのコンテンツがそこに書き込まれます。

このため、「-N」(タイムスタンプチェック用)は「-O」との組み合わせではサポートされていません。ファイルは常に新しく作成されるため、常に非常に新しいタイムスタンプになります。この組み合わせを使用すると、警告が発行されます。

同様に、「-r」または「-p」を「-O」と一緒に使用すると、期待どおりに機能しない場合があります。Wgetは、最初のファイルをファイルにダウンロードしてから、残りを通常の名前にダウンロードします。ダウンロードされたすべてのコンテンツは次のようになります。ファイルに配置されます。これはバージョン1.11で無効にされていましたが、この動作が実際に使用できる場合があるため、1.11.2で(警告付きで)復元されました。

'-k'との組み合わせは、単一のドキュメントをダウンロードする場合にのみ許可されることに注意してください。その場合、すべての相対URIが外部URIに変換されるだけです。'-k'は、すべてが1つのファイルにダウンロードされている場合、複数のURIには意味がありません。'-k'は、出力が通常のファイルである場合にのみ使用できます。

このスニペットはwgetのマニュアルから取られました。

お役に立てれば。

于 2013-01-16T17:52:14.510 に答える