我正试图通过Transfetmarkt网站使用pandas.read_html()函数从各种html表中搜集英文足球统计数据。
示例:
import pandas as pd
url = r'http://www.transfermarkt.co.uk/en/premier-league/gegentorminuten/wettbewerb_GB1.html'
df = pd.read_html(url)
但是,此代码会生成“ValueError:无效网址”错误。
然后我尝试使用urllib2.urlopen()函数解析同一个网站。这次我得到了“HTTPError:HTTP错误404:找不到”。在通常的试验和错误发现之后,转向urllib2标头向网络服务器呈现类似python的代理,我认为它无法识别。
现在,如果我修改urllib2的代理并使用beautifulsoup读取其内容,我可以毫无问题地阅读该表。
示例:
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")
如何修改pandas的urllib2标头以允许python抓取这个网站?
谢谢
答案 0 :(得分: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))
如您所见,它只是将url
传递给urlopen
并读取数据。您可以提出请求此功能的问题,但我认为您没有时间等待它解决,因此我建议使用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]