5.Scrapy

本文介绍了Scrapy网络爬虫框架的安装与使用,包括创建虚拟环境、安装依赖、初始化项目、创建简单爬虫、带规则抓取、定义Item、输出Item及数据处理的Item管线组件。Scrapy提供了一个整洁的框架,方便组织代码,支持日志管理和多种数据输出格式,适用于处理大型网站的抓取任务。
摘要由CSDN通过智能技术生成

网络爬虫开发中一个最好的框架:Scrapy。Scrapy提供了一个整洁的框架来帮你组织代码。
1.安装Scrapy
a.在D盘的新建的文件夹web_crawler,命令行窗口进入到该文件夹下,执行命令python -m venv crawler_env,创建虚拟环境crawler_env,然后执行命令crawler_env\Scripts\activate激活虚拟环境。
b.先安装wheel模块,pip install wheel,然后安装twisted模块,访问https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载适合自己环境的twisted安装包:Twisted-20.3.0-cp36-cp36m-win_amd64.whl(64位,python3.6),执行命令 pip install (将下载好的whl文件拖入),最后再执行命令pip install scrapy。命令行输入scrapy检验是否安装成功。(b步骤中的命令都在虚拟环境激活状态执行。)
在这里插入图片描述
蜘蛛初始化
一个蜘蛛就是一个 Scrapy 项目,和它的名称一样,就是用来爬网(抓取网页)的。这里用“蜘蛛”特指 Scrapy 项目,而用“爬虫”(crawler)表示“任意用或不用 Scrapy 抓取网页的程序”。
当前目录创建新的蜘蛛,执行命令:scrapy startproject wikiSpider
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.创建一个简易爬虫
在wikiSpider/spiders下新建文件article.py文件,代码如下:

# -*- coding: GBK -*-
import scrapy

class ArticleSpider(scrapy.Spider):
	name = 'article'
	
	def start_requests(self):
		urls = [
			'http://en.wikipedia.org/wiki/Python_%28programming_language%29',
			'https://en.wikipedia.org/wiki/Functional_programming',
			'https://en.wikipedia.org/wiki/Monty_Python']
		return [scrapy.Request(url=url, callback=self.parse) #Request类是一个http请求的类,请求的url,callback回调函数用于接受请求后的返回信息(response)
			for url in urls]
		
	def parse(self, response):
		url = response.url
		title = response.css('h1::text').extract_first()	#extract()返回的所有数据,存在一个list里。extract_first()返回这个list里的第一个值。
		print('URL is: {}'.format(url))
		print('Title is: {}'.format(title))

虚拟环境激活后进入wikiSpider/wikiSpider/spiders文件夹下,运行article蜘蛛,执行命令:scrapy runspider article.py。
在这里插入图片描述
start_requests函数是Scrapy定义的程序入口,用于生成 Scrapy 用来抓取网站的 Request
对象。Request类是一个http请求的类,请求的url,callback回调函数用于接受请求后的返回信息(response)。这里parse就是用户定义的回调函数。
extract()返回的所有数据,存在一个list里。
extract_first()返回的是一个string,是extract()结果中第一个值。
在处理包含多种内容的大型网站时,你可能需要为每种内容(像博客文章、新闻稿、文章
等)分配不同的 Scrapy item,每个具有不同的字段,但它们都在同一个 Scrapy 项目中运
行。项目里面的每个蜘蛛的名称必须唯一。
3.带规则的抓取
article蜘蛛不具备独立寻找新网页的能力,此小节用CrawlSpider完善它。article.py所在目录新建articles.py,代码如下:
蜘蛛运行时遍历wikipedia.org,然后保留所有含wikipedia.org域名的链接,打印网页的标题,并忽略所有的外链,当前页面抓取到的链接添加到后面的抓取里(follow=True)

# -*- coding: GBK -*-
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

class ArticleSpider(CrawlSpider):
	name = 'articles'
	allowed_domains = ['wikipedia.org']
	start_urls = ['https://en.wikipedia.org/wiki/Benevolent_dictator_for_life']
	rules = [Rule(LinkExtractor(allow=r'.*'), callback='parse_items',
		follow=True
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值