python爬虫——scrapy框架

本文介绍了Scrapy框架的基础知识和使用步骤,包括环境安装、创建工程、数据解析和持久化存储。在学习过程中,强调了如何解决Python3.7环境下安装问题,以及在设置.py中调整反爬机制。同时,文章还探讨了Scrapy数据解析中的xpath和extract方法,以及如何利用join()函数操作数据。最后,讨论了基于终端指令和管道的两种持久化存储方式,分析了它们的优缺点。
摘要由CSDN通过智能技术生成

scrapy框架

  • 什么是框架?
    • 是一个集成了许多功能并具有极强通用性的项目模板
  • 怎么学习框架?
    • 专门学习框架封装好的各种功能的详细用法
  • 什么是scrapy框架?
    • 爬虫封装好的一个明星框架。功能:高性能的持久化存储、异步的数据下载、高性能的数据解析、分布式
  • scrapy框架的基本使用
    • 环境的安装
      • windows:python3.8不存在问题
        • pip install wheel
        • 下载twisted地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
        • 安装twisted:pip install Twisted-20.3.0-cp38-cp38-win_amd64.whl(放在敲命令行所在的文件夹下)
        • pip install pywin32
        • pip install scrapy
      • 注意点:按照上述步骤安装时,python3.7会报错
        在这里插入图片描述
        解决办法:
        可能考虑到是python国内网络的问题,这时我们用国内的镜像源来加速。
        pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
    • 创建一个工程:scrapy startproject ***pro
    • 进入到爬虫项目中:cd ***pro
    • 在spiders子目录中创建一个爬虫文件
      • scrapy genspider spiderName www.xxx.com
    • 执行工程
      • scrapy crawl spiderName
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        练习中可以不遵从反爬机制
        在这里插入图片描述在setting.py配置文件中将ROBOTSTXT_OBEY改为False
        在这里插入图片描述
        在settings.py中添加LOG_LEVEL=‘ERROR’,只输出错位类型的日志

-代码块

import scrapy


class FirstSpider(scrapy.Spider):
    #爬虫文件的名称,也是爬虫源文件的唯一标识
    name = 'first'
    #允许的域名:用来限定start_urls列表中的哪些url可以进行请求发送
    #allowed_domains = ['www.baidu.com']
    #起始的url列表:该列表中存放的URL会被scrapy进行自动请求的发送
    start_urls = ['https://www.baidu.com/','https://cn.bing.com/']
    #用作于数据解析:response参数就是请求成功之后的响应对象
    def parse(self, response):
        print(response)

结果
在这里插入图片描述

  • Scrapy数据解析
    • xpath返回的是列表,但是列表元素一定是Selector类型的对象
    • extract可以将对象中的data参数存储的字符串提取出来
    • 列表调用了extract之后,则表示将列表中的每一个Selector对象中data对应的字符串提取了出来
# -*- coding: utf-8 -*-
import scrapy


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

    def parse(self, response):
        div_list = response.xpath('//div[@class="col1 old-style-col1"]/div')
        for div in div_list:
            #xpath返回的是列表,但是列表元素一定是Selector类型的对象
            #extract可以将Selector对象中的data参数存储的字符串提取出来
            #author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
            author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
            #列表调用了extract之后,则表示将列表中每一个Selector对象中data对应的字符串提取了出来
            text = div.xpath('./a[1]/div/span//text()').extract()
            text = ''.join(text)
            print(author, text)
  • join()函数

语法: ‘sep’.join(seq)

参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

返回值:返回一个以分隔符sep连接各个元素后生成的字符串
例子:text = ‘’.join(text)

  • 小技巧:
    在不知道发生了何种错误的情况下,可以用print(‘ERROR’)放置在代码不同的位置,判断哪一行代码没有输出即错误。

- scrapy持久化存储**

  • 基于终端指令的持久化存储
    • 要求:只可以将parse方法的返回值存储到本地文本文件中
    • 注意:持久化存储的文本文件类型只可以是’json’, ‘jsonlines’, ‘jl’, ‘csv’, ‘xml’, ‘marshal’, ‘pickle’
    • 指令:scrapy crawl XXX -o filepath
    • 优点:简单高效便捷
    • 缺点:局限性比较强(只可以存储到指定后缀的文本文件中)
  • 基于管道的持久化存储
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值