使用 scrapy

Scrapy

写得比较清晰的博客
基础与框架 https://juejin.im/post/5ad41ff7f265da23945ff1a6
实践 https://www.cnblogs.com/wanghzh/p/5824181.html


重要的概念

  • Items
  • Pipelines
  • Spiders
  • Scheduler

解析页面:Selectors

https://doc.scrapy.org/en/latest/topics/selectors.html

  • 可以使用Scrapy自带的xpath和css
  • 也可以使用bs4等其他解析工具
对于xpath和css选择器的语法

https://blog.youkuaiyun.com/lanhaixuanvv/article/details/78565877
http://www.w3school.com.cn/cssref/css_selectors.asp
http://www.w3school.com.cn/xpath/

### 使用Scrapy框架进行网页爬虫开发 Scrapy 是一个强大的 Python 网络爬虫框架,用于从网站抓取数据并以结构化的方式提取信息。以下是关于如何使用 Scrapy 框架进行网页爬虫开发的详细说明: #### 1. 创建项目 首先,需要创建一个新的 Scrapy 项目。通过命令行执行以下命令来初始化项目: ```bash scrapy startproject project_name ``` 这将生成一个包含基本目录结构的 Scrapy 项目文件夹[^2]。 #### 2. 明确目标(编写 `items.py`) 在 `items.py` 文件中定义想要抓取的数据结构。例如,如果目标是从网站上抓取书籍信息,则可以定义如下内容: ```python import scrapy class BookItem(scrapy.Item): title = scrapy.Field() author = scrapy.Field() price = scrapy.Field() ``` 上述代码定义了一个名为 `BookItem` 的类,其中包含书籍标题、作者和价格三个字段[^2]。 #### 3. 制作爬虫(编写 `spiders/xxspider.py`) 接下来,在 `spiders` 文件夹下创建一个新的爬虫文件,并实现具体的爬取逻辑。例如,假设需要从某个网站获取书籍列表及其详情页链接,可以参考以下代码: ```python import scrapy from urllib.parse import urljoin class BooksSpider(scrapy.Spider): name = 'books_spider' allowed_domains = ['example.com'] start_urls = ['http://example.com/books'] def parse(self, response): # 获取每本书的链接 href_list = response.xpath("//div[@class='listBox']/ul/li/a/@href").extract() for href in href_list: book_url = urljoin(response.url, href) yield scrapy.Request(url=book_url, callback=self.parse_book_detail) # 分页处理 all_pages = response.xpath("//select[@name='select']/option/@value").extract() for page in all_pages: next_page_url = urljoin(response.url, page) yield scrapy.Request(url=next_page_url, callback=self.parse) def parse_book_detail(self, response): item = {} item['title'] = response.xpath("//h1/text()").get() item['author'] = response.xpath("//span[@class='author']/text()").get() item['price'] = response.xpath("//span[@class='price']/text()").get() yield item ``` 上述代码实现了两个主要功能:一是解析书籍列表页面,提取书籍详情页链接;二是解析书籍详情页,提取具体信息[^3]。 #### 4. 存储内容(编写 `pipelines.py`) 最后,在 `pipelines.py` 文件中定义数据存储逻辑。例如,可以将抓取到的数据保存到 JSON 文件或数据库中: ```python import json class JsonPipeline: def open_spider(self, spider): self.file = open('books.json', 'w') def close_spider(self, spider): self.file.close() def process_item(self, item, spider): line = json.dumps(dict(item)) + "\n" self.file.write(line) return item ``` 为了启用该管道,需要在 `settings.py` 文件中添加以下配置: ```python ITEM_PIPELINES = { 'project_name.pipelines.JsonPipeline': 300, } ``` #### 其他重要功能 - **Request 和 Response** 在 Scrapy 中,`Request` 对象表示一个 HTTP 请求,由 Spider 生成,由 Downloader 执行。`Response` 对象则表示服务器返回的响应。两者都支持扩展信息传递,例如通过 `meta` 参数[^4]。 - **调度器行为** 只有当调度器中不存在任何请求时,整个程序才会停止。此外,Scrapy 会自动重新下载失败的 URL[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值