我在探索BeautifulSoup时引用了Ryan Mitchell的";使用Python进行Web刮擦";。
有一些示例代码解释了从维基百科中抓取文章链接的过程。为了简洁起见,我省略了导入代码。代码为:
html = urlopen("http://en.wikipedia.org")
bsObj = BeautifulSoup(html)
for link in bsObj.findAll("a", href = re.compile("^(/wiki/)((?!:).)*$")):
if 'href' in link.attrs:
print(link.attrs['href'])
我很困惑为什么代码需要包含if语句:
if 'href' in link.attrs:
findAll函数不是返回所有具有指定href的锚标记吗?因此,假设所有的"链接"都将"href"作为属性,这不是可以的吗?提前谢谢!
你的思路是有效的,但试着尝试添加一个else语句并打印链接。在else语句中的attrs,看看是否有任何链接没有href属性,这不应该是真的,但你永远不会知道,祝你好运。
因为从该行返回
for link in bsObj.findAll("a", href = re.compile("^(/wiki/)((?!:).)*$")):
不仅是"href",还有任何其他属性
因此,如果链接.attrs中的'href'为确保您只获得attribut'href'