使用BeautifulSoup从网页中提取绝对链接
我正在使用BeautifulSoup读取网页内容。我想要做的是抓取所有以http://
开头的<a href>
链接。我知道在BeautifulSoup中可以通过属性来搜索。我想我只是遇到了语法问题。我想它应该是这样的:
page = urllib2.urlopen("http://www.linkpages.com")
soup = BeautifulSoup(page)
for link in soup.findAll('a'):
if link['href'].startswith('http://'):
print links
但是这样返回的是:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Python26\lib\BeautifulSoup.py", line 598, in __getitem__
return self._getAttrMap()[key]
KeyError: 'href'
有什么想法吗?提前谢谢你。
编辑 这不是针对任何特定网站。这个脚本是从用户那里获取网址的。所以内部链接的目标会是个问题,这也是我只想要页面中的<'a'>
的原因。如果我把它指向www.reddit.com
,它会解析出开始的链接,然后得到这个:
<a href="http://www.reddit.com/top/">top</a>
<a href="http://www.reddit.com/saved/">saved</a>
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Python26\lib\BeautifulSoup.py", line 598, in __getitem__
return self._getAttrMap()[key]
KeyError: 'href'
4 个回答
0
请告诉我们你在解析什么内容——正如Andrew所提到的,似乎有一些链接标签(anchor tags)没有对应的链接地址(href)。
如果你真的想忽略这些没有链接的标签,可以把相关代码放在一个“尝试”块里,然后用下面的方式来处理:
except KeyError:
pass
不过,这样做也会有一些问题。
1
你有没有一些 <a>
标签没有 href
属性呢?可能是内部链接的目标吧?
6
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种时候,我们可以去一些技术论坛,比如StackOverflow,去寻找解决方案或者向其他人提问。
在这些论坛上,很多人会分享他们的经验和解决方法,帮助其他人解决类似的问题。你可以看到很多不同的回答,有的可能很简单,有的可能比较复杂,但总的来说,大家都是希望能够互相帮助。
如果你在论坛上提问,记得描述清楚你遇到的问题,提供一些相关的代码和错误信息,这样其他人才能更好地理解你的情况,给出有效的建议。
总之,技术论坛是一个很好的资源,可以帮助你解决编程中的各种问题,记得多去看看哦!
from BeautifulSoup import BeautifulSoup
import re
import urllib2
page = urllib2.urlopen("http://www.linkpages.com")
soup = BeautifulSoup(page)
for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
print link