我正在尝试使用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


任何帮助或指示,将不胜感激。让我知道我还需要发布其他哪些信息。

最佳答案

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

知道了这一点,您可以通过简单的代码完成所需的操作:

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

关于python - 使用beautifulsoup从URL列表中获取第一个URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20383865/

10-09 20:15
查看更多