загрузить PDF с помощью python

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь загрузить PDF-файл из Интернета. У меня есть множество ссылок, необходимых для извлечения PDF-файла из Интернета.
У меня есть этот блок кода:

 from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
url = 'http://webapps.rrc.texas.gov/CMPL/viewPdfReportFormAction.do?method=cmplG1FormPdfamp;packetSummaryId=2928'
opts = Options()
opts.headless = True
assert opts.headless  # Operating in headless mode
browser_detail = Firefox(options=opts)
browser_detail.get(url)
print(browser_detail.page_source)


with open('temp/metadata.pdf', 'wb') as fd:
    fd.write(browser_detail.page_source)

browser_detail.close()
  

Я также пробовал запросы. Тот же ответ:

 import requests

url = 'http://webapps.rrc.texas.gov/CMPL/viewPdfReportFormAction.do?method=cmplG1FormPdfamp;packetSummaryId=2928'
r = requests.get(url, stream=True)

with open('temp/metadata.pdf', 'wb') as fd:
    for chunk in r.iter_content(2000):
        fd.write(chunk)
  

проблема в том, что если я ввожу URL-адрес в браузер, появляется PDF-файл, но когда я помещаю его в этот код, page_source — это html. Это заставляет меня думать, что здесь задействована пересылка или обработка на стороне сервера.

Как мне удалить PDF-файл? Спасибо!

Комментарии:

1. Есть ли какая-либо причина, по которой вы используете selenium по сравнению, скажем, requests с тем, что все, что вы делаете, это извлекаете PDF-файлы?

2. Привет, Карлос. Отличный вопрос. ДА. Пробовали запросы. Получил тот же ответ. Я обновил вопрос. Спасибо

Ответ №1:

Я смог извлечь PDF-файл с помощью requests .

Страница ищет правильный User-Agent поэтому я установил ее в Chrome macOS.

 h = {"Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" }

r = requests.get(url, stream=True, headers=h)
  

И это сработало.

 tmp/project/1> file metadata.pdf
metadata.pdf: PDF document, version 1.4
  

Комментарии:

1. Как вы узнали, что для этого нужен пользовательский агент?

2. Итак, viewPdfReportFormAction.do мне сказали, что это приложение Apache Struts, и, исходя из прошлого опыта, у меня было подозрение, что они будут особенно разбираться в пользовательских агентах.

Ответ №2:

 with open('temp/metadata.pdf', 'wb') as fd:
    fd.write(r.content)