Python 如何在html中获取链接的开始和结束位置
我有以下HTML格式的文本Python 如何在html中获取链接的开始和结束位置,python,html,regex,web-scraping,beautifulsoup,Python,Html,Regex,Web Scraping,Beautifulsoup,我有以下HTML格式的文本 b'<p><b>Anna Katharina Schaffelhuber</b> (* <a href="/wiki/26._Januar" title="26. Januar">26. Januar</a> <a href="/wiki/1993" title="1993">1993</a> in <a href="/wiki/Regensburg" title="Regens
b'<p><b>Anna Katharina Schaffelhuber</b> (* <a href="/wiki/26._Januar" title="26. Januar">26. Januar</a> <a href="/wiki/1993" title="1993">1993</a> in <a href="/wiki/Regensburg" title="Regensburg">Regensburg</a>) ist eine deutsche <a href="/wiki/Monoskibob" title="Monoskibob">Monoskibobfahrerin</a>. Sie gehört seit April 2017 dem <a href="/wiki/Bundeszollverwaltung#Spitzensportf%C3%B6rderung" title="Bundeszollverwaltung">Zoll-Ski-Team</a> an.<sup class="reference" id="cite_ref-1"><a href="#cite_note-1">[3]</a></sup>\n</p>\n'
我曾想过解析原始HTML并删除所有
s、
s、
s等等。这看起来很烦人,我不确定是否能用这种方法捕获所有案例
我不能绕着一个平滑的方法转。如何为包含上述信息的每个超链接提取开始
、结束
和链接
无法在BeautifulSoup中获得正确链接的可能重复
find()
和find\u all()
方法不能解决我的问题。是的,find_all()
将返回所有href的列表,但我需要此href的确切位置。我不能只使用列表中的元素,将其与文本进行匹配,然后以这种方式找到位置。它可以是任何简单的东西,比如“苹果”,可以在文本中多次出现。但是我想要一个正确的位置。我需要这个职位,因为我想把维基百科的所有内容组织成一个大型数据库。这些超链接是我稍后将使用的信息。他们将帮助我建立一个巨大的维基百科图表或网络
以防有人引用wiki转储:它们不包含链接和类别信息。此外,对我来说,处理这些垃圾堆似乎非常不舒服和不稳定,因为维护工作已在2000年代中期停止。以下内容应该可以满足您的需要。我假设id只是一个增加1的唯一值,因为您没有指定任何键的含义
从bs4导入美化组
Anna Katharina Schaffelhuber(*in)在德国。您已于2017年4月去世。\n\n'
soup=BeautifulSoup(html,'html.parser')
clean_text='Anna Katharina Schaffelhuber(*26.1993年1月在雷根斯堡)是德国的Monoskibobfahrein。请于2017年4月前往佐尔滑雪队
hrefs={href.text:href['href']表示汤中的href。如果href.get('title'),则查找所有('a'))
超链接=[]
对于枚举(hrefs.items())中的i,(href_text,href):
start=clean_text.index(href_text)
end=start+len(href_text)-1
超链接.append({'id':i,
“名称”:href\u文本,
'link':href,
“开始”:开始,
“结束”:结束})
打印(超链接)
可能重复的Don't thinkfind_all()
方法会有很大帮助,我需要确切的位置,find_all()
只返回所有HREF的列表。它们可能在任何地方。*“超链接是信息”:因此您需要的是超链接值,而不是html
页面中位置的索引。我需要信息(我在JSON中称之为link
),但最重要的是我需要它的start
和end
。我的问题有那么模棱两可吗??我很困惑。“我的问题有那么模糊吗?”:是的,但为了让你满意,如果我提前两天研究这个问题,你会为我节省很多时间。。我用你的简单解决方案代替了我复杂的解决方案。谢谢你@LuckyZackary。
hyperlinks : [{ "id : 0,
"name" : "26. Januar",
"link" : "/wiki/26._Januar",
"start" : 32,
"end" : 42 },
{ ... for all the links ... }]