2014-02-28 2 views
3

bsoup 스크립트를 사용하여 웹 사이트의 테이블에서 이름을 스크랩하려했지만 프로그램이 아무것도 반환하지 않거나 "[]"을 반환했습니다. 어떤 사람이 내가 잘못하고있는 것을 가리키는 데 도움이된다면 고맙겠습니다. 여기 내가 실행하는 데 노력하고있어입니다 :HTML 태그를 포함하는 Python 웹 스크래핑

from bs4 import BeautifulSoup 
import urllib2 

url="http://www.trackinfo.com/entries-race.jsp?raceid=GBM$20140228E02" 
page=urllib2.urlopen(url) 
soup = BeautifulSoup(page.read()) 
names=soup.findAll('a',{'href':'href="dog.jsp?runnername=[^.]*'}) 
for eachname in names: 
print eachname.string 

을 그리고 여기에 내가 얻으려고 요소 중 하나입니다

<a href="dog.jsp?runnername=PG+BAD+GRANDPA"> 

         PG BAD GRANDPA 

         </a> 

답변

3

당신이 원하는 경우에 것을 말한다 documentation for BeautifulSoup 참조 검색에서 정규 표현식을 사용하려면 컴파일 된 정규 표현식을 전달해야합니다.

import re 
names = soup.find_all("a",{"href":re.compile("dog")}) 
+1

+1 : BS와 짧고 달콤한 대답에 연결하기 위해. :) – Manhattan

2

다른 접근 방식이 하나가 대신 urllib2Requests를 사용하여 :

당신의 변수를 복용, 이것은 당신이 원하는 것입니다. 선호도의 문제. 주요 요점은 코드, 특히 마지막 행의 들여 쓰기를 정리해야한다는 것입니다.

from bs4 import BeautifulSoup as bs 
import requests 
import re 

url = "http://www.trackinfo.com/entries-race.jsp?raceid=GBM$20140228E02" 
r = requests.get(url).content 
soup = bs(r) 
soup.prettify() 

names = soup.find_all("a", href=re.compile("dog")) 

for name in names: 
    print name.get_text().strip() 

이 정보가 도움이되는지 알려주세요.