python очищает сайт с несколькими страницами

#python #web-scraping #python-requests

Вопрос:

Эй, как я могу изменить этот код, чтобы вводить каждую страницу и получать информацию с этого URL-адреса, который я хочу ( название книги и URL-адрес книги )

я написал ( с помощью Google ) этот код, но я хочу получить все книги со всех страниц ( 50 страниц )

 # import web grabbing client and
# HTML parser
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import requests 


# variable to store website link as string
booksURL = 'http://books.toscrape.com/'
 
# grab website and store in variable urlClient
urlClient = uReq(booksURL)
 
# read and close HTML
page_html = urlClient.read()
urlClient.close()
 
# call BeautifulSoup for parsing
page_soup = soup(page_html, "html.parser")
# grabs all the products under list tag
bookshelf = page_soup.findAll(
    "li", {"class": "col-xs-6 col-sm-4 col-md-3 col-lg-3"})

for books in bookshelf:
 
    # collect title of all books
    book_title = books.h3.a["title"]
    book_url = books.find("a")["href"]
    #books_url = books.h3.a["url"]
 
    print(book_title   "-"  booksURL book_url)
 
 

я пытался добавить этот код, но я не знаю, как добавить его в свой

 for i in range(51):      # Number of pages plus one 
    url = "https://books.toscrape.com/catalogue/page-{}.html".format(i)
    r = requests.get(url)
    soup = BeautifulSoup(r.content)
 

Ответ №1:

Это может сработать. Я удалил uReq , потому что предпочитаю использовать запросы 😉

 # import web grabbing client and
# HTML parser
from bs4 import BeautifulSoup as soup
import requests

for i in range(1, 51):      # Number of pages plus one
    url = "https://books.toscrape.com/catalogue/page-{}.html".format(i)
    response = requests.get(url)

    # call BeautifulSoup for parsing
    page_soup = soup(response.content, "html.parser")
    # grabs all the products under list tag
    bookshelf = page_soup.findAll(
        "li", {"class": "col-xs-6 col-sm-4 col-md-3 col-lg-3"})

    for books in bookshelf:
        # collect title of all books
        book_title = books.h3.a["title"]
        book_url = books.find("a")["href"]

        print(book_title   " - "   book_url)