如何使用python获取网站的页面语言?

时间:2017-11-09 10:24:00

标签: python python-2.7 python-3.x

我对lxml,html很新 我想知道它使用的语言是什么? (例如波斯语 - 英语 - 阿拉伯语......)
我可以在网站上使用meta标签吗?例如---> (Meta标签,http-equiv)。
我该如何阅读该值?

这些标签是否有效,是否经常在网站上使用?

3 个答案:

答案 0 :(得分:0)

HTTP标头可能如下所示

  

内容语言:es
  内容类型:text / html; charset = UTF-8

但它表示该文件适用于西班牙语发言者(但并不意味着该文件是用西班牙语撰写的;例如,它可以用英语编写,作为西班牙语语言课程的一部分扬声器)。

或者,引用规范:

  

Content-Language entity-header字段描述了所包含实体的目标受众的自然语言。请注意,这可能与entity-body中使用的所有语言不同。

如果网站的作者选择使用正确的标记,则应该在根级别。

<html lang="es">

关键字是&#34;选择&#34;。作者没有义务这样做。

检测网站语言的最佳方法是简单地抓取内容并在其上引入机器学习算法。

最简单的是NGrams,它仍然具有很高的准确性(假设有足够的文字可以从中提取信息)。

可在https://en.wikipedia.org/wiki/N-gram

找到更多信息

答案 1 :(得分:0)

读取HTML lang属性

HTML文档应该在根级别具有lang属性,如下所示:

<html lang="sv">

(有关更多信息,请参见W3C "Declaring language in HTML"。)

如果您知道可以依靠正确设置的lang属性,请使用诸如lxmlhtml5lib之类的HTML解析器来提取该属性。

使用lxml的示例:

import lxml.html

with open("foo.html", "rb") as f:
    root = lxml.html.parse(f).getroot()
    print(root.attrib.get("lang"))

使用html5lib的示例:

import html5lib

with open("foo.html", "rb") as f:
    document = html5lib.parse(f)
    print(document.attrib.get("lang"))

从内容中识别语言

但是,在许多网页中,lang属性未设置或未正确设置为某些默认值。在这种情况下,您应该使用langdetect之类的软件包来尝试通过机器学习技术来识别(阅读:猜测)内容语言。

使用BeautifulSoup(提取正文)和langdetect(用于语言检测)的示例:

from bs4 import BeautifulSoup
from langdetect import detect

with open("foo.html", "rb") as f:
    soup = BeautifulSoup(f)
    [s.decompose() for s in soup("script")]  # remove <script> elements
    body_text = soup.body.get_text()
    print(detect(body_text))

答案 2 :(得分:0)

如果 lang="es" 元未在 html 中声明,您可以使用 (langdetect, requests, html2text) 具有以下功能的模块将您的网站 html 转换为文本,然后 autodetect 语言

让我们先安装模块:

pip install langdetect && pip install requests && pip install html2text

from langdetect import detect
import requests
import html2text

def Detect_Lang(url):
    response = requests.get(url) # Requests to get url html
    rep = response.text # html 
    txt=html2text.html2text(rep) # converting html to text
    response.close() # Close your Request
    return detect(txt) # Return language value Exp: (en, ar, pl, es) ...

linklang=Detect_Lang("https://stackoverflow.com/questions/47199348/how-can-i-get-page-language-of-web-site-with-python") # Run Your Function

print(linklang) # Print Language