Опитвам се да изтегля страница в 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,requests и mechanize всички отделно и не мога да накарам нито един да работи. Очевидно пропускам нещо, защото други хора в офиса имат код, който работи. 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