第四章 Scrapy框架的简单使用 2021-10-25

news/2024/7/19 10:18:31 标签: python, 爬虫, 数据挖掘

爬虫系列总目录

Scrapy框架的简单使用

  • 爬虫系列总目录
  • 一、 常用命令
    • 1.1. 全局命令
    • 1.2 项目命令
  • 二、 创建项目文件
    • 2.1 创建项目
    • 2.2 创建爬虫文件
  • 三、 Scrapy核心架构
    • 3.1 按功能划分
    • 3.2 工作流程图
    • 3.3 按文件介绍
  • 四、 运行程序
    • 4.1 爬虫脚本编写
    • 4.2 基于管道的持久化
    • 4.3 修改Settings 设置
    • 4.4 从main 函数启动()
    • 4.5 终端命令的数据持久化存储

Scrapy是用纯 Python 实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。安装命令 pip install scrapy

  1. scrapy基于事件的机制,异步存储方式极大的提高了爬虫的效率
  2. 配置简单,通过简单代码实现复杂爬虫

一、 常用命令

1.1. 全局命令

python"># 查看帮助(全部命令以及其描述) 
scrapy --help 
# 创建一个新的Scrapy项目(项目名不可以以数字开头) 
scrapy startproject <project_name> 
# 在当前文件夹或者当前项目,创建一个新的爬虫文件 
scrapy genspider example example.com 
# 运行一个爬虫文件 
scrapy runspider spider_name.py 
# 获取指定的URL,并且能够显示出获取的过程 
scrapy fetch url 
# 在浏览器中打开指定的URL 
scrapy view url 
# 查看Scrapy版本 参数-v会将关联模块一并输出 
scrapy version [-v]

1.2 项目命令

python"># 运行爬虫项目 
scrapy crawl xbqg(脚本名称)
# 测试本地硬件性能 
scrapy bench 
# 列出当前项目下的所有爬虫文件 
scrapy list

二、 创建项目文件

2.1 创建项目

python">scrapy startproject biquge

2.2 创建爬虫文件

python">cd biquge
# 创建scrapy爬虫文件
scrapy genspider xbqg www.xbiquge.la

三、 Scrapy核心架构

3.1 按功能划分

在这里插入图片描述

3.2 工作流程图

在这里插入图片描述

3.3 按文件介绍

---- scrapy.cfg 配置文件
---- 项目文件
---- ---- spiders 爬虫文件夹 爬虫代码文件
---- ---- pipelines.py 管道,将 item 字段文件中的字段进行持久化等操作
---- ---- setting 配置文件

四、 运行程序

4.1 爬虫脚本编写

  • response.xpath()利用xpath解析数据
  • extract() 返回一个包含有字符串的列表
  • extract_first() 返回列表中的第一个字符串,列表为空没有返回None

spider 文件夹内文件 xbqg.py

python">class XbqgSpider(scrapy.Spider):
    # 爬虫名必须唯一
    name = 'xbqg'
    # 允许的域名
    allowed_domains = ['www.xbiquge.la']
    # 开始采集的url
    start_urls = ['https://www.xbiquge.la/10/10489/']

    def parse(self, response):
        all_dd = response.xpath('//dl/dd')
        for dd in all_dd[1:11]:
            url = 'https://www.xbiquge.la'+dd.xpath('./a/@href').extract()[0]
            # 再次根据生成的url来调用callback参数后面的方法
            yield scrapy.Request(url=url, callback=self.parse_next)

    def parse_next(self, response):
        item = BiqugeItem()
        item['name'] = response.xpath("//div[@class='bookname']/h1/text()").extract()[0].replace(' ', '')
        item['content'] = ''.join(response.xpath("//*[@id='content']/text()").extract()).replace(u' ', '')
        yield item

4.2 基于管道的持久化

  • 在items.py文件中进行定义相关持久化属性
  • 爬虫文件中将解析的数据存储到Item类型对象中
  • 将Items类型对象提交给管道
  • 在管道文件中,接受爬虫文件提交过来的Items类型
  • 对持久化数据进行自定义形式存储
  • 在配置文件中打开管道机制: ITEM_PIPELINES

items

python"># item的本质是字典
class BiqugeItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 章节名字
    name = scrapy.Field()
    # 章节内容
    content = scrapy.Field()

Pipelines

python">class BiqugePipeline:
    def process_item(self, item, spider):
        self.t = open('./book/{}.txt'.format(item['name']), 'w', encoding='utf-8')
        self.t.write(item['content'])
        return item

    def close_spider(self, spider):
        self.t.close()

4.3 修改Settings 设置

python"># Obey robots.txt rules
# 是否遵守robot协议
ROBOTSTXT_OBEY = False

BOT_NAME = 'biquge'

SPIDER_MODULES = ['biquge.spiders']
NEWSPIDER_MODULE = 'biquge.spiders'

#增加请求头User-Agent 防止反爬 
DEFAULT_REQUEST_HEADERS = {}


# 分配给每个类的整型值,确定了他们运行的顺序,item 按数字从低到高的顺序,通过pipeline,
# 通常将这些数字 定义在0-1000范围内(0-1000随意设置,数值越低,组件 的优先级越高)
ITEM_PIPELINES = {
   'biquge.pipelines.BiqugePipeline': 300,
}

使用命令行启动 scrapy crawl xbqg

4.4 从main 函数启动()

创建main.py 文件, 跟scrapy.cfg 在同一层级下。也是命令行。在pycharm中从main启动可以实现debug。

python">from scrapy import cmdline 
cmdline.execute('scrapy crawl xbqg'.split())

4.5 终端命令的数据持久化存储

python"># csv格式 
scrapy crawl xbqg -o meiju.csv 
# json格式,默认为Unicode编码 
scrapy crawl xbqg -o meiju.json 
# json lines格式,默认为Unicode编码 
scrapy crawl xbqg -o meiju.jsonl 
# xml格式 
scrapy crawl xbqg -o meiju.xml

http://www.niftyadmin.cn/n/1857444.html

相关文章

python读取文件夹下文件名称_Python获取指定文件夹下的文件名

本文采用os.walk()和os.listdir()两种方法&#xff0c;获取指定文件夹下的文件名。 一、os.walk() 模块os中的walk()函数可以遍历文件夹下所有的文件。 os.walk(top, topdownTure, οnerrοrNone, followlinksFalse) 该函数可以得到一个三元tupple(dirpath, dirnames, filename…

上海嘉定上线自动驾驶网约车,《央视新闻》朱广权官方种草

内容提要&#xff1a;昨日上午&#xff0c;滴滴的自动驾驶汽车&#xff0c;面向上海公众开放试乘服务。用户可在「滴滴出行」App 上报名体验&#xff0c;真切地感受无人驾驶的快感。 原创&#xff1a;HyperAI超神经 关键词&#xff1a;滴滴 自动驾驶 路测城市 6 月 27 日&…

python shell常用命令_python和shell常用基本命令的对应关系

python和shell常用基本命令的对应关系 平时工作的过程中&#xff0c;我个人习惯用python写后端的逻辑&#xff0c;然后使用shell写一些Linux环境下面的脚本&#xff0c;对于python脚本的使用&#xff0c;其实还是比较少的&#xff0c;最近在尝试逼迫自己使用python来写脚本&…

《人民日报》刊登时评:《壮大国产工业软件,坚定自主创新信念》

By 超神经内容概要&#xff1a;《人民日报》在 2020 年 6 月 29 日第 19 版刊登了《壮大国产工业软件&#xff0c;坚定自主创新信念》&#xff0c;对近期国产工业软件面临的环境和日益紧张的局势&#xff0c;发表了评论文章。关键词&#xff1a;工业软件 人民日报作者&#xff…

render_notebook()结果没有图_RNA质量检测结果分析

有些小伙伴对RNA出现的结果可能不大清楚&#xff0c;这一期就是针对结果出现的各种问题进行的总结&#xff1f;实验室一般利用两种方式去查看&#xff1a;1、紫外微量分光光度计2、琼脂糖凝胶电泳下面就分别来介绍一下&#xff1a;1、微量分光光度计&#xff1a;A&#xff1a;使…

机器学习 K-Means 实现文本聚类 2021-10-30

人工智能总目录 新闻头条数据进行聚类分析人工智能总目录1. 数据集信息2. 数据预处理2.1 为向量化表示进行前处理2.2 TF-IDF2.3 Stemming2.4 Tokenizing2.5 使用停用词、stemming 和自定义的 tokenizing 进行 TFIDF 向量化3 K-Means 聚类3.1 使用手肘法选择聚类簇的数量3.2 Clu…

好莱坞科幻新片《b》,钦定 AI 机器人出演女主角!

内容提要&#xff1a;由日本机器人教父石黑浩&#xff0c;历时多年打造的 AI 机器人 Erica&#xff0c;被好莱坞选中&#xff0c;出演科幻大片《b》中的女主角。如果成功完成拍摄&#xff0c;将成为影史上的一大创举。 原创&#xff1a;HyperAI超神经 关键词&#xff1a;好莱坞…

06-面向对象,使用mysqli遍历数据库

<?phpheader("Content-type:text/html;charsetutf-8");//mysqli操作mysql数据库&#xff08;面向对象&#xff09;//1.创建mysqli对象$mysqlinew Mysqli("localhost","root","root","worddb");//验证是否okif($mysqli-&…