【发布时间】:2021-11-03 15:21:05
【问题描述】:
我正忙于尝试将从 API 收集的数据添加到 sqlite3 数据库,然后提取下一页,加载该页面并将该数据添加到数据库中,直到没有更多的下一页 (next_is_after)。
加载数据运行良好(感谢其他用户),但是当我尝试将其作为列表加载时,格式错误,当我将其作为字典加载时,它运行良好,但我正在努力将其加载到数据库中。
我不知道如何实现加载下一页的循环,因为它不是“正常”页码而是代码(例如“WzExNDEuMTYsNTYwNTkzNTFd”)。
我在下面附上了代码。我会再次感谢任何帮助。
import requests
import json
import sqlite3
con = sqlite3.connect('takealot.db')
cur = con.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS products
(sku text PRIMARY KEY, title text, slug text, reviews integer, star_rating real, listing_price real, pretty_price real)''')
baseurl = 'https://api.takealot.com/rest/v-1-10-0/searches/products,filters,facets,sort_options,breadcrumbs,slots_audience,context,seo'
endpoint = '?after=WzExNDEuMTYsNTYwNTkzNTFd'
def main_request(baseurl, endpoint):
res = requests.get(baseurl + endpoint)
return res.json()
daten = main_request(baseurl, endpoint)
next_is_after = daten['sections']['products']['paging']['next_is_after']
prodlist = []
for data in daten['sections']['products']['results']:
prod = {
'sku': data['product_views']['core']['id'],
'title': data['product_views']['core']['title'],
'slug': data['product_views']['core']['slug'],
'reviews': data['product_views']['core']['reviews'],
'star_rating': data['product_views']['core']['star_rating'],
'listing_price': data['product_views']['buybox_summary']['listing_price'],
'pretty_price': data['product_views']['buybox_summary']['pretty_price']
}
prodlist.append(prod)
cur.executemany("INSERT OR IGNORE INTO products VALUES (?, ?, ?, ?, ?, ?, ?)", [prod['sku'], prod['title'], prod['slug'], prod['reviews'], prod['star_rating'], prod['listing_price'], prod['pretty_price']])
con.commit()
for row in cur.execute('''SELECT * FROM products'''):
print(row)
【问题讨论】: