Saya sedang mengerjakan skrip untuk mengekstrak teks dari kasus hukum menggunakan https://case.law/docs/site_features /api. Saya telah membuat metode untuk mencari dan membuat-xlsx, yang berfungsi dengan baik, tetapi saya kesulitan dengan metode untuk membuka tautan pdf online, menulis (wb) dalam file temp, membaca dan mengekstrak data (teks inti), lalu tutup saya t. Tujuan utamanya adalah menggunakan konten kasus ini untuk NLP.

Saya telah menyiapkan fungsi (lihat di bawah) untuk mengunduh file:

def download_file(file_id):
    http = urllib3.PoolManager()
    folder_path = "path_to_my_desktop"
    file_download = "https://cite.case.law/xxxxxx.pdf"
    file_content = http.request('GET', file_download)
    file_local = open( folder_path + file_id + '.pdf', 'wb' )
    file_local.write(file_content.read())
    file_content.close()
    file_local.close()

Skrip berfungsi dengan baik karena mengunduh file dan dibuat di desktop saya, tetapi, ketika saya mencoba membuka file secara manual di desktop, saya mendapat pesan ini dari pembaca acrobat:

Adobe Acrobat Reader tidak dapat membuka 'file_id.pdf' karena bukan jenis file yang didukung atau karena file telah rusak (misalnya, dikirim sebagai lampiran email dan tidak diterjemahkan dengan benar

Saya pikir itu Perpustakaan jadi saya mencoba dengan Requests / xlswriter / urllib3... (contoh di bawah - saya juga mencoba membacanya dari skrip untuk melihat apakah itu Adobe itulah masalahnya, tetapi ternyata tidak)

# Download the pdf from the search results
URL = "https://cite.case.law/xxxxxx.pdf"
r = requests.get(URL, stream=True)
with open('path_to_desktop + pdf_name + .pdf', 'w') as f:
      f.write(r.text)

# open the downloaded file and remove '<[^<]+?>' for easier reading
with open('C:/Users/amallet/Desktop/r.pdf', 'r') as ff:
      data_read = ff.read()
      stripped = re.sub('<[^<]+?>', '', data_read)
      print(stripped)

Keluarannya adalah:

document.getElementById('next').value = document.location.toString();
document.getElementById('not-a-bot-form').submit();

Dengan 'wb' dan 'rb' sebagai gantinya (dan menghapus *** stripped *** sriptnya adalah:

r = requests.get(test_case_pdf, stream=True)
with open('C:/Users/amallet/Desktop/r.pdf', 'wb') as f:
      f.write(r.content)

with open('C:/Users/amallet/Desktop/r.pdf', 'rb') as ff:
      data_read = ff.read()
      print(data_read)

Dan outputnya adalah:

<html>
<head>
<noscript>
<meta http-equiv="Refresh" content="0;URL=?no_js=1&next=/pdf/7840543/In%20re%20the%20Extradition%20of%20Garcia,%20890%20F.%20Supp.%20914%
20(1994).pdf" />
</noscript>
</head>
<body>
<form method="post" id="not-a-bot-form">
<input type="hidden" name="csrfmiddlewaretoken" value="5awGW0F4A1b7Y6bx
rYBaA6GIvqx4Tf6DnK0qEMLVoJBLoA3ZqOrpMZdUXDQ7ehOz">
<input type="hidden" name="not_a_bot" value="yes">
<input type="hidden" name="next" value="/pdf/7840543/In%20re%20
the%20Extradition%20of%20Garcia,%20890%20F.%20Supp.%20914%20(1994).pdf" id="next">
</form>
<script>
document.getElementById(\'next\').value = document.loc
ation.toString();
document.getElementById(\'not-a-bot-form\').submit();
</script>
<a href="?no_js=1&next=/pdf/7840543/In%20re%20the%20Extradition%20of%20Garcia,%2
0890%20F.%20Supp.%20914%20(1994).pdf">Click here to continue</a>
</body>
</html>

Tapi tidak ada yang bekerja. Pdf tidak dilindungi oleh kata sandi, dan saya mencoba di situs web lain dan tidak berhasil juga.

Oleh karena itu, saya bertanya-tanya apakah saya memiliki masalah lain yang bukan tautan ke kode itu sendiri.

Tolong beri tahu saya jika Anda membutuhkan informasi tambahan.

Terima kasih

3
Arno 19 November 2020, 11:36

1 menjawab

Jawaban Terbaik

Sepertinya alih-alih PDF, server web memberi Anda halaman web yang dimaksudkan untuk mencegah bot mengunduh data dari situs.

Tidak ada yang salah dengan kode Anda, tetapi jika Anda masih ingin melakukan ini, Anda harus mengatasi pencegahan bot situs web.

0
Alan Ainsworth 19 November 2020, 10:59