问题描述
我一直在尝试使用lxml lib从某些网站获取数据。和python3。但是在网络抓取过程之后,我得到了一些奇怪的字符,而不是土耳其字符。奇怪的字符如下所示。
- TürkiyeEngelliler SporYardım veEı(TESYEV)GenelMüdürll¼¼
- Tek deRSSınavıhakkında duyuru
- 2019-2020年AKADEMİK YILIGİDENÄİLERÄMİZİN YAPMASI GEREKENİÅ
但是它们应该像下面给出的那样。
- TürkiyeEngelliler SporYardımveEğitimVakfı(TESYEV)GenelMüdürlüğü
- Tek deRSSınavıhakkındaduyuru
- 2019-2020年AKADEMİKYILIGİDENÖĞRENCİLERİMİZİNYAPMASI GEREKENİŞLEMLER
我从不同的网站得到每个句子。我不知道如何将它们转换为土耳其文字。
这是我的代码。
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
- cssselect = 1.1.0
解决方法
答案
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())
为什么
在utf-8中,Unicode字符“ı”(U + 0131)编码为 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'¼')