2015-07-20 3 views
0

Я пытаюсь очистить ссылку со страницы с большим количеством данных.Получение конкретной ссылки из исходного кода Python

Ссылка, которую я пытаюсь получить, имеет этот конкретный 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">&nbsp;Documents</a></td> 
<td class="small" >Other definitive proxy statements<br />Acc-no: 0001308179-15-000157&nbsp;(34 Act)&nbsp; Size: 2 MB   </td> 
<td>2015-04-23</td> 
<td nowrap="nowrap"><a href="/cgi-bin/browse-fsl?action=getcompany&amp;filenum=001-36380&amp;owner=exclude&amp;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 
0

Из взгляда html, который вы опубликовали, href на самом деле не находится в элементе td, который вы ищете.

Проблемы с кодом:

  • findAll не будет искать элемент текста, поэтому он не будет соответствовать td с «ГИС 84F» в нем. Вы можете исправить это, используя более совершенную функцию соответствия, или позвонив findAll("td"), а затем проверив каждый полученный <td> по телефону element.get_text().strip() == "GIS 84F" или позвонив по номеру findAll("tr") и посмотрев на дочерний элемент td по каждому результату.

  • Если link является элементом которого содержал текст соответствует, то link является td элементом, без href. То, что вы на самом деле хотели сделать, было «как только я нашел td, содержащий соответствующий текст, получить его родительский элемент, а затем получить второй td, а затем получить href из содержащегося в нем элемента a». В коде это что-то вроде:

    link.getParent().findAll('td')[1].find('a').get('href') 
    

Честно говоря, я думаю, что лучший способ сделать это, чтобы использовать более мощный язык соответствия как XPath, вместо того, чтобы делать целую кучу операций DOM, но это ваш звонок.