Вы можете сделать все это с requests
. Возьмите выпадающий список из опций, перечисленных в выпадающем меню, затем объедините атрибуты value
в URL-адрес запроса, который извлекает json, содержащий всю информацию на странице. Тот же принцип применяется для добавления в другие выпадающие значения. Идентификаторы для каждого раскрывающегося списка - это атрибуты value
опций в раскрывающемся списке, которые отображаются в отображаемом URL-адресе, разделенном //
для каждого раскрывающегося списка.
import requests
from bs4 import BeautifulSoup as bs
url = 'https://www.accuform.com/product/getSku/danger-danger-authorized-personnel-only-MADM006/1/false/null//{}//WHFIw3xXmQx8zlz//6wr93DdrFo5JV//WdnO0RpwKpc4fGF'
startURL = 'https://www.accuform.com/safety-sign/danger-danger-authorized-personnel-only-MADM006'
res = requests.get(startURL)
soup = bs(res.content, 'lxml')
materials = [item['value'] for item in soup.select('#Wiqj7mb4rsAq9LB option')]
sizes = [item['value'] for item in soup.select('#WvXESrTyQjM3Ciw option')]
languages = [item['value'] for item in soup.select('#WUYWGMePtpmpmhy option')]
units = [item['value'] for item in soup.select('#W91eqaJ0WPXwe9b option')]
for material in materials:
data = requests.get(url.format(material)).json()
soup = bs(data['dataMaterialBullets'], 'lxml')
lines = [item.text for item in soup.select('li')]
print(lines)
print(data['dataPriceDisplay'])
# etc......
Образец JSON:
На моей машине произошел сбой следующего кода с кодом ошибки 161, что означает «неверный путь» (найдите его в winerror.h):
long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"),
0,KEY_QUERY_VALUE, &hk );
Затем я изменил вызов RegOpenKeyEx на Использовать «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ» (обратите внимание, что нет начальных слешей), и это сработало:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
HKEY hk;
// Notice that it's SOFTWARE instead of \\SOFTWARE:
long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"),
0,KEY_QUERY_VALUE, &hk );
if ( n == ERROR_SUCCESS ) {
cout << "OK" << endl;
}
else {
cout << "Failed with value " << n << endl;
}
}