Scrapy框架简介
Scrapy是一个用于网络抓取的快速高级框架,用于从网站上抓取结构化的数据。它提供了多种类型的爬虫(Spiders)来定义如何抓取页面(Page)以及如何从页面中提取结构化数据(Scraped Item)。
创建一个Scrapy项目
首先,我们需要安装Scrapy。如果你还没有安装,可以通过pip来安装:
pip install scrapy
然后,我们可以创建一个新的Scrapy项目。例如,我们创建一个名为my_scrapy_project
的项目,并定义一个名为my_spider
的爬虫:
scrapy startproject my_scrapy_project
cd my_scrapy_project
scrapy genspider my_spider example.com
编写Spider类
在spiders/my_spider.py
文件中,你会看到一个基本的Spider类定义。Spider类是Scrapy用于爬取网站的类,它定义了如何爬取某个(或某些)网站。
import scrapy
class MySpider(scrapy.Spider):
name = 'my_spider' # 爬虫的名字
allowed_domains = ['example.com'] # 爬虫被允许爬取的域名列表
start_urls = ['http://www.example.com/some/page'] # 爬虫开始爬取的URL列表
def parse(self, response):
# 这是一个回调函数,Scrapy下载完start_urls中的URL后,会调用这个函数
# 这里我们只是简单地打印出页面的标题
title = response.css('title::text').get()
print(f"Title: {title}")
# 我们也可以发送新的请求来爬取其他页面
# 例如,我们假设页面中有一个链接列表,我们想要爬取这些链接指向的页面
for href in response.css('a::attr(href)').getall():
# 注意:这里只是一个示例,实际使用时你可能需要过滤掉一些不需要的链接
yield scrapy.Request(url=response.urljoin(href), callback=self.parse)
解释
- 导入Scrapy模块:首先,我们导入了Scrapy模块,这是使用Scrapy框架的基础。
- 定义Spider类:我们定义了一个名为
MySpider
的类,它继承了scrapy.Spider
。这个类定义了我们如何爬取网站。 - 设置Spider属性:
* `name`:爬虫的名字,用于在Scrapy命令行工具中识别爬虫。
* `allowed_domains`:一个包含爬虫被允许爬取的域名列表的字符串列表。当OffsiteMiddleware启用时(默认启用),这个列表用于过滤掉不在列表中的域名。
* `start_urls`:爬虫开始爬取的URL列表。Scrapy会依次下载这些URL,并将下载后的内容传递给Spider的`parse`方法(或其他指定的回调函数)进行处理。
- 编写parse方法:
parse
方法是Scrapy下载完start_urls
中的URL后调用的回调函数。在这个方法中,我们可以使用Scrapy提供的选择器(如XPath或CSS选择器)来从页面中提取数据。在这个示例中,我们只是简单地打印出页面的标题。 - 发送新的请求:在
parse
方法中,我们还可以使用scrapy.Request
对象来发送新的请求,以爬取其他页面。在这个示例中,我们假设页面中有一个链接列表,我们想要爬取这些链接指向的页面。因此,我们遍历了页面中的所有链接,并使用scrapy.Request
对象发送了新的请求。注意,我们使用response.urljoin(href)
来确保链接是完整的(即包含域名和路径)。我们还指定了回调函数为self.parse
,这意味着当新的请求被下载后,Scrapy会再次调用parse
方法来处理新的页面。
运行爬虫
要运行爬虫,你可以使用Scrapy命令行工具。在项目的根目录下(即包含scrapy.cfg
文件的目录),运行以下命令:
scrapy crawl my_spider
这将启动Scrapy引擎,并开始爬取start_urls
中指定的URL。Scrapy会下载这些URL的内容,并将内容传递给MySpider
类的parse
方法进行处理。你可以在控制台上看到打印出的页面标题。
扩展内容
当然,上述示例只是一个非常基础的Scrapy爬虫。在实际使用中,你可能需要处理更复杂的情况,如处理登录验证、处理
处理结果:
Scrapy框架简介
Scrapy是一个用于网络抓取的快速高级框架,用于从网站上抓取结构化的数据。它提供了多种类型的爬虫(Spiders)来定义如何抓取页面(Page)以及如何从页面中提取结构化数据(Scraped Item)。
创建一个Scrapy项目
首先,我们需要安装Scrapy。如果你还没有安装,可以通过pip来安装:bash
bash
在spiders_my_spider.py
文件中,你会看到一个基本的Spider类定义。Spider类是Scrapy用于爬取网站的类,它定义了如何爬取某个(或某些)网站。
```python
class MySpider(scrapy.Spider)_
name = 'my_spider' # 爬虫的名字
allowed_domains = ['example.com'] # 爬虫被允许爬取的域名列表
start_urls = ['http___www.example.com_somepage'] # 爬虫开始爬取的URL列表
def parse(self, response)
这是一个回调函数,Scrapy下载完start_urls中的URL后,会调用这个函数
这里我们只是简单地打印出页面的标题
title = response.css('title_text').get()
print(f"Title {title}")
我们也可以发送新的请求来爬取其他页面
例如,我们假设页面中有一个链接列表,我们想要爬取这些链接指向的页面
for href in response.css('a_attr(href)').getall()
注意:这里只是一个示例,实际使用时你可能需要过滤掉一些不需要的链接
yield scrapy.Request(url=response.urljoin(href), callback=self.parse)
- 导入Scrapy模块:首先,我们导入了Scrapy模块,这是使用Scrapy框架的基础。
定义Spider类:我们定义了一个名为MySpider
的类,它继承了scrapy.Spider
。这个类定义了我们如何爬取网站。
设置Spider属性:
name
:爬虫的名字,用于在Scrapy命令行工具中识别爬虫。allowed_domains
:一个包含爬虫被允许爬取的域名列表的字符串列表。当OffsiteMiddleware启用时(默认启用),这个列表用于过滤掉不在列表中的域名。start_urls
:爬虫开始爬取的URL列表。Scrapy会依次下载这些URL,并将下载后的内容传递给Spider的parse
方法(或其他指定的回调函数)进行处理。
编写parse方法:parse
方法是Scrapy下载完start_urls
中的URL后调用的回调函数。在这个方法中,我们可以使用Scrapy提供的选择器(如XPath或CSS选择器)来从页面中提取数据。在这个示例中,我们只是简单地打印出页面的标题。
发送新的请求:在parse
方法中,我们还可以使用scrapy.Request
对象来发送新的请求,以爬取其他页面。在这个示例中,我们假设页面中有一个链接列表,我们想要爬取这些链接指向的页面。因此,我们遍历了页面中的所有链接,并使用scrapy.Request
对象发送了新的请求。注意,我们使用response.urljoin(href)
来确保链接是完整的(即包含域名和路径)。我们还指定了回调函数为self.parse
,这意味着当新的请求被下载后,Scrapy会再次调用parse
方法来处理新的页面。运行爬虫
要运行爬虫,你可以使用Scrapy命令行工具。在项目的根目录下(即包含scrapy.cfg
文件的目录),运行以下命令:
```bash扩展内容
当然,上述示例只是一个非常基础的Scrapy爬虫。在实际使用中,你可能需要处理更复杂的情况,如处理登录验证、处理