Python 为什么Beautifulsoup在下载网页时会得到奇怪的源代码字符?

Python 为什么Beautifulsoup在下载网页时会得到奇怪的源代码字符?,python,html,unicode,beautifulsoup,web-crawler,Python,Html,Unicode,Beautifulsoup,Web Crawler,我是python和web爬行方面的新手。我正在一些网站上做一些爬行练习,使用beautifulsoup看起来很棒。但最近,当我用下面的代码在一个波斯网站上爬行时,我收到了一些奇怪的字符。我在其他波斯网站上也做过同样的程序,我相信问题不在于编码。这是我的代码: url = 'https://video.varzesh3.com' source_code = requests.get(url) plain_text = source_code.text soup = BeautifulSoup(pl

我是python和web爬行方面的新手。我正在一些网站上做一些爬行练习,使用beautifulsoup看起来很棒。但最近,当我用下面的代码在一个波斯网站上爬行时,我收到了一些奇怪的字符。我在其他波斯网站上也做过同样的程序,我相信问题不在于编码。这是我的代码:

url = 'https://video.varzesh3.com'
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, "html.parser")
print(soup)
这是结果的一部分:

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon"/>
<title>ÙÛدÛÙ Ùرزش س٠| خاÙÙ</title>
<meta content="sport ,varzesh ,football, soccer,livescores, live score, livescore, iran,football3,Daily soccer news , broadcast ,ÙÙتبا٠س٠, ÙتاÛج زÙد٠, Ø®ÙÛج Ùارس , perian gulf , ÙÛÚ¯ آزادگا٠,  ÙÙرÙاÙا٠آسÛا ,  ÙÙرÙاÙا٠ارÙپا ,  ÙÛÚ¯ برتر , جا٠حذÙÛ , شبک٠س٠, Ùرزش , ÙÙتبا٠برتر , اÛرا٠, جا٠جÙاÙÛ , جا٠جÙاÙÛ 2010,ÙÙتبا٠3 ," name="keywords">
<meta content="پاÙگا٠ÙÛدÛÙ ÙØ±Ø²Ø´Û Ø¨Ø±Ø§Ù Ùارس٠زباÙا٠ÙÙ ÙÛدÛÙ Ø­Ùز٠Ùرزش (ÙÙتباÙØÙاÙÙبا٠ØبسÙتبا٠Ù...) را ارائ٠ÙÛ Ú©Ùد" name="description">
<link href="/Static/css/frontend.min.css?v=9" rel="stylesheet" type="text/css"/>
<link href="https://static2.farakav.com/v3/static/css/fonts.css?version=6" rel="stylesheet" type="text/css"/>
<link href="https://static2.farakav.com/varzesh3/assets/font/varzesh3-icon/varzesh3.min.css" rel="stylesheet" type="text/css"/>
<script src="https://static2.farakav.com/football3_jscripts/jquery-1.8.0.min.js" type="text/javascript"></script>
<script src="/Static/js/jquery.cookie.js" type="text/javascript"></script>
<script src="/Static/js/mustache.js" type="text/javascript"></script>
<script type="text/javascript">
        now = new Date();
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';
        var script_address = 'https://cdn.yektanet.com/js/varzesh3.com/article.v1.min.js';
        script.src = script_address + '?v=' + now.getFullYear().toString() + '0' + now.getMonth() + '0' + now.getDate() + '0' + now.getHours();
        head.appendChild(script);
    </script>

为什么我会得到这样奇怪的字符?因为它是编码的,所以你会得到这些有线字符

>>> source_code.encoding
'ISO-8859-1'
试试这个,将编码设置为UTF-8

输出:

>>> source_code.encoding = 'UTF-8'          
>>> plain_text = source_code.text
>>> BeautifulSoup(plain_text, "html.parser")
<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon"/>
<title>ویدیو ورزش سه | خانه</title>
<meta content="sport ,varzesh ,football, soccer,livescores, live score, livescore, iran,football3,Daily soccer news , broadcast ,فوتبال سه , نتایج زنده , خلیج فارس , perian gulf , لیگ آزادگان ,  قهرمانان آسیا ,  قهرمانان اروپا ,  لیگ برتر , جام حذفی , شبکه سه , ورزش , فوتبال برتر , ایران , جام جهانی , جام جهانی 2010,فوتبال 3 ," name="keywords">
<meta content="پايگاه ویدیو ورزشی براي فارسي زبانان كه ویدیو حوزه ورزش (فوتبال،واليبال ،بسكتبال و...) را ارائه می کند" name="description">
<link href="/Static/css/frontend.min.css?v=9" rel="stylesheet" type="text/css"/>
....
...
..