使用python+selenium访问百度,并打印出页面的page_source,但是报错 UnicodeEncodeError: 'ascii' codec can't encode characters in position 487-490: ordinal not in range(128)
解决办法:报这个错是因为编码问题,可能网页或者网页标题是中文,且网页的源文件不是utf-8编码的,需要转换成utf-8编码;
print(driver.page_source.encode("utf-8"))
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将其他编码的字符串转换成unicode编码,encode的作用是将unicode编码转换成其他编码的字符串。代码中字符串的默认编码与代码文件本身的编码一致,
如:s='百度'
如果是在utf-8的文件中,该文件就是utf-8的编码。
通常,在没有指定特定的编码方式时,都是使用系统默认的编码创建的代码文件
修改之前的代码如下:
from selenium import webdriver
from time import sleep
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("-–no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")
options.add_argument("blink-settings=imagesEnabled=false")
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",chrome_options=options)
driver.get("https://www.baidu.com/")
# print(response.text)
print(driver.page_source)
sleep(10)
driver.close()
只需要在打印的时候,修改一下下面语句:
print(driver.title.encode("utf-8"))