为什么python和BS4在专门调用时只返回一个'href',但是当作为文本调用时所有值?

时间:2017-02-22 16:07:38

标签: python web-scraping beautifulsoup

抓取页面并尝试从第一列获取所有网址。当我打电话给文本时,我得到了div中的所有内容。但是,当我专门定位URL时,我只得到第一个。我如何获得所有这些 - 分开存储?

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns3:singlePayment xmlns:ns3="http://impl.sub.xxx.com/">
<request>
         <accountName>xxx</accountName>
</request>
      </ns3:singlePayment>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

2 个答案:

答案 0 :(得分:1)

因为您通过标签名称导航解析树,如果您有多个匹配的属性名称,只返回第一个。这是预期的行为。尝试使用 find_all() 来搜索它们。

来自BS4文档:

  

“使用标记名称作为属性将仅为您提供第一个标记   那个名字。“

     

“如果您需要获取所有标签,或任何更复杂的标签   比具有特定名称的第一个标签,您需要使用其中一个   搜索树中描述的方法,例如 find_all()

请参阅:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#navigating-using-tag-names

答案 1 :(得分:0)

这是findAll,但我需要向上移动树

for a in main_div.findAll('a', href=True):
    print a['href']