2014-01-19 3 views
-2

다음 표의 HTML 코드를 스크랩했습니다. 테이블의 각 요소와 관련된 링크 만 다뤄야합니다. 어떻게 할 수 있습니까?BeautifulSoup로 스크랩 URL

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'] 

하지만 그냥 tr 요소에 find_all를 사용하는 것이 더 쉬울 것입니다 :

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']