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
2
3
4
5
6
7
8
9
import scrapy

class MySpider(scrapy.Spider):
name = 'my_spider'
start_urls = ['https://www.example.com']

def parse(self, response):
# 提取数据或者跟随链接
pass

4. 提取数据

parse 方法中,你可以使用 CSS 或 XPath 选择器来提取数据:

Python

1
2
3
4
def parse(self, response):
titles = response.css('div.title::text').extract()
for title in titles:
yield {'title': title}

5. 存储数据

你可以将提取的数据存储为 JSON、CSV 或其他格式。例如,要保存为 JSON,你可以这样做:

Lua

1
scrapy crawl my_spider -o output.json

6. 处理链接和分页

Scrapy 可以跟随链接并处理多个页面。在 parse 方法中,你可以使用 response.follow 来跟随链接:

Python

1
2
for href in response.css('a::attr(href)').extract():
yield response.follow(href, self.parse)

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 选择器的完整教程:

基本选择器

  1. 通配符选择器:
    • * 选择所有元素。
  2. 元素选择器:
    • p 选择所有 <p> 元素。
  3. 类选择器:
    • . Classname 选择所有具有 class="classname" 的元素。
  4. ID 选择器:
    • #idname 选择具有 id="idname" 的元素。

组合选择器

  1. 后代选择器:

    • A B 选择所有属于 A 元素的后代的 B 元素。
  2. 子元素选择器:

    • A > B 选择所有 A 元素的直接子元素 B。
  3. 相邻兄弟选择器:

    • A + B 选择每个 A 元素后面的第一个 B 元素。
  4. 一般兄弟选择器:

    • A ~ B 选择所有跟在 A 元素后面的同级 B 元素。

属性选择器

  1. 基本属性选择器:

    • [attr] 选择所有具有 attr 属性的元素。
  2. 具有特定值的属性选择器:

    • [attr=value] 选择所有 attr 属性值为 value 的元素。
  3. 包含特定词汇的属性选择器:

    • [attr~=value] 选择属性值中包含单词 value 的元素。
  4. 以特定值开头的属性选择器:

    • [attr^=value] 选择属性值以 value 开头的元素。
  5. 以特定值结尾的属性选择器:

    • [attr$=value] 选择属性值以 value 结尾的元素。
  6. 属性值包含特定子串的选择器:

    • [attr*=value] 选择属性值中包含子串 value 的元素。

伪类和伪元素选择器

  1. : first-child 伪类:

    • A: first-child 选择每个父元素的第一个 A 子元素。
  2. : last-child 伪类:

    • A: last-child 选择每个父元素的最后一个 A 子元素。
  3. : nth-child (n) 伪类:

    • A: nth-child (2) 选择每个父元素的第二个 A 子元素。
  4. : nth-last-child (n) 伪类:

    • 选择从最后一个开始数的第 n 个子元素。
  5. : only-child 伪类:

    • 选择只有一个子元素的元素。
  6. :hover 伪类:

    • 选择鼠标悬停上的元素。
  7. : not (selector) 伪类:

    • 选择不匹配给定选择器的所有元素。
  8. ::before 伪元素:

    • 在元素内容前插入内容。
  9. ::after 伪元素:

    • 在元素内容后插入内容。

这只是 CSS 选择器的一部分,但涵盖了大多数常用选择器。更复杂的选择器和特定情境下的选择器可以在 CSS 规范或相关文档中查找。