【问题标题】:Python Requests.Get - Giving Invalid Schema ErrorPython Requests.Get - 给出无效的架构错误
【发布时间】:2018-07-22 23:43:42
【问题描述】:

另一个给你。

试图从 CSV 文件中抓取 URL 列表。这是我的代码:

from bs4 import BeautifulSoup
import requests
import csv

with open('TeamRankingsURLs.csv', newline='') as f_urls, open('TeamRankingsOutput.csv', 'w', newline='') as f_output:
    csv_urls = csv.reader(f_urls)
    csv_output = csv.writer(f_output)


    for line in csv_urls:
        page = requests.get(line[0]).text
        soup = BeautifulSoup(page, 'html.parser')
        results = soup.findAll('div', {'class' :'LineScoreCard__lineScoreColumnElement--1byQk'})

        for r in range(len(results)):
            csv_output.writerow([results[r].text])

...这给了我以下错误:

Traceback (most recent call last):
  File "TeamRankingsScraper.py", line 11, in <module>
    page = requests.get(line[0]).text
  File "C:\Users\windowshopr\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\windowshopr\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\windowshopr\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 512, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\windowshopr\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 616, in send
    adapter = self.get_adapter(url=request.url)
  File "C:\Users\windowshopr\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 707, in get_adapter
    raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for 'https://www.teamrankings.com/mlb/stat/runs-per-game?date=2018-04-15'

我的 CSV 文件只是 A 列中几个 URL 的列表(即https://www..。)

(我试图抓取的 div 类在该页面上不存在,但这不是问题所在。至少我不这么认为。我只需要在可以阅读时更新它来自 CSV 文件。)

有什么建议吗?因为此代码适用于另一个项目,但由于某种原因,我遇到了这个新 URL 列表的问题。非常感谢!

【问题讨论】:

    标签: python-3.x csv beautifulsoup python-requests


    【解决方案1】:

    来自 Traceback,requests.exceptions.InvalidSchema: No connection adapters were found for 'https://www.teamrankings.com/mlb/stat/runs-per-game?date=2018-04-15'

    查看url中的随机字符,应该从https://www.teamrankings.com/mlb/stat/runs-per-game?date=2018-04-15开始

    所以首先使用正则表达式解析 csv 并删除 http/https 之前的任何随机字符。那应该可以解决您的问题。

    如果您想在阅读 csv 时解决此特定网址的当前问题,请执行以下操作:

    import regex as re
    
    strin = "https://www.teamrankings.com/mlb/stat/runs-per-game?date=2018-04-15"
    
    re.sub(r'.*http', 'http', strin)
    

    这将为您提供请求可以处理的正确 url。

    由于您要求对循环中可访问的路径进行完整修复,因此您可以执行以下操作:

    from bs4 import BeautifulSoup
    import requests
    import csv
    import regex as re
    
    with open('TeamRankingsURLs.csv', newline='') as f_urls, open('TeamRankingsOutput.csv', 'w', newline='') as f_output:
        csv_urls = csv.reader(f_urls)
        csv_output = csv.writer(f_output)
    
    
        for line in csv_urls:
            page = re.sub(r'.*http', 'http', line[0])
            page = requests.get(page).text
            soup = BeautifulSoup(page, 'html.parser')
            results = soup.findAll('div', {'class' :'LineScoreCard__lineScoreColumnElement--1byQk'})
    
            for r in range(len(results)):
                csv_output.writerow([results[r].text])
    

    【讨论】:

    • 感谢您的回复。我不确定为什么将这些特殊字符放在从 CSV 获取的 URL 前面,因为 CSV 中没有任何暗示?无论如何,有没有办法让它在循环中通过所有 URL 而不仅仅是一个?当我尝试使用 requests.get 部分时,我得到了类似的错误?谢谢!
    • 是的,这是可能的,让我编辑答案。如果它对您有用,您能否接受这个答案。
    • 太棒了!非常感谢你为我做这件事。我一直在兜圈子,但现在我明白了。会接受!
    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多