浅谈Scrapy网络爬虫框架的工作原理和数据采集
Scrapy框架概述
Scrapy是一个基于Python的高级网络爬虫框架,它的设计初衷是为了提高网络爬取效率和性能。同时,Scrapy支持多种数据提取和存储方式,包括JSON、XML和CSV等数据格式以及MySQL、MongoDB等多种数据存储方式。
Scrapy框架的工作原理
Scrapy的工作原理和其他网络爬虫框架类似,通常包括以下步骤:
-
发送HTTP请求:Scrapy通过发送HTTP请求来获取目标网站上的数据。
-
解析HTML响应:Scrapy通过解析目标网站的HTML响应来获取数据。
-
数据处理:Scrapy通过多种方式对获取的数据进行处理,例如数据清洗、数据筛选。
-
数据存储:Scrapy支持多种数据存储方式,将获取到的数据存储在指定的存储介质中。
简单来说,Scrapy框架通过向目标网站发送HTTP请求获取HTML响应,再通过解析HTML响应来获取需要采集的数据。之后对获取的数据进行清洗和处理,最后将其存储在指定的数据存储介质中。
Scrapy框架的数据采集示例
下面我们通过两个示例来介绍Scrapy框架的数据采集过程。
示例1:爬取豆瓣电影TOP250
首先,我们需要创建一个Scrapy项目,并定义数据模型(Item)和数据提取规则。下面是一个数据模型示例:
class MovieItem(Item):
title = scrapy.Field()
link = scrapy.Field()
rating = scrapy.Field()
cover = scrapy.Field()
category = scrapy.Field()
country = scrapy.Field()
language = scrapy.Field()
director = scrapy.Field()
actor = scrapy.Field()
introduction = scrapy.Field()
然后,在Scrapy的spider中定义数据提取规则,具体规则如下:
class DoubanSpider(scrapy.Spider):
name = 'douban'
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
items = []
movies = response.css('.item')
for movie in movies:
item = MovieItem()
item['title'] = movie.css('.title::text').extract_first()
item['link'] = movie.css('.hd a::attr(href)').extract_first()
item['rating'] = movie.css('.rating_num::text').extract_first()
item['cover'] = movie.css('.pic img::attr(src)').extract_first()
item['category'] = movie.css('.bd p:nth-child(1)::text').extract_first().strip().split('/')[0]
item['country'] = movie.css('.bd p:nth-child(1)::text').extract_first().strip().split('/')[1]
item['language'] = movie.css('.bd p:nth-child(1)::text').extract_first().strip().split('/')[2]
item['director'] = movie.css('.bd p:nth-child(2)::text').extract_first().strip().split(':')[1]
item['actor'] = movie.css('.bd p:nth-child(3)::text').extract_first().strip()
item['introduction'] = movie.css('.bd p:nth-child(2).quote::text').extract_first().strip()
items.append(item)
return items
最后,在Scrapy项目目录下执行以下命令启动爬虫即可:
scrapy crawl douban -o douban.csv
示例2:爬取拉勾网招聘信息
首先,我们需要创建一个Scrapy项目,并定义数据模型(Item)和数据提取规则。下面是一个数据模型示例:
class JobItem(Item):
title = scrapy.Field()
company = scrapy.Field()
salary = scrapy.Field()
location = scrapy.Field()
experience = scrapy.Field()
education = scrapy.Field()
category = scrapy.Field()
tags = scrapy.Field()
link = scrapy.Field()
time = scrapy.Field()
然后,在Scrapy的spider中定义数据提取规则,具体规则如下:
class LagouSpider(scrapy.Spider):
name = 'lagou'
allowed_domains = ['lagou.com']
start_urls = ['https://www.lagou.com/']
def start_requests(self):
for keyword in self.settings.get('KEYWORDS'):
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
headers = {
'Referer': 'https://www.lagou.com/',
'User-Agent': self.settings.get('USER_AGENT'),
'X-Requested-With': 'XMLHttpRequest'
}
formdata = {
'first': 'true',
'pn': '1',
'kd': keyword
}
yield scrapy.FormRequest(url=url, headers=headers, formdata=formdata, callback=self.parse)
def parse(self, response):
items = []
data = json.loads(response.text)
for job in data['content']['positionResult']['result']:
item = JobItem()
item['title'] = job['positionName']
item['company'] = job['companyFullName']
item['salary'] = job['salary']
item['location'] = job['city']
item['experience'] = job['workYear']
item['education'] = job['education']
item['category'] = job['firstType']
item['tags'] = ','.join(job['positionLables'])
item['link'] = 'https://www.lagou.com/jobs/' + str(job['positionId']) + '.html'
item['time'] = job['createTime']
items.append(item)
return items
最后,在Scrapy项目目录下执行以下命令启动爬虫即可:
scrapy crawl lagou -o lagou.csv
总结
本文介绍了Scrapy网络爬虫框架的工作原理和数据采集过程,并通过两个示例详细讲解了Scrapy框架的使用。使用Scrapy框架可以轻松快速地实现网络爬虫,并对采集到的数据进行多种方式的处理和存储。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Scrapy网络爬虫框架的工作原理和数据采集 - Python技术站