Я пытаюсь очистить базу данных CPU в TechPowerUp.
Я нашел обновления таблицы с использованием AJAX и создал следующий код:
import requests
from bs4 import BeautifulSoup
import csv
import string
cpus = []
base = 'https://www.techpowerup.com/cpu-specs/?ajaxsrch='
letters = list(string.ascii_lowercase)
letters.extend(range(0, 10))
for i in letters:
URL = base + str(i)
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
with open('cpu2.csv', mode='a') as cpu_csv:
headers = ['name', 'family', 'socket', 'release']
writer = csv.DictWriter(cpu_csv, fieldnames=headers, lineterminator='\n')
for tr in soup.find_all('tr')[1:]:
tds = tr.find_all('td')
if tds[0].text.strip() not in cpus:
writer.writerow({'name': tds[0].text.strip(), 'family': tds[1].text.strip(), 'socket': tds[4].text.strip(), 'release': tds[8].text.strip()})
cpus.append(tds[0].text.strip())
else:
print("duplicate")
Этот код работает в том смысле, что он перебирает AZ, затем 0-9 и заполняет CSV-файл, игнорируя дубликаты, однако я получаю логическую ошибку, когда я только собираю ~ 600 результатов, где более 2000 записей.
Я полагаю, что это может быть связано с ограничением количества возвращаемых элементов для каждого AJAX Поиска запроса, поэтому не все записи обнаруживаются, существует ли другой подход для извлечения всех результатов?
Спасибо