beautifulsoup抓网问题

时间:2018-10-27 21:46:24

标签: python web-scraping beautifulsoup

我正尝试用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"})

我仍然收到上面的错误。 但是当我尝试这个:

代码:

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 :(得分:2)

您的代码在错误的位置应用了decode(),因此是例外情况:

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

答案 1 :(得分:0)

对于问题的前半部分,仅提供一些建议-您应该使用“ unicode三明治”方法,这样可以避免很多麻烦:

  1. 设置您的输入unicode(BeautifulSoup会为您完成此操作)
  2. 以Unicode处理
    • 如果您想print(),请使用print(repr(string))
  3. 根据需要对输出进行编码

您的第一个问题UnicodeEncodeError-是在字符串上使用print语句的结果吗?如果是这样,则打印如下:

print(repr(string))

为避免编码问题,并将数据以unicode的形式保存到最后。

即不要这样做:page_soup = soup(page_html, "html.parser").encode("utf-8")只是为了打印出结果。