Скрапинг с сайта 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-адрес не определяется, какое-то время я был в тупике.






Когда вы проверяете тему в ссылке, вы также должны проверить атрибут 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)