Пытаюсь загрузить страницу на Python с urllib2 и запросами, но перенаправляется

Я пытаюсь просто загрузить страницу с помощью Python.

http://webapps.rrc.state.tx.us/CMPL/viewPdfReportFormAction.do?method=cmplP4FormPdf&packetSummaryId=97770

Если я получаю код ответа от сервера, я получаю 200

import urllib2

url = 'http://webapps.rrc.state.tx.us/CMPL/viewPdfReportFormAction.do?method=cmplP4FormPdf&packetSummaryId=97770'
file_pointer = urllib2.urlopen(url)
print file_pointer.getcode()

Однако, если я получаю URL-адрес, я получаю страницу перенаправления

file_pointer.geturl()

Я пробовал urllib, urllib2, запросы и механизировать все по отдельности и не могу заставить их работать. Мне явно чего-то не хватает, потому что у других людей в офисе есть работающий код. SOS

Также здесь есть дополнительная информация, предоставленная по запросам.

import requests

url = 'http://webapps.rrc.state.tx.us/CMPL/viewPdfReportFormAction.do?method=cmplP4FormPdf&packetSummaryId=97770'
proxy = { 'https': '200.35.152.93:1212'}
response = requests.get(url, proxies=proxy) 

send: 'GET /CMPL/viewPdfReportFormAction.do?method=cmplP4FormPdf&packetSummaryId=97770 HTTP/1.1\r\nHost: webapps.rrc.state.tx.us\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.7.0 CPython/2.7.10 Windows/7\r\n\r\n'
reply: 'HTTP/1.1 302 Found\r\n'
header: Date: Wed, 26 Aug 2015 19:33:12 GMT
header: Server: Apache/2.2.15 (Red Hat)
header: Location: http://www.rrc.state.tx.us/site-policies/railroad-commission-of-texas-site-policies/?method=cmplP4FormPdf&packetSummaryId=97770
header: Content-Length: 405
header: Connection: close
header: Content-Type: text/html; charset=iso-8859-1
send: 'GET /site-policies/railroad-commission-of-texas-site-policies/?method=cmplP4FormPdf&packetSummaryId=97770 HTTP/1.1\r\nHost: www.rrc.state.tx.us\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.7.0 CPython/2.7.10 Windows/7\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Cache-Control: private
header: Content-Type: text/html; charset=utf-8
header: server: one
header: Date: Wed, 26 Aug 2015 19:33:11 GMT
header: Content-Length: 41216

person bluerubez    schedule 26.08.2015    source источник


Ответы (2)


Проблема в том, что этот конкретный сайт ищет заголовок вашего пользовательского агента, и, поскольку вы являетесь клиентом Python, он не позволяет вам получить PDF-файл и перенаправить вас.

Поэтому вам нужно замаскировать свой пользовательский агент.

Взгляните на следующий пример:

url = 'http://webapps.rrc.state.tx.us/CMPL/viewPdfReportFormAction.do?method=cmplP4FormPdf&packetSummaryId=97770'

req = urllib2.Request(url)
req.add_unredirected_header('User-Agent', 'Mozilla/5.0')

file_pointer = urllib2.urlopen(req)
print file_pointer.getcode()
print file_pointer.geturl();
person uri2x    schedule 26.08.2015
comment
Как я могу использовать с этим прокси? - person bluerubez; 27.08.2015
comment
Добавьте urllib2.install_opener (urllib2.build_opener (urllib2.ProxyHandler ({'http': '200.35.152.93:1212'}))) - person uri2x; 27.08.2015
comment
Спасибо, Ури. Мне действительно пришлось сделать то же самое, но в запросах, чтобы заставить его работать из-за какой-то проблемы с https - person bluerubez; 27.08.2015

Итак, все, что нужно сделать с модулем запросов, - это отключить перенаправление. Вот мой рабочий код, который также использует прокси-сервер.

import requests

url = 'http://webapps.rrc.state.tx.us/CMPL/viewPdfReportFormAction.do?method=cmplP4FormPdf&packetSummaryId=97770'
proxy = { 'https': '200.35.152.93:1212'}
r = requests.get(url, proxies=proxy,allow_redirects=False) 
print r.url
person bluerubez    schedule 26.08.2015