Введите запрос в строку поиска и очистите результаты - PullRequest
1 голос
/ 21 сентября 2019

У меня есть база данных с номерами ISBN разных книг.Я собрал их, используя Python и Beautifulsoup.Далее я хотел бы добавить категории к книгам.Существует стандарт, когда речь заходит о категориях книг.Сайт под названием https://www.bol.com/nl/ содержит все книги и категории в соответствии со стандартом.

Начальный URL: https://www.bol.com/nl/

ISBN: 9780062457738

URL после поиска: https://www.bol.com/nl/p/the-subtle-art-of-not-giving-a-f-ck/9200000053655943/

Класс HTML категории: <li class="breadcrumbs__item"

Кто-нибудь знает, как (1) ввести значение ISBN в строке поиска, (2) затем отправить поисковый запрос и использовать страницу для очистки?

Шаг (3) очистить всекатегории это то, что я могу сделать.Но я не знаю, как сделать первые 2 шага.

Код, который у меня есть для шага (2)

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

webpage = "https://www.bol.com/nl/" # edit me
searchterm = "9780062457738" # edit me

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(webpage)

sbox = driver.find_element_by_class_name("appliedSearchContextId")
sbox.send_keys(searchterm)

submit = driver.find_element_by_class_name("wsp-search__btn  tst_headerSearchButton")
submit.click()

Кодчто у меня пока что для шага (3)

import requests
from bs4 import BeautifulSoup

data = requests.get('https://www.bol.com/nl/p/the-subtle-art-of-not-giving-a-f-ck/9200000053655943/')

soup = BeautifulSoup(data.text, 'html.parser')

categoryBar = soup.find('ul',{'class':'breadcrumbs breadcrumbs--show-last-item-small'})

for category in categoryBar.find_all('span',{'class':'breadcrumbs__link-label'}):
    print(category.text)

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Вы можете написать функцию, которая возвращает категорию.Вы можете основать его на фактическом поиске, который страница приводит в порядок, и вы можете использовать GET.

import requests
from bs4 import BeautifulSoup as bs

def get_category(isbn): 
    r = requests.get(f'https://www.bol.com/nl/rnwy/search.html?Ntt={isbn}&searchContext=books_all') 
    soup = bs(r.content,'lxml')
    category = soup.select_one('#option_block_4 > li:last-child .breadcrumbs__link-label')

    if category is None:
        return 'Not found'
    else:
        return category.text

isbns = ['9780141311357', '9780062457738', '9780141199078']

for isbn in isbns:
    print(get_category(isbn))
0 голосов
/ 21 сентября 2019

Вы можете использовать selenium, чтобы найти поле ввода и выполнить цикл по вашим ISBN, введя каждый из них:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
d = webdriver.Chrome('/path/to/chromedriver')
books = ['9780062457738']
for book in books:
  d.get('https://www.bol.com/nl/')
  e = d.find_element_by_id('searchfor')
  e.send_keys(book)
  e.send_keys(Keys.ENTER)
  #scrape page here 

Теперь для каждой книги ISBN в books решение будет вводить значение вв поле поиска и загрузите нужную страницу.

...