Scrapy简单用法
Scrapy 简单用法
1 / 1
Scrapy
是一个用于从网站抓取数据并提取结构化数据的开源框架。它是使用 Python 写的,所以熟悉 Python 对于使用 Scrapy 是很有帮助的。以下是一个简单的 Scrapy 教程,旨在帮助你开始使用这个强大的工具。
1. 安装 Scrapy
确保你已经安装了 Python,并使用以下命令安装 Scrapy:
pip install scrapy
2. 创建一个新的 Scrapy 项目
使用以下命令创建一个新项目:
scrapy startproject projectname
3. 定义一个爬虫
在 projectname/spiders
目录下,创建一个新的 Python 文件,例如 my_spider.py
,并定义你的爬虫:
Python
1 | import scrapy |
4. 提取数据
在 parse
方法中,你可以使用 CSS 或 XPath 选择器来提取数据:
Python
1 | def parse(self, response): |
5. 存储数据
你可以将提取的数据存储为 JSON、CSV 或其他格式。例如,要保存为 JSON,你可以这样做:
Lua
1 | scrapy crawl my_spider -o output.json |
6. 处理链接和分页
Scrapy 可以跟随链接并处理多个页面。在 parse
方法中,你可以使用 response.follow
来跟随链接:
Python
1 | for href in response.css('a::attr(href)').extract(): |
7. 中间件和管道
- 中间件 (middlewares) 允许你处理请求和响应。
- 管道 (pipelines) 允许你处理提取的数据。
你可以在项目设置中配置它们。
8. Scrapy Shell
Scrapy 提供了一个交互式 shell,这是一个很好的工具,可以帮助你测试数据提取代码。使用以下命令启动它:
Rust
1 | scrapy shell 'https://www.example.com' |
然后,你可以使用 CSS 或 XPath 选择器提取数据。
1 / 1
选择这个 class 里的内容 category-wrapper
1 / 1
如果你希望从 HTML 页面中选择 category-wrapper
类的内容,你可以使用 CSS 选择器或 XPath。
使用 CSS 选择器
在 Scrapy 中,你可以使用以下方式选择 category-wrapper
类的内容:
Python
1 | content = response.css('.category-wrapper::text').extract() |
如果 category-wrapper
包含了其他标签,并且你希望选择这些标签的内容,你可以这样:
Python
1 | content = response.css('.category-wrapper').extract() |
使用 XPath
使用 XPath 选择 category-wrapper
类的内容:
Python
1 | content = response.xpath('//div[@class="category-wrapper"]/text()').extract() |
再次,如果 category-wrapper
包含了其他标签,并且你希望选择这些标签的内容,你可以这样:
Python
1 | Content = response.Xpath ('//div[@class="category-wrapper"]'). Extract () |
选择完毕后,content
变量将包含所选择内容的列表。如果你知道只有一个这样的类,你还可以使用 extract_first ()
方法来直接获取第一个匹配项,而不是返回一个列表。
1 / 1
CSS 选择器完整教程
1 / 1
CSS(层叠样式表)选择器用于选择 HTML 元素,以便我们可以应用样式。在 web 抓取和文档操作库(如 Scrapy 和 Beautiful Soup)中,它们也经常用于选择特定的元素。以下是一个 CSS 选择器的完整教程:
基本选择器
- 通配符选择器:
*
选择所有元素。
- 元素选择器:
p
选择所有<p>
元素。
- 类选择器:
. Classname
选择所有具有class="classname"
的元素。
- ID 选择器:
#idname
选择具有id="idname"
的元素。
组合选择器
后代选择器:
A B
选择所有属于 A 元素的后代的 B 元素。
子元素选择器:
A > B
选择所有 A 元素的直接子元素 B。
相邻兄弟选择器:
A + B
选择每个 A 元素后面的第一个 B 元素。
一般兄弟选择器:
A ~ B
选择所有跟在 A 元素后面的同级 B 元素。
属性选择器
基本属性选择器:
[attr]
选择所有具有attr
属性的元素。
具有特定值的属性选择器:
[attr=value]
选择所有attr
属性值为value
的元素。
包含特定词汇的属性选择器:
[attr~=value]
选择属性值中包含单词value
的元素。
以特定值开头的属性选择器:
[attr^=value]
选择属性值以value
开头的元素。
以特定值结尾的属性选择器:
[attr$=value]
选择属性值以value
结尾的元素。
属性值包含特定子串的选择器:
[attr*=value]
选择属性值中包含子串value
的元素。
伪类和伪元素选择器
: first-child
伪类:A: first-child
选择每个父元素的第一个 A 子元素。
: last-child
伪类:A: last-child
选择每个父元素的最后一个 A 子元素。
: nth-child (n)
伪类:A: nth-child (2)
选择每个父元素的第二个 A 子元素。
: nth-last-child (n)
伪类:- 选择从最后一个开始数的第 n 个子元素。
: only-child
伪类:- 选择只有一个子元素的元素。
:hover
伪类:- 选择鼠标悬停上的元素。
: not (selector)
伪类:- 选择不匹配给定选择器的所有元素。
::before
伪元素:- 在元素内容前插入内容。
::after
伪元素:- 在元素内容后插入内容。
这只是 CSS 选择器的一部分,但涵盖了大多数常用选择器。更复杂的选择器和特定情境下的选择器可以在 CSS 规范或相关文档中查找。