Beautifulsoup webscraping проблемы - PullRequest
       5

Beautifulsoup webscraping проблемы

0 голосов
/ 28 октября 2018

Я пытаюсь разобрать youtube с красивым супом, но без удачи. Я проанализировал многие веб-сайты, которые все прошли отлично, но этот не работает и выдает мне эту ошибку:

UnicodeEncodeError: 'charmap' codec can't encode character '\u2117' in position 135588: character maps to <undefined>

Я расшифровал его следующим образом:

page_soup = soup(page_html.decode("utf-8"), "html.parser")


x = page_soup.find('div',{'id':"dismissable"})

Я все еще получаю ошибку выше. но когда я попробую это:

Код:

page_soup = soup(page_html, "html.parser").encode("utf-8")

с кодировкой я могу распечатать мою веб-страницу, но при поиске в ней следующим образом:

search_list = page_soup.find_all('div',{'class':"style-scope ytd-video-renderer"})

print(len(search_list))

Я получаю следующую ошибку:

TypeError: slice indices must be integers or None or have an __index__ method

Любой совет будет приветствоваться.

большое спасибо.

дополнительно мой код:

import urllib3
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen

import requests

http = urllib3.PoolManager()
set_Link = set([''])

url = 'https://www.youtube.com/results?search_query=the+lumineers+sleep+on+the+floor'

r = http.request('get',url)

page_html = r.data #html data opslaan in variabele

page_soup = soup(page_html, "html.parser").encode("utf-8")


print(page_soup)

search_list = page_soup.find_all('div',{'class':"style-scope ytd-video-renderer"})

print(len(search_list))

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Просто несколько советов для первой половины вашего вопроса - вы должны использовать подход сэндвичей «Юникод» и избавить себя от многих разочарований:

  1. Сделайте ввод Unicode (BeautifulSoup сделает это за вас)
  2. процесс в юникоде
    • , если вы хотите print() что-то, используйте print(repr(string))
  3. Кодируйте ваш вывод как требуется

Ваша первая проблема, UnicodeEncodeError - это было результатом использования оператора print для строки? Если это так, напечатайте так:

print(repr(string))

чтобы избежать проблем с кодировкой и держать ваши данные в юникоде до конца.

т.е. не делайте этого: page_soup = soup(page_html, "html.parser").encode("utf-8") просто чтобы распечатать результат.

0 голосов
/ 28 октября 2018

Ваш код применяется decode() не в том месте, отсюда исключение:

page_soup = soup(page_html.decode("utf-8"), "html.parser") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...