如何使用Python的BeautifulSoup查找和修改Html链接
从这样的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可以做到吗?有没有其他有效的替代方法?
1 个回答
4
在使用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)
了;相反,你需要找到最右边的文本元素。