当前位置: 首页 > 面试题库 >

使用request.get()时未提供任何模式以及其他错误

司徒运锋
2023-03-14
问题内容

我通过遵循“自动化无聊的东西”来学习Python。该程序应该转到http://xkcd.com/并下载所有图像以供离线查看。

我使用的是2.7版和Mac。

由于某种原因,我遇到诸如“未提供模式”之类的错误,以及使用request.get()本身的错误。

这是我的代码:

# Saves the XKCD comic page for offline read

import requests, os, bs4, shutil

url = 'http://xkcd.com/'

if os.path.isdir('xkcd') == True: # If xkcd folder already exists
    shutil.rmtree('xkcd') # delete it
else: # otherwise
    os.makedirs('xkcd') # Creates xkcd foulder.


while not url.endswith('#'): # If there are no more posts, it url will endswith #, exist while loop
    # Download the page
    print 'Downloading %s page...' % url
    res = requests.get(url) # Get the page
    res.raise_for_status() # Check for errors

    soup = bs4.BeautifulSoup(res.text) # Dowload the page
    # Find the URL of the comic image
    comicElem = soup.select('#comic img') # Any #comic img it finds will be saved as a list in comicElem
    if comicElem == []: # if the list is empty
        print 'Couldn\'t find the image!'
    else:
        comicUrl = comicElem[0].get('src') # Get the first index in comicElem (the image) and save to
        # comicUrl

        # Download the image
        print 'Downloading the %s image...' % (comicUrl)
        res = requests.get(comicUrl) # Get the image. Getting something will always use requests.get()
        res.raise_for_status() # Check for errors

        # Save image to ./xkcd
        imageFile = open(os.path.join('xkcd', os.path.basename(comicUrl)), 'wb')
        for chunk in res.iter_content(10000):
            imageFile.write(chunk)
        imageFile.close()
    # Get the Prev btn's URL
    prevLink = soup.select('a[rel="prev"]')[0]
    # The Previous button is first <a rel="prev" href="/1535/" accesskey="p">&lt; Prev</a>
    url = 'http://xkcd.com/' + prevLink.get('href')
    # adds /1535/ to http://xkcd.com/

print 'Done!'

错误如下:

Traceback (most recent call last):
  File "/Users/XKCD.py", line 30, in <module>
    res = requests.get(comicUrl) # Get the image. Getting something will always use requests.get()
  File "/Library/Python/2.7/site-packages/requests/api.py", line 69, in get
    return request('get', url, params=params, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 451, in request
    prep = self.prepare_request(req)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 382, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/Library/Python/2.7/site-packages/requests/models.py", line 304, in prepare
    self.prepare_url(url, params)
  File "/Library/Python/2.7/site-packages/requests/models.py", line 362, in prepare_url
    to_native_string(url, 'utf8')))
requests.exceptions.MissingSchema: Invalid URL '//imgs.xkcd.com/comics/the_martian.png': No schema supplied. Perhaps you meant http:////imgs.xkcd.com/comics/the_martian.png?

问题是我已经多次阅读本书中有关程序的部分,阅读了“请求”文档,以及在此处查看其他问题。我的语法看起来正确。

谢谢你的帮助!

编辑:

这不起作用:

comicUrl = ("http:"+comicElem[0].get('src'))

我以为添加http:会摆脱没有模式提供的错误。


问题答案:

改变你comicUrl的这个

comicUrl = comicElem[0].get('src').strip("http://")
comicUrl="http://"+comicUrl
if 'xkcd' not in comicUrl:
    comicUrl=comicUrl[:7]+'xkcd.com/'+comicUrl[7:]

print "comic url",comicUrl


 类似资料:
  • 我使用Identity server 4和OIDC实现了身份验证和授权,以允许访问我们的应用程序的客户端获得访问我们的资源服务器(web API)所需的令牌。这是当前的体系结构: Identity Server 4使用自定义数据库对用户进行身份验证 资源API(ASP.NET核心) 角度2前端 我需要实现SSO,来自其他系统的用户将从他们的身份提供者传递SAML2断言,以允许他们访问我们的资源AP

  • 问题内容: 当我在终端中键入命令时,它似乎可以正常工作- 成功下载所有库等。但是,在该过程结束时,我收到一条消息,提示您。 输入项 输出量 在的package.json中: 我检查了CRA 更改日志,看起来好像增加了对自定义模板的支持-但是看起来命令似乎没有更改。 知道这里发生了什么吗? 问题答案: 如果您以前通过进行了全局安装,建议您使用来卸载软件包,以确保始终使用最新版本。 文件 使用以下命令

  • 我被要求实现这个函数,它等待一些操作完成。然后让它做它应该做的事情。我被要求不要使用观察者类。我尝试了无限循环,它成功了。所以我想知道是否还有其他方法可以做到这一点。(我正在Jade中开发一个应用程序,超级代理与其他代理进行通信,一旦代理收到消息,他就可以执行一些功能并发送回消息)。我想为等待的部分做点什么。提前感谢

  • 我有一个自制的ETL解决方案。转换层在JavaScript脚本的配置文件中定义,由Java的Nashorn引擎解释。 我遇到了性能问题。也许没有什么可以做的,但我希望有人能找到我使用Nashorn的方式有帮助的问题。该过程是多线程的。 我创建了一个静态脚本引擎,它只用于创建CompiledScript对象。 我将在每条记录上重新执行的Scriptlet编译成CompiledScript对象。 有两

  • 我试图使用树莓派控制DAC7562EVM。我已连接: 信号-PI-TI-信号 MOSI-P1-19-J2-11 SDI SCLK-P1-23-J2-3 SCLK 首席执行官-P1-24-J2-1 /SYNCO 接地-P1-25-J2-4 DGND 此外,JP1引脚被用来将 /LDAC接地。 到目前为止,我在SDI、SCLK和/SYNC0引脚上使用了示波器,可以验证同步引脚是否不会中断数据传输。此外

  • 这是我的配置文件,其中我有一个登录拦截器。我想使用不同的文件上传拦截器,在不同的操作中使用不同的文件类型和给定的最大大小。但问题就在这里:它总是采用默认的和。我哪里做错了?