我试图从包含大量数据的页面中删除链接。
我试图获得的链接具有此特定td(GIS 84F
),页面中没有其他链接。这是源代码的一部分,它很长,所以我无法根据位置进行剪切。
<tr class="blueRow">
<td nowrap="nowrap">GIS 84F</td>
<td nowrap="nowrap"><a href="/Archives/fsl/data/1288776/000130817915000157/0001308179-15-000157-index.htm" id="documentsbutton"> Documents</a></td>
<td class="small" >Other definitive proxy statements<br />Acc-no: 0001308179-15-000157 (34 Act) Size: 2 MB </td>
<td>2015-04-23</td>
<td nowrap="nowrap"><a href="/cgi-bin/browse-fsl?action=getcompany&filenum=001-36380&owner=exclude&count=40">001-36380</a><br>15788924 </td>
我的尝试:
from bs4 import BeautifulSoup
import re
import urllib2
htmlpage = urllib2.urlopen('THELINK')
soup = BeautifulSoup(htmlpage.read())
for link in soup.findAll('GIS 84F'):
print link.get('href')
谢谢!
答案 0 :(得分:1)
你可以这样做:
for link in soup.findAll('td', text='GIS 84F'): # get the relevant tds
parent = link.parent # get the parent tr
for a in parent.findAll('a', href=True): # get all the a tags within
print a['href'] # do whatever you want
答案 1 :(得分:0)
从你发布的html的外观来看,href实际上并不在你正在寻找的td
元素中。
代码问题:
findAll
不会搜索元素文字,因此它与td
不匹配&#34; GIS 84F&#34;在里面。您可以使用更高级的匹配功能,或致电findAll("td")
然后检查<td>
的每个结果element.get_text().strip() == "GIS 84F"
,或致电findAll("tr")
并查看孩子来更正此问题每个结果都有td
个元素。
如果link
是包含文字匹配的元素,那么link
是td
元素,没有href
。所以你真正想要做的就是&#34;一旦我找到包含相关文本的td
,得到它的父元素,然后从那里得到第二个td
,然后获取包含的href
元素的a
&#34;。在代码中,这类似于:
link.getParent().findAll('td')[1].find('a').get('href')
老实说,我认为更好的方法是使用更强大的匹配语言,比如XPath,而不是做一大堆DOM操作,但这是你的通话。