【发布时间】:2019-10-17 21:19:21
【问题描述】:
我正在设置一个 Django 视图,它从 API 请求产品数据,使用 BeautifulSoup 解析它们,应用 googletrans 模块并将响应保存到我的 Postgresql 数据库中。
昨天一切正常,直到突然,Google 阻止了对我的 IP 地址的访问,因为太多请求了..
我刚刚打开了我的 LTE 来更改我的 IP 地址并且它起作用了。
但是现在,为了确保此 IP 地址不会再次发生这种情况,我需要找到一种方法来批量调用 googletrans API 或任何其他可以防止我再次被阻止的解决方案。
这是我的观点:
from bs4 import BeautifulSoup
from googletrans import Translator
import requests
import json
def api_data(request):
if request.GET.get('mybtn'): # to improve, == 'something':
resp_1 = requests.get(
"https://www.headout.com/api/public/v1/product/listing/list-by/city?language=fr&cityCode=PARIS&limit=5000¤cyCode=CAD",
headers={
"Headout-Auth": HEADOUT_PRODUCTION_API_KEY
})
resp_1_data = resp_1.json()
base_url_2 = "https://www.headout.com/api/public/v1/product/get/"
translator = Translator()
for item in resp_1_data['items']:
print('translating item {}'.format(item['id']))
# concat ID to the URL string
url = '{}{}'.format(base_url_2, item['id'] + '?language=fr')
# make the HTTP request
resp_2 = requests.get(
url,
headers={
"Headout-Auth": HEADOUT_PRODUCTION_API_KEY
})
resp_2_data = resp_2.json()
descriptiontxt = resp_2_data['contentListHtml'][0]['html'][0:2040] + ' ...'
#Parsing work
soup = BeautifulSoup(descriptiontxt, 'lxml')
parsed = soup.find('p').text
#Translation doesn't work
translation = translator.translate(parsed, dest='fr')
titlename = item['name']
titlefr = translator.translate(titlename, dest='fr')
destinationname = item['city']['name']
destinationfr = translator.translate(destinationname, dest='fr')
Product.objects.get_or_create(
title=titlefr.text,
destination=destinationfr.text,
description=translation.text,
link=item['canonicalUrl'],
image=item['image']['url']
)
return render(request, "form.html")
如何批量调用谷歌翻译API?或者有其他解决方案吗?
请帮忙。
编辑
基于@ddor254 我应该把time.sleep(2)放在哪里?
这是我出来的,可以吗?
Product.objects.get_or_create(
title=titlefr.text,
destination=destinationfr.text,
description=translation.text,
link=item['canonicalUrl'],
image=item['image']['url']
)time.sleep(2) #here
或者像这样:
resp_1 = requests.get(
"https://www.headout.com/api/public/v1/product/listing/list-by/city?language=fr&cityCode=PARIS&limit=5000¤cyCode=CAD",
headers={
"Headout-Auth": HEADOUT_PRODUCTION_API_KEY
}, time.sleep(2)) #here
只是想确保它是正确的方法,然后再冒着让这个新 IP 也被阻止的风险。
【问题讨论】:
标签: python django python-requests batch-processing google-translation-api