3

Web サイトからいくつかの pdf を取得しようとするために、Python で urllib の urlretrieve() 関数を使用しています。(少なくとも私にとっては) 動作を停止し、破損したデータ (164 KB ではなく 15 KB) をダウンロードしています。

これをいくつかのpdfでテストしましたが、すべて成功しませんでした(つまり、random.pdf)。私はそれを機能させることができないようです。私が取り組んでいるプロジェクトのpdfをダウンロードできるようにする必要があります。

これは、pdfをダウンロードするために使用しているコードの種類の例です(およびpdftotext.exeを使用してテキストを解析します):

def get_html(url): # gets html of page from Internet
    import os
    import urllib2
    import urllib
    from subprocess import call
    f_name = url.split('/')[-2] # get file name (url must end with '/')
    try:
        if f_name.split('.')[-1] == 'pdf': # file type
            urllib.urlretrieve(url, os.getcwd() + '\\' + f_name)
            call([os.getcwd() + '\\pdftotext.exe', os.getcwd() + '\\' + f_name]) # use xpdf to output .txt file
            return open(os.getcwd() + '\\' + f_name.split('.')[0] + '.txt').read()
        else:
            return urllib2.urlopen(url).read()
    except:
        print 'bad link: ' + url    
        return ""

私は初心者のプログラマーなので、どんな入力でも素晴らしいでしょう! ありがとう

4

3 に答える 3

9

requestsを試してみることをお勧めします。すべての実装を単純な API の背後に隠している、非常に優れたライブラリです。

>>> import requests
>>> req = requests.get("http://www.mathworks.com/moler/random.pdf")
>>> len(req.content)
167633
>>> req.headers
{'content-length': '167633', 'accept-ranges': 'bytes', 'server': 'Apache/2.2.3 (Red Hat) mod_jk/1.2.31 PHP/5.3.13 Phusion_Passenger/3.0.9 mod_perl/2.0.4 Perl/v5.8.8', 'last-modified': 'Fri, 15 Feb 2008 17:11:12 GMT', 'connection': 'keep-alive', 'etag': '"30863b-28ed1-446357e3d4c00"', 'date': 'Sun, 03 Feb 2013 05:53:21 GMT', 'content-type': 'application/pdf'}

ちなみに、15kb しかダウンロードできないのは、あなたの URL が間違っているからです。そのはず

http://www.mathworks.com/moler/random.pdf

しかし、あなたはGETしています

http://www.mathworks.com/moler/random.pdf/

>>> import requests
>>> c = requests.get("http://www.mathworks.com/moler/random.pdf/")
>>> len(c.content)
14390
于 2013-02-03T05:54:32.327 に答える