【Python】使用Scrapy 网络爬虫框架Demo

2023-05-16

安装

使用PyCharm安装,进入到PyCharm -> Preferences -> Project Interpreter,点击加号
在这里插入图片描述
查询框输入‘Scrapy’,点击‘Install Package’
在这里插入图片描述

使用shell调试工具

  1. 使用Scrapy提供的shell调试工具来抓取网页信息, 以爬取我的博客为例,如下
MAC-53796:PycharmProjects gcui$ scrapy shell https://blog.csdn.net/galen2016
...
...
...
[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x10672f050>
[s]   item       {}
[s]   request    <GET https://blog.csdn.net/galen2016>
[s]   response   <200 https://blog.csdn.net/galen2016>
[s]   settings   <scrapy.settings.Settings object at 0x106817090>
[s]   spider     <DefaultSpider 'default' at 0x106bab490>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request and update local objects
[s]   shelp()           Shell help (print this help)
[s]   view(response)    View response in a browser
>>>

可以看到返回200,说明抓取网页信息成功了。
注意,如果返回403,可能是网页开启了“防爬虫’,可以让Scrapy伪装成浏览器来解决,即在发送请求时添加User-Agent头,将User-Agent的值设置为浏览器发送请求的User-Agent。可以在浏览器的开发者模式中查到User-Agent。
例如,可以使用如下命令让Scrapy伪装成Chrome浏览器来开启shell调试

scrapy shell -s USER_AGENT='Mozilla/5.0' https://blog.csdn.net/galen2016
  1. 在Scrapy的shell控制台调用response的xpath()方法来获取Xpath匹配的节点,如获取博客的标题:
>>> response.xpath('//article//h4/text()').extract()
['PyCharm上传本地项目到GitLab - MacOS版', '【Docker】Docker运行Web UI自动化Demo', '[Mac] selenium打开Chrome浏览器', 'Python-常用的正则表达式', 'Docker - Dockerfile指令', '【Docker】docker容器管理总结', 'Postman/Newman+Docker+Jenkins/Pipeline 做接口自动化测试', 'Docker运行Postman/Newman', 'Docker -删除镜像(image)', '【Pytest】fixture使用request传参,结合parametrize', '【Pytest】使用Allure测试报告', '域名系统DNS 总结', 'Python - 日期、时间和日历操作', 'Python -日志模块使用', '动态主机配置协议DHCP', '2019年总结  - 收获很多', 'MacBook 复制文件和文件夹路径', '【Appium】Android Toast捕获', '【Appium】使用uiautomator定位元素', 'xpath不等于、不包含的写法']
>>>

创建Scrapy项目

  1. 选择一个目录,在命令行输入:scrapy startproject xxxx,最后一个参数是项目名,如下
MAC-53796:PycharmProjects gcui$ scrapy startproject BlogSpider
New Scrapy project 'BlogSpider', using template directory '/usr/local/lib/python3.7/site-packages/scrapy/templates/project', created in:
    /Users/gcui/PycharmProjects/BlogSpider

You can start your first spider with:
    cd BlogSpider
    scrapy genspider example example.com
MAC-53796:PycharmProjects gcui$
  1. 用PyCharm打开该项目,可以看到项目的目录如下:
    在这里插入图片描述
    scrapy.cfg: 项目的总配置文件,通常无需修改
    BlogSpider/items.py: 用于定义项目用到的Item类,也就是一个数据传输对象,需要由开发者来定义
    BlogSpider/pipelines.py: 项目的管道文件,负责处理爬取到的信息,需要由开发者来编写
    BlogSpider/setting.py: 项目的配置文件
    BlogSpider/spiders: 在该目录下存放项目所需的蜘蛛–负责抓取项目感兴趣的信息。

Scrapy开发步骤

  1. 定义Item类,定义被爬取对象的属性,如果博客标题、发布时间、阅读量等,在item.py中定义,如下:
import scrapy


class BlogspiderItem(scrapy.Item):
    # 博客标题
    title = scrapy.Field()
    # 发布时间
    publish_date = scrapy.Field()
    # 阅读量
    read_count = scrapy.Field()

  1. 编写Spider类,将该Spider类文件放在spiders目录下,然后用XPath或CSS来提取HTML页面中感兴趣的信息。
    Scrap提供了scrapy genspider命令,可以直接生成Spider类。先进入到BlogSpider目录下,然后运行:
MAC-53796:BlogSpider gcui$ scrapy genspider galen__blogs 'blog.csdn.net/'
Created spider 'galen__blogs' using template 'basic' in module:
  BlogSpider.spiders.galen__blogs
MAC-53796:BlogSpider gcui$ 

以上命令在BlogSpider/spiders目录下生成了galen_blogs.py, 如下图:
在这里插入图片描述
重写Spider类,主要是将要爬取的各页面URL定在start_url列表中,然后在parse方法中通过XPath或CSS提取感兴趣的信息,如下:

import scrapy
from BlogSpider.items import BlogspiderItem


class GalenBlogsSpider(scrapy.Spider):
    # 定义该Spider的名字
    name = 'galen__blogs'
    # 定义该Spider允许爬取的域名
    allowed_domains = ['blog.csdn.net/']
    # 定义该Spider爬取的首页列表
    start_urls = ['https://blog.csdn.net/galen2016']

    # 该方法负责提取response所包含的信息
    # response 代表下载器从start_urls中的每个URL下载得到的响应
    def parse(self, response):
        # 遍历页面中的所有 //article[@class="blog-list-box"] 节点
        for article in response.xpath('//article[@class="blog-list-box"]'):
            item = BlogspiderItem()
            item['title'] = article.xpath('.//h4/text()').extract_first()
            item['publish_date'] = article.xpath('.//div[@class="view-time-box"]/text()').extract_first()
            item['read_count'] = article.xpath('.//span[@class="view-num"]/text()').extract_first()
            yield item

最后一行代码使用yield语句将item对象返回给Scrapy引擎,然后Scrapy引擎将这些item收集起来传给项目的Pipeline。
3. 编写pipelines.py文件,目前只是简单的在控制台打印item数据,没有使用数据库。如下:

class BlogspiderPipeline:
    def process_item(self, item, spider):
        print('博客标题:', item['title'])
        print('发布时间:', item['publish_date'])
        print('阅读量:', item['read_count'])

Scrapy引擎会自动将Spider捕获的所有item逐个传给process_item(self, item, spider)方法,因此该方法只需处理单个的item即可。
4. 修改settings.py文件,将如下行取消注释

ITEM_PIPELINES = {
   'BlogSpider.pipelines.BlogspiderPipeline': 300,
}
  1. 启动Spider,命令行进入到项目根目录下,输入如下命令:
MAC-53796:BlogSpider gcui$ scrapy crawl galen__blogs

最后一个参数 galen_blogs就是前面定义的Spider名称。运行上面命令之后,可以获取如下结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】使用Scrapy 网络爬虫框架Demo 的相关文章

  • ubuntu20.04更换阿里的软件源

    新安装的ubuntu20 04的软件源是使用的国外的源 xff0c 因此在使用apt安装软件时速度并不怎么快 xff0c 建议大家更换为国内的源 xff0c 这样在使用apt安装软件时速度会有明显的提升的 ubuntu20 04 apt的配
  • mpi运行窗口无反应或者闪退

    原因有三 1 xff0c 服务未启动 2 xff0c 系统防火墙拦截
  • Newtonsoft.Json使用,C# Json文件读取,写入

    用学校作为例子 xff0c 有学校名称 xff0c 学校下面有班级 xff0c 班级有名字 xff0c 班级下面有学生 xff0c 这里面有数组 xff0c 有字段 using System using System Collections
  • Motrix全能下载工具使用

    Motrix是一款界面简约 功能丰富 专业可靠的全能下载工具 先下载 CSDN下载 Motrix zip下载 官方下载地址 Motrix 打开Motrix xff0c 将种子文件放到这里 开始下载
  • ActiveMQ-JMS(五):ObjectMessage的安全问题

    安全问题 按照apache官网的说明 xff0c 为了避免收到恶意代码 xff0c 引入了安全机制 xff0c 只允许指定的包里的对象能够被传输 原文如下 xff1a ObjectMessage objects depend on Java
  • 剑指offer 03

    span class token keyword class span span class token class name Solution span span class token punctuation span span cla
  • 「得印度者,得天下」聊聊你不知道的印度在线视频江湖

    印度 xff0c 一个神奇古老的国度 千百年来 xff0c 恒河水鉴证了古印度王朝的兴衰更迭 xff0c 壮丽的历史文化 xff0c 和印度文明缘起缘灭的生死轮回 时光飞转 xff0c 来到公元 2018年 恒河水波澜不惊一切如昨 xff0
  • Trinity简介(1)--用于无参考基因组的转录组de novo组装

    一 Trinity简介 Trinity xff0c 是由 the Broad Institute 开发的转录组de novo组装软件 xff0c 由三个独立的软件模块组成 xff1a Inchworm Chrysalis和Butterfly
  • Trinity进行转录组组装(2))

    1 Trinity进行转录组组装 Trinity进行转录组组装的典型命令如下 opt biosoft trinityrnaseq r20131110 Trinity pl seqType fq JM 50G left sample1 1 c
  • python的两种退出方式

    os exit vs sys exit 转自 xff1a http www cnblogs com gaott archive 2013 04 12 3016355 html 概述 python的程序有两种退出方式 xff1a os exi
  • R语言数据类型转化

    R语言数据类型转化 转自 xff1a http www wangluqing com 2014 09 10 r share34 有时候 xff0c 对于一些问题 xff0c 需要进行数据类型之间的转换 R提供了基本类型转换函数以解决数据类型
  • ubuntu20.04安装中文输入法

    虽然搜狗的官网已经宣传说已经支持2004 2010 xff0c 但是支持的并不完美 xff0c 闪退 xff0c 打不出字各种问题不断 xff0c 所以本文带领大家安装几款能够正常使用的中文输入法 但是正在我要发这篇博客的时候 xff0c
  • R语言做柱状图

    R语言做柱状图 转自 xff1a http www phperz com article 16 0102 180120 html 条形图代表在与条成比例的变量的值的长度矩形条数据 R使用函数barplot 来创建柱状图 R能够绘制柱状图垂直
  • R语言 PCA(主成分分析)

    R语言 PCA 转自 xff1a http www cnblogs com longzhongren p 4300593 html 1 关键点 综述 xff1a 主成分分析 因子分析 典型相关分析 xff0c 三种方法的共同点主要是用来对数
  • 使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 转自 xff1a http bluewhale cc 2016 08 06 use pandas filter and sort html 筛选和排序是Excel中使用频率最多的功能 xff0c 通过这
  • linux 下安装blat软件

    linux 下安装blat软件 blat是一款很经典的比对工具 xff0c 与blast相比 xff0c 具有速度快 共线性输出比对结果等优点 但是 xff0c blat源码包里面的README文件写得很不清楚 xff0c 这里 xff0c
  • 基于统计的压缩算法:游程编码

    原网址 xff1a http www cnblogs com xudong bupt p 3761417 html 基于统计的压缩算法 xff1a 游程编码 1 游程编码概念 游程编码又称 运行长度编码 或 行程编码 xff0c 是一种统计
  • BWT (Burrows–Wheeler_transform)数据转换算法

    原网址 xff1a https blog csdn net luanzheng 365 article details 78575429 BWT Burrows Wheeler transform 数据转换算法 1 什么是BWT 压缩技术主
  • pip使用豆瓣的镜像源

    抄自 xff1a https www cnblogs com ZhangRuoXu p 6370107 html pip使用豆瓣的镜像源 豆瓣镜像地址 xff1a https pypi douban com simple 虽然用easy i
  • PyVCF

    抄自 xff1a https www cnblogs com nkwy2012 p 9204088 html vcf文件的全称是variant call file xff0c 即突变识别文件 xff0c 它是基因组工作流程中产生的一种文件

随机推荐

  • 【Kotlin 初学者】扩展-享受编程

    作者简介 xff1a CSDN博客专家 华为云 云享专家认证 系列专栏 xff1a Kotlin 初学者 学习交流 xff1a 三人行必有我师焉 xff1b 择其善者而从之 xff0c 其不善者而改之 目录 一 介绍 二 扩展函数 2 1
  • 【Kotlin 初学者】函数式编程

    作者简介 xff1a CSDN博客专家 华为云 云享专家认证 系列专栏 xff1a Kotlin 初学者 五星好评 xff1a 左侧点一下 网页端 xff0c 移动端 xff1a https bbs csdn net topics 6039
  • centos8.5 更新失败

    今天使用yum makecache的时候出现了Error Failed to download metadata for repo 39 base 39 Cannot download repomd xml Cannot download
  • 【Kotlin 初学者】Java和Kotlin互操作

    作者简介 xff1a CSDN博客专家 华为云 云享专家认证 系列专栏 xff1a Kotlin 初学者 五星好评 xff1a 左侧点一下 网页端 xff0c 移动端 xff1a https bbs csdn net topics 6039
  • Kotlin 基础知识汇总(知识与实践相结合)

    2个月的时间总算把 Kotlin 的基础知识写完了 xff0c 下面咱们看看具体内容 xff1a 学习 Kotlin 的必要性 Kotlin 初学者 为什么要学Kotlin Kotlin 初学者 打牢基础的重要性 运行环境 Kotlin 初
  • HashMap的产生与原理

    一 HashMap的诞生 1 1 数组 数组 xff1a 一片物理上连续的大小确定的储存空间 好处 xff1a 根据下标快速的查找和修改里面的内容 缺点 xff1a 大小确定 xff0c 无法修改 添加新的元素或者删除元素比较麻烦 数组的静
  • Android 数据存储(一)-文件存储

    目录 一 数据存储概念 二 应用程序专属文件存储 2 1 访问持久文件 2 2 将数据存储到文件 2 3 从文件中读取数据 2 4 查看文件列表 2 5 删除文件 三 缓存文件 cache目录下 3 1 创建缓存文件 3 2 删除文件 四
  • 回顾2021,展望2022 | 年终总结

    你付出多少努力 xff0c 就必有多少收获 一 回顾 2021 2021 年输出109篇文章 xff0c 收获 xff1a 博客专家认证 Android领域新星创作者认证 博客之星Top50 同时也在问答模块解决了部分小伙伴的问题 xff0
  • Android 数据存储(二)-SP VS DataStore VS MMKV

    一 SharedPreferences 不同于文件的存储方式 xff0c 如果要保存的键值集合相对较小 xff0c 则应使用SharedReferences API SharedReferences对象指向一个包含键值对的文件 xff0c
  • Jetpack DataStore 你总要了解一下吧?

    目录 一 DataStore 介绍 Preferences DataStore 和 Proto DataStore 二 Preferences DataStore 2 1 添加依赖 2 2 使用 Preferences DataStore
  • Android 数据存储(四)-Room

    目录 一 概述 1 1 描述 1 2 主要部件 二 创建 Room 2 1 添加依赖项 2 2 创建数据实体 2 2 1 设置 tableName or name 属性 2 2 2 设置主键 2 2 3 忽略字段 2 3 创建数据访问对象
  • Android 抛弃IMEI改用ANDROID_ID

    介绍 之前一直使用IMEI作为唯一标识符 xff0c 缺点就是需要权限 xff1a Android 10以前 xff0c 需要READ PHONE STATE权限 Android 10限制 xff0c 需要READ PRIVILEGED P
  • Android 单例模式必知必会

    目录 一 概念 1 1 单例类 1 2 优缺点 1 2 1 优点 1 2 2 缺点 二 创建单例模式的方法 2 1 饿汉式 2 2 懒汉式 2 2 1 懒汉式 非线程安全 2 2 2 懒汉式 线程安全 2 3 双重检验锁 2 4 静态内部类
  • 使用netinstall重置MIKROTIK RouterOS

    相信查看本文的读者手头应该有一台Mikrotik的路由产品 xff0c 本文中出现的RouterOS是指笔者拥有的一台家庭版路由器 非Routeros玩家可以忽略本文 下图就是笔者正在使用的一个Routeros路由器 我们在给Routero
  • BigDecimal 简单使用

    目录 为什么使用BigDecimal 解决方案 构造方法 类型转换 double 转 BigDecimal BigDecimal 转 String BigDecimal 转 double int long等 加减乘除取余 divide 舍入
  • Android Framework 启动流程必知必会

    课前预习 在了解启动流程之前先了解一下下面两个概念 1 子进程与父进程的区别 1 除了文件锁以外 其他的锁都会被继承 2 各自的进程ID和父进程ID不同 3 子进程的未决告警被清除 4 子进程的未决信号集设置为空集 2 什么是写时拷贝 co
  • ADB 操作命令及用法

    ADB 操作命令及用法 文章目录 ADB 操作命令及用法一 ADB是什么 xff1f 二 ADB有什么作用 xff1f 三 ADB命令语法单一设备 模拟器连接多个设备 模拟器连接4 1 基本命令4 1 1 查看adb的版本信息4 1 2 启
  • 研究生生涯的一些经验和感悟

    研究生生涯的一些经验和感悟 引言 写这篇博客前 xff0c 我不禁要感慨一下互联网分享所带来的好处 我这里讲的分享主要是指知识 技术和个人思想的分享 网络新闻媒体更多是传播一些资讯 xff0c 而这些资讯一般不涉及深入的技术 xff0c 深
  • PyCharm上传本地项目到GitLab - MacOS版

    登录GitLab 创建一个项目 填写项目名称 xff0c 选择显示级别 复制GitLab的这个项目地址 xff0c 后面会在PyCharm里面用到 PyCharm操作 从PyCharm打开本地项目 xff0c 然后创建本地代码仓库 xff0
  • 【Python】使用Scrapy 网络爬虫框架Demo

    安装 使用PyCharm安装 xff0c 进入到PyCharm gt Preferences gt Project Interpreter xff0c 点击加号 查询框输入 Scrapy xff0c 点击 Install Package 使