Мой файл bota.py содержит код для удаления сайта электронной коммерции. Это работает, если я вызываю непосредственно в этом файле, например get_bota («мышь»), и возвращаю список очищенных данных.
import json
from requests_html import AsyncHTMLSession
asession = AsyncHTMLSession()
async def get_bota_page(keyword, page_no):
template_link = 'https://www.bota.com.np/catalog/?_keyori=ss&from=input&page={page_no}&q={keyword}&spm=a2a0e.11779170.search.go.287d2d2bVToBsh'
r = await asession.get(template_link.format(keyword=keyword,page_no=page_no))
return r
def getBota(search):
total = 1
page = 1
items = list()
if search== "":
return items
results = asession.run(
lambda: get_bota_page(search, 1),
lambda: get_bota_page(search, 2),
lambda: get_bota_page(search, 3),
)
print(results)
while total != 0:
scripts = results[page-1].html.find('script')
jsonData = scripts[3].text.split("window.pageData=")[1]
dictData = json.loads(jsonData)
if (page == 1):
total = int(dictData['mainInfo']['totalResults'])
if total==0:
return items
products = dictData['mods']['listItems']
found = len(products)
total = total - found
for item in products:
temp = dict()
temp['name'] = item['name']
temp['productUrl'] = (item['productUrl'])
temp['image'] = (item['image'])
temp['price'] = (item['price'])
temp['site'] = 'daraz'
items.append(temp)
page += 1
return items
Моя функция просмотра индекса, в которой я вызываю указанную выше функцию, чтобы получить очищенные данные в django views.py.
from .forms import Search
from .bota import getBota
def index(request):
form = Search(request.POST or None)
if request.method=='GET':
return render(request, 'sites_scrap/index.html', {'form': form})
else:
if form.is_valid():
keyword=form.cleaned_data['product']
print(keyword)
list=getBota(keyword)
print(x)
return render(request, 'sites_scrap/index.html', {'List': list,'form':form})
полученная мной ошибка была:
Internal Sever Error
RuntimeWarning: coroutine 'get_bota_page' was never awaited
return [p.lower() for p in parts]
RuntimeWarning: Enable tracemalloc to get the object allocation traceback