Как мне вставить скрипт Backoff в мою веб-страницу - PullRequest
1 голос
/ 10 июня 2019

Я хочу использовать пакет "Backoff" в своем веб-цикле и не могу заставить его работать. Куда мне его вставить? Как заставить «r = запросы ...» все еще распознаваться?

Я пытался вставить выражение в мой код различными способами, и оно не работает. Я хочу быть в состоянии использовать это для целей пакета. Спасибо!

код для вставки

@backoff.on_exception(backoff.expo,
                      requests.exceptions.RequestException,
                      max_time=60)

def get_url(what goes here?):
    return requests.get(what goes here?)

СУЩЕСТВУЮЩИЙ КОД:

import os
import requests
import re
import backoff

asin_list = ['B079QHML21']
urls = []
print('Scrape Started')
for asin in asin_list:
  product_url = f'https://www.amazon.com/dp/{asin}'
  urls.append(product_url)
  base_search_url = 'https://www.amazon.com'
  scraper_url = 'http://api.scraperapi.com'

  while len(urls) > 0:
    url = urls.pop(0)
    payload = {key, url}  #--specific parameters
    r = requests.get(scraper_url, params=payload)
    print("we got a {} response code from {}".format(r.status_code, url))
    soup = BeautifulSoup(r.text, 'lxml')

    #Scraping Below#

Я ожидаю, что код "Backoff" будет работать так, как он рассчитан в коде, чтобы повторить 500 ошибок и не было сбоев

1 Ответ

1 голос
/ 10 июня 2019

Вместо прямого вызова:

requests.get(scraper_url, params=payload)

Измените get_url, чтобы сделать именно это, и позвоните get_url:

@backoff.on_exception(backoff.expo,
                      requests.exceptions.RequestException,
                      max_time=60)

def get_url(scraper_url, payload):
    return requests.get(scraper_url, params=payload)

и в вашем коде вместо:

r = requests.get(scraper_url, params=payload)

сделать:

r = get_url(scraper_url, payload)
...