#用于发送HTTP请求,获取网页内容
import requests
#用于解析HTML文档,提取网页中的数据
from bs4 import BeautifulSoup
#用于将数据保存到Excel
import pandas as pd
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
}
# 获取所有页面的书籍信息
def get_all_books():
page_num = 1
books_data = []
while True:
# 构造每一页的URL
url = f'http://books.toscrape.com/catalogue/category/books/fantasy_19/page-{page_num}.html'
# 发送HTTP GET请求获取页面内容
response = requests.get(url, headers=headers)
# 如果页面不存在,跳出循环
if not response.ok:
print(f"页面 {page_num} 不存在,停止抓取")
break
print(f'正在处理第 {page_num} 页')
# 使用BeautifulSoup解析HTML文档
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有书籍标题元素
all_books = soup.find_all('h3')
# 如果当前页面没有书籍,说明已经到最后一页
if len(all_books) == 0:
print(f"第 {page_num} 页没有书籍,停止抓取")
break
print(f'第 {page_num} 页找到 {len(all_books)} 本书籍')
# 遍历并收集每个书籍标题
for book in all_books:
title_link = book.find('a')
if title_link and title_link.get('title'):
book_title = title_link.get('title')
books_data.append({
'页码': page_num,
'书籍名称': book_title
})
print(f" {book_title}")
# 处理下一页
page_num += 1
# 为了不给服务器造成太大压力,可以添加延时
# import time
# time.sleep(1)
return books_data
# 将数据保存到Excel文件
def save_to_excel(books_data, filename='books.xlsx'):
# 创建DataFrame
df = pd.DataFrame(books_data)
# 保存到Excel文件
df.to_excel(filename, index=False, engine='openpyxl')
print(f"\n数据已保存到 {filename} 文件中")
print(f"总共保存了 {len(books_data)} 本书籍信息")
# 调用函数获取所有书籍并保存到Excel
if __name__ == "__main__":
books = get_all_books()
save_to_excel(books)
版权归属:
栋栋拐
许可协议:
本文使用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》协议授权
评论区