/xad'出现在Python代码字符串列表中
首先,我是个初学者,刚刚接触到中级水平的Python,所以请对我解决这个问题的方式多一些耐心。我正在做一个小项目,目的是从网页上抓取信息,使用的是lxml的etree和requests(代码在这段话下面)。我想抓取一个关于当前媒体事件的网站,并决定用面向对象编程(OOP)的方式来练习(虽然我怀疑这种方式是否合适,或者我实现得是否好,欢迎大家给我反馈),这样我可以在同一个脚本中重复使用这个类来抓取其他页面。这时我发现,当我尝试从get_stories()方法中提取和打印<p>和<span>元素的文本时,'/xad'这个字符经常出现,而且位置很奇怪。我在网上找不到和我情况具体相关的信息,但我发现了一些关于编码/解码和unicode的内容,我对此不是很熟悉。也许在将原始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: What will hap\xadpen to Ju\xadlian As\xadsange if he is ex\xadtra\xaddit\xaded?', 'The tri\xadals of Ju\xadlian As\xadsange: A death sen\xadtence for democ\xadra\xadcy', 'US lawyers urge UK court to block Ju\xadlian As\xadsange ex\xadtra\xaddi\xadtion ap\xadpeal bid', 'His\xadto\xadry Il\xadlus\xadtrat\xaded: Ju\xadlian As\xadsange’s last stand?', 'Wik\xadiLeaks founder Ju\xadlian As\xadsange makes fi\xadnal bid to avoid ex\xadtra\xaddi\xadtion to US', 'Why does the US want Ju\xadlian As\xadsange ex\xadtra\xaddit\xaded?', 'Who is Ju\xadlian As\xadsange? Will he be ex\xadtra\xaddit\xaded to the US?', '‘Enough is enough’: Aus\xadtralian PM de\xadnounces US, UK le\xadgal pur\xadsuit of As\xadsange', 'Aus\xadtralian law\xadmak\xaders press US en\xadvoy for Ju\xadlian As\xadsange re\xadlease', 'What does the fu\xidture hold for Ju\xadlian As\xadsange?', 'The Im\xadpris\xadon\xadment of Ju\xadlian As\xadsange', 'Protests in Chi\xadna: The blank sheets tell a tale', 'Top me\xaddia out\xadlets de\xadmand US end pros\xade\xadcu\xadtion of Ju\xadlian As\xadsange', 'In new book, a jour\xadnal\xadist makes the case for Ju\xadlian As\xadsange']
1 个回答
十六进制代码 0xad
在你的文本中显示为 \xad
,它是一个表示“软连字符”的Unicode代码点。
这个设计是为了让格式化工具能够轻松判断文本在哪些地方可以加连字符,以便在需要换行时使用。例如,在一个特别窄的显示设备上显示你列表中的第一个字符串时:
The Take: What will happen to Ju-
lian Assange if he is extradited?
如果你想要去掉这些软连字符,可以使用类似下面的代码:
new_list = [item.replace("\xad", "") for item in old_list]