Python 美丽的群拉屎问题

Python 美丽的群拉屎问题,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我试图用beautifulsoup解析youtube,但运气不好。 我已经分析了许多网站,它们都很完美,但这个网站不起作用,给了我这个错误: UnicodeEncodeError: 'charmap' codec can't encode character '\u2117' in position 135588: character maps to <undefined> 我仍然得到上面的错误。 但当我尝试这个: 代码: 通过对其进行编码,我可以打印出我的网页,但当我按以下方式搜

我试图用beautifulsoup解析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"})
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))

您的代码在错误的位置应用了
decode()
,因此出现了异常:

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

您的代码在错误的位置应用了
decode()
,因此出现了异常:

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

对于问题的前半部分,请给出一些建议-您应该使用“unicode三明治”方法,这样可以避免很多挫折:

  • 将您的输入设置为unicode(BeautifulSoup会为您执行此操作)
  • unicode中的进程
    • 如果您想
      print()
      something,请使用
      print(repr(string))
  • 根据需要对输出进行编码
  • 您的第一个问题,UnicodeEncodeError——是对字符串使用print语句的结果吗?如果是,请按如下方式打印:

    print(repr(string))
    
    以避免编码问题,并将数据保存在unicode中直到结束


    也就是说,不要这样做:
    page\u soup=soup(page\u html,“html.parser”).encode(“utf-8”)
    只是为了打印出结果。

    只是对你问题的前半部分的一些建议-你应该使用“unicode三明治”方法,省去很多挫折:

  • 将您的输入设置为unicode(BeautifulSoup会为您执行此操作)
  • unicode中的进程
    • 如果您想
      print()
      something,请使用
      print(repr(string))
  • 根据需要对输出进行编码
  • 您的第一个问题,UnicodeEncodeError——是对字符串使用print语句的结果吗?如果是,请按如下方式打印:

    print(repr(string))
    
    以避免编码问题,并将数据保存在unicode中直到结束


    也就是说,不要这样做:
    page\u soup=soup(page\u html,“html.parser”)。编码(“utf-8”)
    只是为了打印结果。

    谢谢您的回答。我完全按照你说的做了,但仍然得到了相同的错误:UnicodeEncodeError:“charmap”编解码器无法对149996位置的字符“\u2117”进行编码:字符映射到,这意味着页面不在
    utf-8
    (可能是一些旧的MS Windows编码?)。看看这篇关于检测编码的文章。我在其中挖掘了一些细节,但在我看来,我想要收集的数据不可用,因为它背后有javascript=/我必须使用youtube API谢谢你的回答。我完全按照你说的做了,但仍然得到了相同的错误:UnicodeEncodeError:“charmap”编解码器无法对149996位置的字符“\u2117”进行编码:字符映射到,这意味着页面不在
    utf-8
    (可能是一些旧的MS Windows编码?)。看看这篇关于检测编码的文章。我在其中挖掘了一些细节,但在我看来,我想要收集的数据是不可用的,因为它背后有javascript=/我必须使用youtube API谢谢你,先生!我必须承认,我不知道“unicode三明治”的伟大建议!谢谢你,先生!我必须承认,我不知道“unicode三明治”的伟大建议!