2017-07-28 53 views
0

我试图在使用urllib(刮)它的python中打开一个网页。该网页在浏览器中看起来很好,但是我得到一个与urlopen 404错误。但是,如果查看返回的错误文本,它实际上具有完整的网页。使用urllib 404错误,但URL在浏览器中正常工作,并在错误中返回完整网页

from urllib.request import Request, urlopen 
    from urllib.error import HTTPError, URLError 
    from bs4 import BeautifulSoup 

    try: 
     html = urlopen('http://www.enduroworldseries.com/series-rankings') 
    except HTTPError as e: 
     err = e.read() 
     code = e.getcode() 
     print(err) 

当我运行代码,异常被捕获和“码”是“404”。如果您在浏览器中查看页面,则err变量具有完整的html。那么,为什么我会得到一个错误?

不确定它是否重要,但同一域中的其他页面可以使用urlopen加载。

+0

该资源 “http://www.enduroworldseries.com/series-rankings” 正在恢复404,当你访问该网页的提供者。这可能是阻止人们使用诸如您的代码访问/刮取页面的一种方式。您可能需要考虑正确准备您的用户代理等等,因此您看起来像从浏览器访问页面,而不是从代码访问页面。 –

+0

我试着将'User-Agent'设置为'Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/59.0.3071.115 Safari/537.36'})。没有帮助。 –

回答

2

我发现一个解决方案时不知道最初的问题是什么。简单地用Requests库替换urllib。

req = Request('http://www.enduroworldseries.com/series-rankings', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}) 
    html = urlopen(req) 
    bsObj = BeautifulSoup(html, "html.parser") 

成了

response = requests.get('http://www.enduroworldseries.com/series-rankings', {'User-Agent': 'Mozilla/5.0'}) 
    bsObj = BeautifulSoup(response.content, "html.parser") 
相关问题