2014-01-19 3 views
-2

Я прочесывал код HTML следующей таблицы. Я хотел бы очистить только ссылку, связанную с каждым элементом таблицы, как я могу это сделать?Scrape URLS with BeautifulSoup

Вот мой код:

import urllib2 
from bs4 import BeautifulSoup 
first=urllib2.urlopen("http://www.admision.unmsm.edu.pe/res20130914/A.html").read() 
soup=BeautifulSoup(first) 
for tr in soup.find_all('tr')[2:]: 
    tds = tr.find_all('td') 
    print tds 

Результат таков:

[<td><a href="./A/013/0.html">ENFERMERÍA</a></td>] 
[<td><a href="./A/0141/0.html">TEC. MED. LAB. CLÍNICO Y ANATOMÍA PATOLÓGICA</a></td>] 
[<td><a href="./A/0142/0.html">TEC. MED. TERAPIA FÍSICA Y REHABILITACIÓN</a></td>] 
[<td><a href="./A/0143/0.html">TEC. MED. RADIOLOGÍA</a></td>] 
+0

Этот вывод не похож на выходе питона массива? Вы скопировали его правильно? –

+0

Кроме того, я редко использую beautifulSoup, но учитывая то, что у вас есть, почему бы просто не использовать 'links = td.find_all ('a')', чтобы получить ссылки в ячейках? –

ответ

2

Это будет выводить все ссылки, при условии, что есть только одна ссылка в каждом td.

for td in tds: 
    print td.a['href'] 

Но это, наверное, проще всего использовать find_all на tr элемент:

for link in tr.find_all('a'): 
    print link['href'] 

Если вы хотите сохранить их в списке, просто сделать это вместо:

links = [] 
for tr in soup.find_all('tr')[2:]: 
    links.extend([link['href'] for link in tr.find_all('a')]) 
1

Там это только одна таблица на странице, поэтому вы можете просто использовать понимание списка

links = [row.a['href'] for row in soup.find_all('tr') ] 

Результат

['./A/011/0.html', './A/012/0.html', './A/013/0.html', './A/0141/0.html', './A/0142/0.html', './A/0143/0.html', './A/0144/0.html', './A/015/0.html', './A/041/0.html', './A/042/0.html', './A/043/0.html', './A/051/0.html', './A/071/0.html', './A/072/0.html', './A/073/0.html', './A/081/0.html', './A/101/0.html', './A/102/0.html', './A/103/0.html', './A/131/0.html', './A/132/0.html', './A/141/0.html', './A/142/0.html', './A/144/0.html', './A/145/0.html', './A/162/0.html', './A/163/0.html', './A/165/0.html', './A/166/0.html', './A/167/0.html', './A/171/0.html', './A/172/0.html', './A/181/0.html', './A/191/0.html', './A/192/0.html', './A/193/0.html', './A/201/0.html', './A/202/0.html']