7 Comments
User's avatar
Yohannes's avatar

epl_schedule = fbref.read_schedule() returns the ff error: [12/15/25 09:01:24] ERROR Error while scraping https://fbref.com/en/comps/. Retrying... (attempt _common.py:545

1 of 5).

Traceback (most recent call last):

File "/usr/local/lib/python3.12/dist-packages/soccerdata/_common.py",

line 525, in _download_and_save

response.raise_for_status()

File "/usr/local/lib/python3.12/dist-packages/requests/models.py",

line 1026, in raise_for_status

raise HTTPError(http_error_msg, response=self)

requests.exceptions.HTTPError: 403 Client Error: Forbidden for url:

https://fbref.com/en/comps/

[12/15/25 09:01:30] ERROR Error while scraping https://fbref.com/en/comps/. Retrying... (attempt _common.py:545

2 of 5).

Traceback (most recent call last):

File "/usr/local/lib/python3.12/dist-packages/soccerdata/_common.py",

line 525, in _download_and_save

response.raise_for_status()

File "/usr/local/lib/python3.12/dist-packages/requests/models.py",

line 1026, in raise_for_status

raise HTTPError(http_error_msg, response=self)

requests.exceptions.HTTPError: 403 Client Error: Forbidden for url:

https://fbref.com/en/comps/

[12/15/25 09:01:36] ERROR Error while scraping https://fbref.com/en/comps/. Retrying... (attempt _common.py:545

3 of 5).

Traceback (most recent call last):

File "/usr/local/lib/python3.12/dist-packages/soccerdata/_common.py",

line 525, in _download_and_save

response.raise_for_status()

File "/usr/local/lib/python3.12/dist-packages/requests/models.py",

line 1026, in raise_for_status

raise HTTPError(http_error_msg, response=self)

requests.exceptions.HTTPError: 403 Client Error: Forbidden for url:

https://fbref.com/en/comps/

[12/15/25 09:01:42] ERROR Error while scraping https://fbref.com/en/comps/. Retrying... (attempt _common.py:545

4 of 5).

Traceback (most recent call last):

File "/usr/local/lib/python3.12/dist-packages/soccerdata/_common.py",

line 525, in _download_and_save

response.raise_for_status()

File "/usr/local/lib/python3.12/dist-packages/requests/models.py",

line 1026, in raise_for_status

raise HTTPError(http_error_msg, response=self)

requests.exceptions.HTTPError: 403 Client Error: Forbidden for url:

https://fbref.com/en/comps/

[12/15/25 09:01:48] ERROR Error while scraping https://fbref.com/en/comps/. Retrying... (attempt _common.py:545

5 of 5).

Traceback (most recent call last):

File "/usr/local/lib/python3.12/dist-packages/soccerdata/_common.py",

line 525, in _download_and_save

response.raise_for_status()

File "/usr/local/lib/python3.12/dist-packages/requests/models.py",

line 1026, in raise_for_status

raise HTTPError(http_error_msg, response=self)

requests.exceptions.HTTPError: 403 Client Error: Forbidden for url:

https://fbref.com/en/comps/

---------------------------------------------------------------------------

ConnectionError Traceback (most recent call last)

/tmp/ipython-input-2124964271.py in <cell line: 0>()

----> 1 epl_schedule = fbref.read_schedule()

4 frames

/usr/local/lib/python3.12/dist-packages/soccerdata/_common.py in _download_and_save(self, url, filepath, var)

551 continue

552

--> 553 raise ConnectionError(f"Could not download {url}.")

554

555

ConnectionError: Could not download https://fbref.com/en/comps/.

Anyone with a help?

Expand full comment
MartinOnData's avatar

Hi Yohannes, Fbref increased their scraping protection a month ago, so soccerdata does not work since.

Expand full comment
Yohannes's avatar

Any alternatives?

Expand full comment
MartinOnData's avatar

Nothing I can share at this point. But scraping using Selenium should still work.

Expand full comment
Yohannes's avatar

longer deep dives and more python

Expand full comment
Diamond Wheeler's avatar

Always want more football concepts. More python a plus too. I enjoyed this a lot still. Thank you for taking the time to write it up.

Expand full comment
MartinOnData's avatar

Thank you for taking the time to share your feedback 🙏

Expand full comment