'/xad' появляется в списке строк в коде Python

Во-первых, я новичок, граничащий с Python на среднем уровне, поэтому, пожалуйста, будьте терпеливы с моим подходом к этой проблеме. Я работал над мини-проектом парсинга веб-страниц, используя lxml etree и запросы (код находится под этим абзацем). Я хотел очистить веб-сайт о текущем медиа-спектакле и решил использовать для практики ООП-способ (хотя я сомневаюсь, что этот способ подходит или вообще хорошо реализован, отзывы об этом были бы очень признательны), и поэтому я мог повторно использовать класс для очистки других страниц в том же скрипте. Именно тогда я заметил, что когда я пытался получить и распечатать текст из элементов <p> и <span> в методе get_stories(), '/xad' должен возникать часто и в странных местах. Я не смог найти в Интернете ничего конкретного для моей ситуации, но нашел кое-что, связанное с кодированием/декодированием и Юникодом, с которым я не слишком знаком. Может быть, существует проблема, связанная с кодированием/декодированием, когда необработанный HTML-код преобразуется в текстовый атрибут элемента? Но, как я уже сказал, это выше моего понимания, поэтому конструктивные отзывы о моем коде и моей проблеме будут очень признательны. Спасибо!

from lxml import etree
import requests

class Page:
    
    headers = {"User-Agent" : "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0"}

    def __init__(self, url):
        try:
            self.html = requests.get(url, headers=Page.headers).text 
            self.tree = etree.HTML(self.html)
            self.articles = dict()
            self.var = None
        except:
            raise SystemExit("Invalid url")

    def get_stories(self):
        headers = [span.text for span in self.tree.xpath('//a[@class = "u-clickable-card__link"]//span')]
        snippets = [span.text for span in self.tree.xpath('//div[@class = "gc__excerpt"]//p')]
        print(headers)
       

url = "https://www.aljazeera.com/tag/julian-assange/"

page1 = Page(url)
page1.get_stories()

Вот результат:

['The Take: Что случится\xadpen с Джу\xadlian As\xadsange, если он ex\xadtra\xaddit\xaded?', 'Три\xadals Джу\xadlian As\xadsange: Смерть sen\xadtence для democ \xadra\xadcy', 'Американские юристы призывают британский суд заблокировать предложение Ju\xadlian As\xadsange ex\xadtra\xaddi\xadtion ap\xadpeal', 'Его\xadto\xadry Il\xadlus\xadtrat\xaded: Ju\xadlian Последний бой Ас\xadsange?', 'Основатель Wik\xadiLeaks Джу\xadlian As\xadsange делает фи\xadnal предложение избежать ex\xadtra\xaddi\xadtion США', 'Почему США хотят, чтобы Ju\xadlian As\xadsange ex \xadtra\xaddit\xaded?', 'Кто такой Джу\xadlian As\xadsange? Будет ли он экс\xadtra\xaddit\xaded в США?', ''Хватит': Премьер-министр Австралии\xadtralian объявляет о\xadtralian США, Великобритании le\xadgal Pur\xadsuit As\xadsange', 'Австралийский\xadtralian закон \xadmak\xaders press US en\xadvoy for Ju\xadlian As\xadsange re\xadlease', 'Что означает fu\xadture для Ju\xadlian As\xadsange?', 'Im\xadpris\xadon\xadment Ju \xadlian As\xadsange', 'Протесты в Чи\xadna: пустые листы рассказывают историю', 'Top me\xaddia out\xadlets de\xadmand США заканчивают плюсы\xade\xadcu\xadtion of Ju\xadlian As\xadsange' , 'В новой книге журналист\xadnal\xadist приводит доводы в пользу Ju\xadlian As\xadsange']

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Шестнадцатеричный код 0xad, отображаемый в тексте как \xad, представляет собой кодовую точку Юникода для мягкого дефиса.

Это сделано для того, чтобы форматировщики могли легко определить, где можно поставить дефисы, если текст необходимо разделить. Например, отображение первой строки в списке на особенно тонком устройстве отображения:

The Take: What will happen to Ju-
lian Assange if he is extradited?

Если вы хотите избавиться от них, вы можете использовать что-то вроде:

new_list = [item.replace("\xad", "") for item in old_list]

Спасибо paxdiablo, я видел сообщения о мягких дефисах, но не ожидал их здесь. Так является ли «/xad» в текущем простом тексте строки, когда он закодирован UTF-8, или он должен был отображаться в виде мягкого дефиса?

intmainvoid 15.03.2024 07:48

@intmainvoid, я даже не знаю. Я подозреваю, что они будут в исходном тексте, потому что компьютеру будет сложно или подвержено ошибкам разобраться в этом. Но тогда вы получите что-то вроде Wik-iLeaks, а это не то место, где я бы поставил мягкий дефис. Имейте в виду, что мягкие дефисы на самом деле предназначены для опционального отображения как настоящие дефисы (т. е. не все из них станут дефисами). Идея состоит в том, что вы просто переполняете строку, а затем возвращаетесь к последнему пробелу или мягкому дефису. Если это был мягкий дефис, вы ставите настоящий дефис. В любом случае вы начинаете рендеринг следующей строки.

paxdiablo 15.03.2024 08:59

Другие вопросы по теме