PYTHON爬虫学习(七) -- scrapy框架

基本使用:
	-创建一个工程:scrapy startproject xxxxx
	-cd xxxxx
	- 在spiders子目录中创建一个爬虫文件
			- scrapy genspider spiderName www.xxx.com
	- 执行工程
			- scrapy crawl spiderName  
- 持久化存储:
	- 终端指令:
		要求:只可以将parse方法的返回值存储到本地的文本文件中
		注意:存储的文本文件类型只可以为:'json','jsonlines','jl','csv','xml'等
		指令:scrapy crawl xxx -o filePath
		好处:简洁高效便捷
		缺点:局限性较强(可存储文本类型不多)
	- 基于管道
		- 编码流程:
			- 数据解析
			- 在item类中定义相关的属性
			- 将解析的数据封装存储到item类型的对象
			- 将item类型的对象提交给管道进行持久化存储操作
			- 在管道类的process_item中要将其接收到item对象中存储的数据进行持久化存储操作
			- 在配置文件中开启管道
		好处:通用性强
		缺点:麻烦
import scrapy


class SpidernameSpider(scrapy.Spider):
    #爬虫文件的名称:也就是该爬虫源文件的唯一标识
    name = 'spiderName'
    #允许的域名:用来限定start_urls列表中哪些url可以进行请求发送,一般注释掉
    #allowed_domains = ['www.xxx.com']
    
    #起始的url列表:该列表中存放的url会被scrapy自动进行请求的发送
    start_urls = ['http://www.baidu.com/']

    #用作于数据解析:response列表表示的就是请求成功后对应的响应对象
    def parse(self, response):
        print(response)

同时在setting中,需要配置如下信息:

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'#UA伪装

# Obey robots.txt rules
ROBOTSTXT_OBEY = False#是否遵从该反爬协议

#显示指定类型的日志信息
LOG_LEVEL = 'ERROR'#只显示错误的日志信息

爬取糗事百科示例

import scrapy


class QiushitestSpider(scrapy.Spider):
    name = 'qiushiTest'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        #需求:解析作者的名称+段子内容
        div_list = response.xpath('//div[@id="content-left"]/div')
        for div in div_list:
            #xpath返回的是列表,但是列表元素一定是Selector类型的对象
            #extract可以将Selector对象中data参数存储的字符串提取出来
            author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
            #列表调用了extract之后,则表示将列表中的每一个Selector对象中data对应的字符串提取了出来
            content = div.xpath('./a[1]/div/span//text()').extract()#如果标签里面有子标签,要加//text()才能拿全部内容
            content = ''.join(content)
            print(author,content)
        pass

基于管道存储

在这里插入图片描述
**加粗样式**
在这里插入图片描述
在这里插入图片描述

基于Spider的全站数据爬取

- 就是将网站中某板块下全部页码对应的页面数据进行爬取
- 需求:爬取笑话网某板块1-11页的照片名称爬出来
- 实现方式:
		- 将所有页面的url添加到start_urls列表(不推荐)
		- 自行手动进行请求发送:
				- 手动请求发送:
					- yield scrapy.Request(url,callback)--callback专门用于做数据解析
import scrapy


class XiaohuaSpider(scrapy.Spider):
    name = 'XiaoHua'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['http://www.521609.com/meinvxiaohua']

    #生成一个通用的url模板(不可变)
    #因为不同页面的地址只有部分编号不同,所以可以通过赋值是心啊
    url = 'http://www.521609.com/meinvxiaohua/list12%d.html'
    page_num = 2#从第二个页面才开始有数
    def parse(self, response):
        li_list = response.xpath('//*[@id="content"]/div[2]/div[2]/ul/li')
        for li in li_list:
            img_name = li.xpath('./a[2]/b/text()|./a[2]/text()').extract_first()
            print(img_name)
            
        #一个个赋值
        if self.page_num <= 11:
            #传进来要加self前缀
            new_url = format(self.url%self.page_num)
            self.page_num += 1
            #手动请求发送:callback回调函数是专门用作于数据分析的
            yield scrapy.Request(url = new_url,callback=self.parse)
        pass

Scrapy的五大核心组件

在这里插入图片描述
在这里插入图片描述

·引擎
	- 用来处理整个系统的数据流处理,触发事物(框架核心
·调度器
	- 用来接受引擎发过来的请求,压入队列中,并在引擎再次请求时返回,可以想象成一个URL的优先队列,让它来决定下一个要抓取的网址是哪个
·下载器
	- 用于下载网页内容,并将网页内容返回给spider
· spiders
	- 工具人,在特定网站中提取自己需要的信息,即所谓的实体
· 项目管道
	- 用于持久化存储,验证实体的有效性。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值