2013-09-22 3 views
1

나는 pandas.read_html() 함수를 사용하여 Transfetmarkt 웹 사이트를 통해 다양한 html 테이블에서 잉글랜드 축구 통계를 긁어 내려고하고 있습니다.팬더의 Read_html 사용자 에이전트를 수정하는 방법은 무엇입니까?

예 : "잘못된 URL ValueError를" 오류

import pandas as pd 
url = r'http://www.transfermarkt.co.uk/en/premier-league/gegentorminuten/wettbewerb_GB1.html' 
df = pd.read_html(url) 

그러나이 코드는 를 생성합니다.

그런 다음 urllib2.urlopen() 함수를 사용하여 동일한 웹 사이트를 구문 분석하려고했습니다. 이번에는 "HTTPError : HTTP 오류 404 : 찾을 수 없습니다". 일반적인 시행 착오 오류 발견 후 urllib2 헤더가 웹 서버에 에이전트와 같은 python을 제공한다는 것을 알았지 만, 나는 인식하지 못한다.

urllib2의 에이전트를 수정하고 beautifulsoup를 사용하여 내용을 읽으면 문제없이 테이블을 읽을 수 있습니다.

예 : 나는 파이썬이 웹 사이트를 긁어 할 수 있도록 팬더의 urllib2가 헤더를 수정하려면 어떻게

from BeautifulSoup import BeautifulSoup 
import urllib2 
opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
url = r'http://www.transfermarkt.co.uk/en/premier-league/gegentorminuten/wettbewerb_GB1.html' 
response = opener.open(url) 
html = response.read() 
soup = BeautifulSoup(html) 
table = soup.find("table") 

?

감사합니다.

+0

당신은 GitHub의에 문제를 통해 넣어 할 수 있습니다. 나는 (read_html을 썼다.) –

+0

done - https://github.com/pydata/pandas/issues/4927 – kbgo

답변

4

현재 할 수 없습니다. 코드의 관련 부분 : 보시다시피

if _is_url(io): # io is the url 
    try: 
     with urlopen(io) as url: 
      raw_text = url.read() 
    except urllib2.URLError: 
     raise ValueError('Invalid URL: "{0}"'.format(io)) 

, 그것은 단지 urlurlopen에 전달하고 데이터를 읽습니다. 이 기능을 요청하는 문제를 제기 할 수는 있지만 시간이 없어서 해결 될 때까지 기다릴 필요가 없어서 BeautifulSoup을 사용하여 HTML 데이터를 구문 분석 한 다음 DataFrame에로드 할 것을 제안합니다.

import urllib2 

url = 'http://www.transfermarkt.co.uk/en/premier-league/gegentorminuten/wettbewerb_GB1.html' 
opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
response = opener.open(url) 
tables = pd.read_html(response.read(), attrs={"class":"tabelle_grafik"})[0] 

아니면 사용할 수 있는지 requests :

tables = pd.read_html(requests.get(url, 
            headers={'User-agent': 'Mozilla/5.0'}).text, 
         attrs={"class":"tabelle_grafik"})[0] 
+0

나는 내가 거기에 놓은 그 의견을 조금 부끄럽게 생각한다. .. 선장 명백한 : | –

+0

+1 "평화의 부호"때문에 .... 마음의 평화처럼 :) –

+0

@PhillipCloud 나는'io'가 무엇인지 명확히하기 위해 주석을 달았습니다. –

관련 문제