侧边栏壁纸
博主头像
拾起行

行动起来,活在当下

  • 累计撰写 5 篇文章
  • 累计创建 8 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

python爬虫脚本

栋栋拐
2025-09-18 / 1 评论 / 1 点赞 / 12 阅读 / 0 字
#用于发送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)

1

评论区