在python中使用lxml进行web抓取之后,我得到了奇怪的字符,而不是土耳其字符

2024-06-16 14:09:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用lxml库从一些网站获取数据。和Python3。但在网页抓取过程中,我得到了一些奇怪的字符,而不是土耳其字符。奇怪的字符如下所示

  • Türkiye Engeliler Spor Yardım ve Eı(TESYEV)Genel müdürlü
  • 泰克·德尔斯杜尤鲁(Tek ders sınavıhakkında duyuru)
  • 2019年至2020年,伊犁将在亚普马斯·格雷肯的基础上继续发展

但它们本应如下所示

  • Türkiye Engeliler Spor Yardım ve Eğitim Vakfı(TESYEV)Genel müdürlğ
  • 德尔斯纳夫哈克兰达杜尤鲁酒店
  • 2019年至2020年,伊犁将成为一个新的经济体

我从不同的网站上得到了每一句话。我不知道怎样才能把它们转换成土耳其语文本

这是我的密码

import cssselect
import requests
from lxml import html

def parse_html(url, selector):
    page = requests.get(url)

    tree = html.fromstring(page.content)
    titles = tree.cssselect(selector)

    for title in titles:
        print(title.text_content().strip())

版本

  • python=3.7.4
  • lxml=4.5.2
  • 请求数=2.24.0
  • CSS选择=1.1.0

Tags: import网站htmlve字符requestslxmlrl
1条回答
网友
1楼 · 发布于 2024-06-16 14:09:06

答案

import cssselect
import requests
from lxml import html

def parse_html(url, selector):
    page = requests.get(url)

    content = str(page.content, 'utf-8')

    tree = html.fromstring(content)
    titles = tree.cssselect(selector)

    for title in titles:
        print(title.text_content().strip())

为什么

unicode字符“ı”(U+0131)在UTF-8中编码为0xC4B1。2字节

> echo -e '\u0131' | xxd -u
00000000: C4B1 0A                                  ...

page.content返回一个Binary Response Content

0xC4B1变为0xC4(U+00C4'Ä')和0xB1(U+00B1'±')

U+00FC'ü'(UTF-8编码:0xC3BC)变成0xC3(U+00C3'Ã')和0xBC(U+00BC'¼')

相关问题 更多 >