BeautifulSoup'href'列表给出了模糊的TypeErrors?

时间:2013-03-18 09:18:30

标签: python unicode types beautifulsoup

我正在使用beautifulsoup从网页上抓取网址。一切都很顺利,直到一些网址中包含非ascii字符。

requests.get('http://www.reddit.com')
soup = BeautifulSoup(req.content)

urls = [i.get('href') for i in soup.findAll('a') if
        'keyword' in str(i.get('href'))]

列表理解将返回UnicodeError 所以我想把这个列表理解分成两部分:

urls = [i.get('href') for i in soup.findAll('a')]

urls = [i.encode('utf-8') for i in urls]

这是我收到AttributeError时说的,这些项目是NoneType

我检查了他们的类型:

print [type(i) for i in urls]

其中显示了所有unicode类型。它似乎同时表示Noneunicode

1 个答案:

答案 0 :(得分:1)

您一定错过了None值。我检查了www.reddit.com,当然,还有:

<a name="content"></a>

其href为None。您可以执行以下操作,而不是打印所有值并手动搜索None

urls = [(i, i.get('href')) for i in soup.findAll('a')]
print [u for u in urls if u[1] is None]