我正在使用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类型。它似乎同时表示None
和unicode
。
答案 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]