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