【问题标题】:Python syntax can not recognise Azerbaijani alphabet in a stringPython语法无法识别字符串中的阿塞拜疆字母
【发布时间】:2020-06-30 15:00:39
【问题描述】:

我正在尝试使用创建链接的方法来抓取网页,但是当链接中包含阿塞拜疆字母时会出现问题。 Python 拆分链接从阿塞拜疆字母表开始。

一个例子:

链接应该像 => http://marja.az/search?q=ali+əli

但它会像 => 一样打印它 http://marja.az/search?q=ali+əli

代码:

import requests
from bs4 import BeautifulSoup as bs
import locale


URL = 'http://marja.az/search?q='

# if there is a prabel inside of keyword merge with + sign
KEYWORDS = [
           'Vali+Vəli'
           ]

for key in KEYWORDS:
    search_url = URL + key
    print(search_url)
    r = requests.get(search_url)
    soup = bs(r.content, "lxml")
    for data in soup.find_all("div", {"class": "searchNews"}):
        for a in data.find_all("a"):
            href = a.get("href")
            link = "http://marja.az/" + href
            print(link)
            r1 = requests.get(link)
            soup1 = bs(r1.content, "lxml")
            # HEADER of NEWS
            header = soup1.find("h1", attrs={"class": "title"}).text
            print(header)
            # CONTENT of NEWS
            paragraph = soup1.find("div", attrs={"class": "text"}).findAll('p', text=True, recursive=False)
            for p in paragraph:
                print(p.text)
            # DATE of NEWS PUBLISHED
            date = soup1.find('div', {'style': 'color: #af0000; margin:10px 0px 10px 0px; font-size:12px; ''font'
                                               '-weight:bold; text-align:left;'}).text
            date = date.split(",")[0].split(" ")
            date = date[0] + "-" + date[1] + "-" + date[2]
            print(date)


【问题讨论】:

    标签: python-3.x unicode beautifulsoup


    【解决方案1】:

    脚本的输出是 100% 纯文本 - 在 Python 语言中执行“打印” 后没有任何内容可以将打印的 URL 转换为工作链接。

    它是您用来查看程序输出的工具 - 无论您是在终端仿真器、IDE 还是 Jupyter 笔记本中运行程序,该程序都会尝试转换以 @ 开头的字符串987654323@ 进入工作链接并且在这个字符上失败了。

    因此,虽然这与 Python 行为无关,但您可以尝试一件事:在打印 URL 之前转义该部分 - 也许有问题的程序会识别整个 URL。

    为此,请执行以下操作:

    
    from urllib.parse import quote
    
    ...
    # and later on the code replace this line:
                 # link = "http://marja.az/" + href
                 # for
                 link = "http://marja.az/" + quote(href)
    

    如果这不起作用,您将不得不求助于编写自己的输出界面,无论是网页还是 Tkinter 窗口,都可以正确使用您的链接 - 当然,您可以针对无论您使用什么程序来运行您的脚本 - 这是该程序的错误,即来自不同字母表的字符未被视为 URL 的一部分。

    【讨论】:

    • 问题发生在search_url = URL + key print(search_url) 的行中,search_url 没有给出所打印的期望结果
    • 所以,请key。还是和我写的一样。
    • 它像marja.az/search?q=ali%2B%C9%99li一样打印search_url,但它应该像[marja.az/search?q=ali+əli]
    • 是的 - 它被引用了,但它现在 有效 。如果它打印出你想要的 unicode 字符 你正在运行 Pthn 的程序 将不会正确格式化 URL 并且不会工作。您有 3 个选项:将用于运行 Python 的程序更改为可以运行的程序,以漂亮的方式 查看 包含所有字符的 URL(您已经拥有的),或者让它工作,并且它必须使用转义码并且是“丑陋的”。就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2018-08-03
    • 2020-12-18
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多