使用beautifulsoup从URL列表中获取第一个URL

时间:2013-12-04 19:11:45

标签: python python-2.7 html-parsing beautifulsoup

我正在尝试使用beautifulsoup在URL标记列表中提取第一个URL并且我被挂断了。到目前为止,我已经能够使用以下代码获得我正在寻找的结果。

rows = results.findAll('p',{'class':'row'})
for row in rows:
  for link in row.findAll('a'):
    print(link)

这会打印三个<a>标签,类似于以下内容。

<a href="http://something.foo">1</a>
<a href="http://something.bar">2</a>
<a href="http://something.foobar">3</a>

我要做的是从第一个href中提取出来的URL。 I found another post描述了使用某些正则表达式执行此操作但到目前为止我无法使其正常工作。

我不断收到此错误消息:

    Traceback (most recent call last):
  File "./scraper.py", line 25, in <module>
    for link in row.find('a', href=re.compile('^http://')):
TypeError: 'NoneType' object is not iterable

任何帮助或指示都将不胜感激。让我知道我需要发布的其他细节。

1 个答案:

答案 0 :(得分:1)

如果您只想要第一个结果,则无需使用findAll - 您可以使用find。 Html属性在BeautifulSoup中作为字典公开。 最后,如果要查找的第二个参数是字符串而不是字典,则将其用作类。您也可以将其作为命名参数提供:find('p', class='row')

了解这一点,你可以通过简单的线条完成你想要的任务:

results.find('p','row').find('a')['href']