Scrapy框架入门:完整示例程序带你爬取书籍信息
# Scrapy初学者框架程序 下面是一个完整的Scrapy初学者示例程序,用于爬取书籍信息: ```python # 安装Scrapy: pip install scrapy # 创建项目: scrapy startproject bookscraper # 创建爬虫: scrapy genspider books books.toscrape.com # bookscraper/spiders/books.py import scrapy class BooksSpider(scrapy.Spider): name = 'books' # 爬虫名称 allowed_domains = ['books.toscrape.com'] # 允许的域名 start_urls = ['http://books.toscrape.com/'] # 起始URL def parse(self, response): # 提取书籍列表 for book in response.css('article.product_pod'): yield { 'title': book.css('h3 a::attr(title)').get(), 'price': book.css('div.product_price p.price_color::text').get(), 'rating': book.css('p.star-rating::attr(class)').get().split()[-1] } # 提取下一页链接并跟进 next_page = response.css('li.next a::attr(href)').get() if next_page: yield response.follow(next_page, callback=self.parse) # bookscraper/settings.py (部分重要设置) USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' ROBOTSTXT_OBEY = True # 遵守robots.txt规则 FEED_FORMAT = 'json' # 输出格式 FEED_URI = 'books.json' # 输出文件名 ``` ## 运行方式 1. 创建项目:`scrapy startproject bookscraper` 2. 进入项目目录:`cd bookscraper` 3. 生成爬虫:`scrapy genspider books books.toscrape.com` 4. 将上述代码复制到生成的spider文件中 5. 运行爬虫:`scrapy crawl books` ## 代码说明 - `parse`方法是处理响应并提取数据的核心方法 - `response.css`使用CSS选择器提取数据 - `yield`返回提取的数据或新的请求 - 爬虫会自动处理分页 ## 三条额外需要注意的逻辑点 1. 网站可能有反爬机制,需要合理设置下载延迟和User-Agent 2. 提取数据时要考虑字段可能不存在的情况,使用`.get()`比直接提取更安全 3. 分页处理时要确保URL拼接正确,`response.follow`会自动处理相对URL ######[AI写代码神器 | 602点数解答 | 2025-06-07 13:18:24]
- "Scrapy-Redis-Sentinel 0.7.1 Version Conflict: How to Resolve Redis and Redis-Py-Cluster Mismatch"(阿里通义 | 245点数解答 | 2024-03-01 14:08:38)320
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)50
- Java:抽象类 Vehicle 及子类 Car、MotorBike 实战演示(讯飞星火 | 440点数解答 | 2024-06-06 23:18:54)322
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)371
- 用 Pandas 深入分析招聘数据:从数据读取到可视化全流程解析(GPT | 1539点数解答 | 2024-06-30 15:56:50)386
- 字符图形:字母正三角的Python实现(字节豆包 | 358点数解答 | 2026-04-02 14:17:17)31
- Python 实现打印字母正三角图形(字节豆包 | 360点数解答 | 2026-04-02 14:17:39)22
- 【入门】C++实现字母正三角字符图形打印(字节豆包 | 323点数解答 | 2026-04-02 14:18:02)18
- 入门级C++实现指定行数蝴蝶结形状输出(字节豆包 | 554点数解答 | 2026-04-02 14:23:27)27
- 【入门】C++ 实现输出蝴蝶结形状图形(字节豆包 | 412点数解答 | 2026-04-02 14:25:38)23
- 【C++ 入门】求使 1+1/2+1/3+…+1/n 大于 X 的 n 值(字节豆包 | 318点数解答 | 2026-04-12 13:38:26)16
- 入门级数据分析:C++实现军事信息加密数字解析(字节豆包 | 291点数解答 | 2026-04-12 13:39:21)16