从这样的 Html 输入开始:
<p>
<a href="http://www.foo.com">this if foo</a>
<a href="http://www.bar.com">this if bar</a>
</p>
使用 BeautifulSoup,我想更改此 Html:
<p>
<a href="http://www.foo.com">this if foo[1]</a>
<a href="http://www.bar.com">this if bar[2]</a>
</p>
将解析后的链接保存在字典中,结果如下:
links_dict = {"1":"http://www.foo.com","2":"http://www.bar.com"}
是否可以使用 BeautifulSoup 来做到这一点?任何有效的替代方案?
这在 Beautiful Soup 中应该很容易。
类似于:
from BeautifulSoup import BeautifulSoup
from BeautifulSoup import Tag
count = 1
links_dict = {}
soup = BeautifulSoup(text)
for link_tag in soup.findAll('a'):
if link_tag['href'] and len(link_tag['href']) > 0:
links_dict[count] = link_tag['href']
newTag = Tag(soup, "a", link_tag.attrs)
newTag.insert(0, ''.join([''.join(link_tag.contents), "[%s]" % str(count)]))
link_tag.replaceWith(newTag)
count += 1
在您的文本上执行此操作的结果:
>>> soup
<p>
<a href="http://www.foo.com">this if foo[1]</a>
<a href="http://www.bar.com">this if bar[2]</a>
</p>
>>> links_dict
{1: u'http://www.foo.com', 2: u'http://www.bar.com'}
我可以预见这个解决方案的唯一问题是你的链接文本是否包含子标签;那么你不能做 ''.join(link_tag.contents)
;相反,您需要导航到最右边的文本元素。
我是一名优秀的程序员,十分优秀!