Локально сохраняйте запрос request.get () для использования в Beautiful Soup - PullRequest
0 голосов
/ 26 июня 2018

Итак, я создаю скрипт на Python, чтобы очистить некоторые данные (результаты Кубка мира) из URL, используя Requests и BeautifulSoup4, и пока я тестирую свой код, я делаю больше запросов, чем хотелось бы веб-сайту, в результате чего получается периодически ошибка:

 requests.exceptions.ConnectionError: Max retries exceeded with url

На самом деле мне не нужно продолжать вызывать страницу, конечно, мне нужно всего лишь вызвать ее один раз, сохранить возвращенные данные локально и передать их в красивый суп. Конечно, я не первый, кто делает это, есть ли другой способ? Это, вероятно, тривиально, но я довольно новичок в этом - спасибо.

Вот с чем я работаю:

import requests
from bs4 import BeautifulSoup

url = "https://www.telegraph.co.uk/world-cup/2018/06/26/world-cup-2018-fixtures-complete-schedule-match-results-far/"
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html, "html.parser")

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете попытаться подождать 1 или 2 секунды, если появится ошибка:

import requests
from bs4 import BeautifulSoup

url = "https://www.telegraph.co.uk/world-cup/2018/06/26/world-cup-2018-fixtures-complete-schedule-match-results-far/"
try:
     response = requests.get(url)
     html = response.content
     soup = BeautifulSoup(html, "html.parser")
except:
    print("Connection refused by the server..")
    print("Let me sleep for 2 seconds")
    time.sleep(2)
    print("Continue...")
    continue

Я не смог проверить это, так что, может быть, это не сработает.

0 голосов
/ 26 июня 2018

Сохранить HTML в файле один раз:

response = requests.get(url)
with open('cache.html', 'wb') as f:
    f.write(response.content)

Затем в следующий раз просто загрузите его из файла:

with open('cache.html', 'rb') as f:
    soup = BeautifulSoup(f.read(), 'html.parser')
...