Python 如何修改Pandas';s Read_html用户代理?

Python 如何修改Pandas';s Read_html用户代理?,python,pandas,web-scraping,urllib2,Python,Pandas,Web Scraping,Urllib2,我试图通过网站使用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) from BeautifulSoup import BeautifulSoup import urllib2 ope

我试图通过网站使用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)
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")
但是,此代码会生成一个“ValueError:Invalid URL”错误

然后,我尝试使用urllib2.urlopen()函数解析同一个网站。这次我得到了一个“HTTPError:httperror404:notfound”。在通常的试错错误查找之后,urllib2头向Web服务器提供了一个类似python的代理,我认为它无法识别

现在,如果我修改urllib2的代理并使用beautifulsoup读取其内容,我就能够毫无问题地读取该表

例如:

import pandas as pd
url = r'http://www.transfermarkt.co.uk/en/premier-league/gegentorminuten/wettbewerb_GB1.html'
df = pd.read_html(url)
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抓取此网站


谢谢

目前您不能。相关代码:

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数据,然后将其加载到数据帧中

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]
或者如果您可以使用
请求

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

@PhillipCloud我在那里发表评论是为了澄清
io
是什么:)啊,好吧……那么继续:)@Viktor我已经让它工作了,但是pd.read\u html函数返回的是一个列表,而不是一个数据帧。从BeautifulSoup导入BeautifulSoup导入urllib2导入熊猫作为pd url=r''opener=urllib2.build_opener()opener.addheaders=[('User-agent','Mozilla/5.0')]response=opener.open(url)html=response.read()soup=BeautifulSoup(html)tables=pd.read_html(str(soup),attrs={“class”:“tabelle_-grafik”})
read\u html
返回
DataFrame
s的
列表,因为许多页面都有多个表。我们应该真正考虑使用
请求
pandas
上。这比传递一个
OpenerDirector
实例要好得多。我想我们在某处使用
请求时遇到了一个问题……您可能想在GitHub上提出一个问题。我很乐意看一看(我写了
read\uhtml
)完成了吗-