【问题标题】:BeautifulSoup: Indian language changing to unicode when printing out onto terminal using findAll. functionBeautifulSoup:使用 findAll 打印到终端时,印度语言变为 unicode。功能
【发布时间】:2017-07-11 06:56:41
【问题描述】:

在使用来自网站的 BeautifulSoup 解析响应并打印到终端后,我想以母语废弃流行的印度(使用 Scrapy)网站,以创建印度语言(马拉雅拉姆语)中最常用单词的字典使用,

soup = BeautifulSoup(response.body, "lxml")
print(soup)

我在终端上得到这个输出,

...

<div class="articleBody common_text" id="content2044131">
<div class="col-md-12 col-sm-12 col-xs-12">
<p>വൈറസുകള്‍ എന്നൊരു സാധനമേ ഇല്ല, അത് ഭൂലോക തട്ടിപ്പാണ്. കേരളത്തിലെ പ്രശസ്തനെന്ന് അറിയപ്പെടുന്ന വൈദ്യരുടെ പ്രസ്താവന ആണിത്. മാത്രമല്ല വൈദ്യര്‍ കേരളത്തിലെ ഏറ്റവും വലിയ പീഡിയാട്രീഷനായ ഏതോ ഡോ. പിഷാരടിയോടു ചോദിച്ച് <a href="https://www.facebook.com/181790438911986/videos/313673832390312/"><strong>ഇക്കാര്യം ഉറപ്പുവരുത്തുക കൂടി ചെയ്തു</strong></a>. വൈദ്യരെയും പിഷാരടിയെയും പറഞ്ഞിട്ട് കാര്യമില്ല, കാരണം വൈറസുകളെ കാണാന്‍ സാധിക്കില്ലല്ലോ. പിന്നെ അവ ഉണ്ടെന്ന് എങ്ങനെ  വിശ്വസിക്കും?  </p>
<p>ഈ ലേഖനം എഴുതാന്‍ കാരണം വൈദ്യരും പിഷാരടിയും മാത്രമല്ല, ഈ അടുത്ത് ഒരാള്‍ ഇതിലും ഞെട്ടിക്കുന്ന ഒരു വാദം പറഞ്ഞു. ഇലക്ട്രോണ്‍, പ്രോട്ടോണ്‍ തുടങ്ങിയ സംഗതികളെല്ലാം ശാസ്ത്രത്തിന്റെ ഭാവന ആണത്രെ. ഇലക്ട്രോണ്‍ വിരുദ്ധരും വൈറസ് വിരുദ്ധരും ചോദിക്കുന്നത് 'കണ്ടിട്ടുണ്ടോ' എന്നാണ്. ഉത്തരം ഇല്ല എന്നുതന്നെ. പക്ഷെ കണ്ടാല്‍ മാത്രമേ വിശ്വസിക്കാന്‍ കഴിയുകയുള്ളോ? കാണാതെ എങ്ങനെ വിശ്വസിക്കും? ഇതാണ് ഈ ലേഖനത്തില്‍ പറയാന്‍ ഉദ്ദേശിക്കുന്നത്. </p>

...

很公平,但是在解析了我想要使用的部分之后

    div = soup.findAll("div", {"class": "articleBody common_text"})
    print(div)

我在终端上得到这个,

<div class="articleBody common_text" id="content2044131">\n<div class="col-md-12 col-sm-12 col-xs-12">\n<p>\u0d35\u0d48\u0d31\u0d38\u0d41\u0d15\u0d33\u0d4d\u200d \u0d0e\u0d28\u0d4d\u0d28\u0d4a\u0d30\u0d41 \u0d38\u0d3e\u0d27\u0d28\u0d2e\u0d47 \u0d07\u0d32\u0d4d\u0d32, \u0d05\u0d24\u0d4d \u0d2d\u0d42\u0d32\u0d4b\u0d15 \u0d24\u0d1f\u0d4d\u0d1f\u0d3f\u0d2a\u0d4d\u0d2a\u0d3e\u0d23\u0d4d. \u0d15\u0d47\u0d30\u0d33\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d46 \u0d2a\u0d4d\u0d30\u0d36\u0d38\u0d4d\u0d24\u0d28\u0d46\u0d28\u0d4d\u0d28\u0d4d 
\u0d05\u0d31\u0d3f\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28 \u0d35\u0d48\u0d26\u0d4d\u0d2f\u0d30\u0d41\u0d1f\u0d46 \u0d2a\u0d4d\u0d30\u0d38\u0d4d\u0d24\u0d3e\u0d35\u0d28 \u0d06\u0d23\u0d3f\u0d24\u0d4d. \u0d2e\u0d3e\u0d24\u0d4d\u0d30\u0d2e\u0d32\u0d4d\u0d32 \u0d35\u0d48\u0d26\u0d4d\u0d2f\u0d30\u0d4d\u200d \u0d15\u0d47\u0d30\u0d33\u0d24\u0d4d\u0d24

为什么它突然变成了原始的 unicode?有没有合适的方法来解析它。只是为了获得信息,我打算在之后做的是从文章中删除单个单词并将其存储到一个 json 文件中,其中包含相应的单词和它发生的次数,有点像这样

{
  "സാധനമേ": 67,
  "കേരളത്തിലെ": 69,
  "ഒരാള്‍": 50,
  .
  .
  .
}

【问题讨论】:

  • 您可以使用 div.text 访问 div 的文本并根据 ' ' 进行拆分以获取单词列表,然后可以使用该列表创建计数 json
  • 是的,但是要获得那个 div 我必须使用 findAll,当我这样做时它会被转换为 unicode。

标签: python unicode terminal beautifulsoup


【解决方案1】:

这与编码有关。通过在 bs4 对象上使用utf-8 编码,我能够获得所需的输出。

变化,

div = soup.findAll("div", {"class": "articleBody common_text"})
print(div)

到,

div = soup.select(".articleBody")[0]
print(div.text.encode('utf-8'))

解决了这个问题。

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2013-06-27
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多