Python 如何修改Pandas';s Read_html用户代理?
我试图通过网站使用pandas.read_html()函数从各种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
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
)完成了吗-