Еще одна проблема с кодировкой Python - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь этот код:

def process_request(url):
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
    return urlopen(req).read()

def get_links():
    url = c.first_url
    html = process_request(url)
    details_pages = []
    soup = BeautifulSoup(html, 'html.parser')
    links = soup.select(".pagelist-bar  a")
    print(links)
    for l in links:
        print(l)
        if l.has_attr('href'):
            href_ = l['href']
            detail = c.base_url + href_
            logging.info("Page with List of persons: %s", detail)
            details_pages.append(detail)
    return details_pages

def person_urls():
    pages = get_links()
    for l in pages:
        print("link: %s", l)
        doc = process_request(l)
        soup = BeautifulSoup(doc, 'html.parser')
        fichas = soup.select(".ficha")
        print(fichas)

В этом URL: http://www.guardiacivil.es/es/colaboracion/buscados/index.html

И независимо от того, какую стратегию я использую, эта строка:

<a href="/es/colaboracion/buscados/index.html?buscar=si&category=abcd&notshown=">

всегда преобразуется в:

<a href="/es/colaboracion/buscados/index.html?buscar=si&category=abcd¬shown=">

¬shown = становится ¬shown =

Я попробовал некоторые из предложений на ЭТИ ПОЗИЦИИ без результатов пока.

Кроме того, всегда с ошибкой:

  self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1250, in _send_request
  self.putrequest(method, url, **skips)
  File "/usr/lib/python3.6/http/client.py", line 1117, in putrequest
  self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode character '\xac' in position 69: ordinal not in range(128)

Кто-нибудь может мне помочь, пожалуйста?

1 Ответ

1 голос
/ 16 июня 2019

Возможно, вам следует попробовать заменить html.parser на html в вызове BeautifulSoup:

soup = BeautifulSoup(html, 'html')
links = soup.select(".pagelist-bar  a")
#Ouptut
for x in links:
    print(x.get('href'))

Вывод:

/es/colaboracion/buscados/index.html?pagina=1&buscar=si&category=&notshown=
/es/colaboracion/buscados/index.html?pagina=2&buscar=si&category=&notshown=
/es/colaboracion/buscados/index.html?pagina=3&buscar=si&category=&notshown=
/es/colaboracion/buscados/index.html?pagina=4&buscar=si&category=&notshown=
...