AttributeError: у объекта «Запрос» нет атрибута «декодировать» в «response = urllib.request.urlparse (req)» - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь войти на сайт https://ers.cr.usgs.gov/login через python, используя urllib в python3.Код выглядит следующим образом:

from bs4 import BeautifulSoup as BS
import urllib.parse, urllib.request, certifi, re, sys

data=urllib.request.urlopen("https://ers.cr.usgs.gov").read().decode('utf-8')
#print(data)
soup = BS(data, features="lxml")
#print(result.content.decode())
#print(soup)
csrftoken = soup.find('input', dict(name="csrf_token"))['value']
ncforminfo = soup.find('input', dict(name="__ncforminfo"))['value']

url = "https://ers.cr.usgs.gov/login"
d = {
    "username" : "name",
    "password" : "pwd",
    "csrf_token" : csrftoken,
    "__ncforminfo" : ncforminfo
}
print(d)
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

data = urllib.parse.urlencode(d).encode('utf-8')
print(data)
req = urllib.request.Request(url, data, headers=headers)
print(req)
response = urllib.request.urlparse(req)
print(response)
out = response.read().decode('utf-8')
print(out)

Но когда я пытаюсь скомпилировать его, я получаю ошибку атрибута, которую не могу устранить.

response = urllib.request.urlparse(req)
<urllib.request.Request object at 0x0000024A48196C18>
  File "C:\Users\shara\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 367, in urlparse
    url, scheme, _coerce_result = _coerce_args(url, scheme)
  File "C:\Users\shara\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 123, in _coerce_args
    return _decode_args(args) + (_encode_result,)
  File "C:\Users\shara\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 107, in _decode_args
    return tuple(x.decode(encoding, errors) if x else '' for x in args)
  File "C:\Users\shara\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 107, in <genexpr>
    return tuple(x.decode(encoding, errors) if x else '' for x in args)
AttributeError: 'Request' object has no attribute 'decode'
...