Скрапинг всех книг по теме (Books.toscrape.com)

Скрапинг с сайта Books.toscrape.com. Подскажите пользователю, по какой теме он хотел бы видеть доступные книги, например. Путешествия, научная фантастика и т. д. Убедитесь, что тема доступна на веб-сайте, и отобразите все названия книг и цены на книги в этой теме. Некоторые темы имеют более одной страницы. Убедитесь, что вы возвращаете все книги, связанные с этой темой.

Это мой первый просмотр веб-страниц, и мне нужна помощь в получении URL-адреса тематических страниц. Например, если тема «путешествия», ссылка http://books.toscrape.com/catalogue/category/books/travel_2/index.html но я не знаю, как на самом деле добраться до нее.

import requests
from bs4 import BeautifulSoup

topic = input("What topic do you want to see the available books for? ")

url = "http://books.toscrape.com/index.html"
response = requests.get(url)
soup=BeautifulSoup(response.content, 'html.parser')
links = soup.find_all('a', href=True)
for link in links:
    if topic.lower() in link:
        URL=link

Всякий раз, когда я запускаю его, URL-адрес не определяется, какое-то время я был в тупике.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы проверяете тему в ссылке, вы также должны проверить атрибут href: if topic.lower() in link['href']:. Также на сайте есть относительные ссылки, которые необходимо сочетать с вашей базовой ссылкой. Вы можете использовать urljoin вот так, чтобы решить проблему: full_url = urljoin(url, link['href']).

Обновленный код:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

topic = input("What topic do you want to see the available books for? ")

url = "http://books.toscrape.com/index.html"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
links = soup.find_all('a', href=True)

for link in links:
    if topic.lower() in link['href']:
        full_url = urljoin(url, link['href'])
        print(full_url)

Другие вопросы по теме