Python爬虫之Spider类用法简单介绍
Spider类是Scrapy框架中最核心的类,其主要作用是定义如何爬取某些网站,并解析网页数据。下面将介绍Spider类的一些基本用法。
前置知识
在介绍Spider类之前,我们需要了解一些Scrapy框架的基本概念:
- Scrapy: 一个python web爬虫框架,旨在用最少的代码便捷地爬取web站点。
- Requests: 一个HTTP库,用来发送HTTP/1.1请求。用户友好。
- xpath: 一种可以在XML文档中查找信息的语言。
- css selector: 可以通过类似CSS的选择器来选取HTML元素。
Spider类的基本结构
每个Scrapy爬虫都是基于Spider类的。下面是一个简单的Spider爬虫的框架示例:
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
def parse(self, response):
pass
- name: 每个爬虫的唯一标识符
- allowed_domains: 允许爬取的域名列表
- start_urls: 爬取的起始URL列表
- parse: 解析爬取到的页面数据的方法
Spider类方法详解
start_requests()
在Spider类中,如果不定义start_urls,就必须定义一个start_requests()方法。start_requests()方法一般返回一个可迭代的Request对象,Scrapy会自动执行迭代请求,不断调用parse()方法。
class MySpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['example.com']
def start_requests(self):
return [scrapy.Request('http://www.example.com')]
def parse(self, response):
pass
parse()
parse()方法是Spider类最重要的方法,负责解析爬取到的网页数据,并返回处理后的数据。parse()方法中一般会使用xpath或css selector等方法来选取HTML元素。
class MySpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
def parse(self, response):
title = response.xpath('//title/text()').extract_first()
yield {'title': title}
以上代码会请求'http://www.example.com',并解析出网页标题,返回一个title字段的字典。
follow()
在爬虫爬取的网页中,如果存在链接,则可以使用follow()方法自动跟随链接进行递归爬取。
class MySpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
def parse(self, response):
# 提取页面中所有链接,follow链接并递归爬取
for href in response.css('a::attr(href)'):
yield response.follow(href, self.parse)
# 解析页面数据
title = response.xpath('//title/text()').extract_first()
yield {'title': title}
以上代码可以自动跟随页面中的链接进行递归爬取,直到所有网页都被爬取完毕。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫之Spider类用法简单介绍 - Python技术站