如何自己搭建Scrapy爬虫框架

news2024/11/24 14:32:22

前言
当你学了一段时间爬虫后,就会知道各种功能太多而且麻烦。还不如自己整理个框架方便的多。因此,从开始写爬虫程序开始,就会慢慢的接触到一些有关爬虫的框架、效率提升而且扩展也很方便。接下来我将会以Scrapy爬虫框架将我的学习过程记录下供大家参考指正。

Python惊喜福利点击跳转

这里写目录标题

  • 一、安装
    • 二、创建爬虫工程
      • 三、爬虫工程目录结构
      • 四、定义需要爬取数据字段
      • 五、创建一个爬虫文件

一、安装

$ pip install scrapy

二、创建爬虫工程

$ scrapy startproject wikiSpider

三、爬虫工程目录结构

wikiSpider项目文件夹的目录结构如下所示:

scrapy.cfg
- wikiSpider
    - __init__.py
  - items.py  
  - pipelines.py
  - settings.py
  - spiders
       - __init__.py

四、定义需要爬取数据字段

我们准备爬取页面的标题在items.py文件中,定义一个Article类,然后编写如下代码:

from scrapy import Item,Field
class Article(Item):
    title = Field()

五、创建一个爬虫文件

为了创建一个爬虫,我们需要在wikiSpider/wikiSpider/spiders/文件夹里增加一个 articleSpider.py文件。

在新建的articleSpider.py文件里面,写如下代码:

from scrapy.selector import Selector
from scrapy import Spider
from wikiSpider.items import Article

class ArticleSpider(Spider):
    name = 'article'
    allowd_domains = ["en.wikipedia.org"]
    start_urls = ['http://en.wikipedia.org/wiki/Main_Page','http://en.wikipedia.org/wiki/Python_%28programming_language%29']

    def parse(self,response):
        item = Article()
        title = response.xpath('//h1/text()')[0].extract()
        print("Title is : "+title)
        item['title'] = title
        return item

这个类的名称(ArticleSpider )与爬虫文件的名称(wikiSpider)是不同的, 这个类只是 在 wikiSpider 目录里的一员,仅仅用于维基词条页面的采集。

运行爬虫

你可以在wikiSpider主目录中用如下命令运行 ArticleSpider :

$ scrapy crawl article

这行命令会用ArticleSpider类中的定义的name调用爬虫。这个爬虫先进入start_urls里面的两个页面,收集信息,然后停止。

Scrapy支持用不同的输出格 式来保存这些信息,比如CSV、JSON 或XML文件格式,对应命令如下所示:

$ scrapy crawl article -o articles.csv -t csv 
$ scrapy crawl article -o articles.json -t json 
$ scrapy crawl article -o articles.xml -t xml

当然,你也可以自定义 Item 对象,把结果写入你需要的一个文件或数据库中,只要在爬虫的parse部分增加相应的代码即可。如果觉得内容还不错,分享给更多朋友,一起提升编程技能。

请添加图片描述

↓ ↓ ↓ 加下方名片找我,直接拿源码还有案例 ↓ ↓ ↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找符合条件,且不重复的数据 +++ EXCEL的数组公式(未完成)

查找符合条件,且不重复的数据 1 目标问题 查找第1列,月份为5月,并且第2列不重复的数据个数有2个条件 有的版本有唯一计数,有的没有 2 比较简单的方法 2.1 加辅助列,简单公式,其实逻辑是更清晰的 这里主要…

【数据结构】和栈一样简单的结构——队列

【数据结构】和栈一样简单的结构——队列 一、前言1、什么是队列?2、使用什么结构实现? 二、目标三、实现1、初始化工作2、入队2.1、图解思路2.2、代码实现 3、出队3.1、图解思路3.2、代码实现 4、打印队列(用于测试)5、返回队头元素6、返回队尾元素7、返…

Android工程师复盘小米、滴滴的面试全过程,网易offer已收入囊中

背景 时间过的真快,16年毕业到现在也有好几年了,最近面试试着投了几十家Android framework工程师的岗位,也面试了好几家,其中包括滴滴出行、小米、合众新能源、网易、最终收到了网易和滴滴offer,小米二面挂掉&#xf…

四、Eureka注册中心集群配置

目录 需要两个eureka server项目,之前已经有一个springcloud-eureka 1、在springcloud项目下新建一个聚合项目springcloud-eureka2 2、修改springcloud-eureka2的pom文件,引入eureka-server依赖 3、增加springcloud-eureka2的启动类,开启…

五、基于服务发现获取并访问远程接口

目录 1、在springcloud-order项目中新建controller供外部远程访问 2、在springcloud-member项目中新建controller去访问远程接口 3、运行springcloud-eureka、springcloud-member、springcloud-order项目的启动类 4、访问member服务的接口,通过member服务调用or…

WiFi(Wireless Fidelity)基础(十一)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…

python进阶--月考二

python进阶--月考二 (一)装饰器(二)创建名为express.py文件,编写以下推导式(25分)(三)创建名为process_test.py的文件,计算1-3000之间的水仙花数(…

xormplus是xorm的增强版,为xorm提供类似ibatis的配置文件及动态SQL支持

简介 xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常简便。本库是基于原版xorm的定制增强版本,为xorm提供类似ibatis的配置文件及动态SQL支持,支持AcitveRecord操作。 github地址:https://github.com/armingli/xorm //安装…

荷兰国旗问题与快速排序

实现: 当arr[i]小于等于num时,arr[i]和小于等于num区域下一个数进行交换,小于等于区域右扩一个位置,指针 i 指向下一个 当arr[i]大于num时,指针 i 指向下一个 指针 i 越界时完成 升级版本:将小于、等于、…

存在comsumer group且存在消费行为,但AdminClient获取不到消费offset值

AdminClient 中的listConsumerGroupOffsets获取不到consumergroup; 网上查找资料说: listConsumerGroupOffsets() 请求返回的消费位移信息未及时更新,仍是稍早时刻的状态。 由于 listConsumerGroupOffsets() 请求需要从 Broker 获取最新的位移信息,如果响应结果的更…

ABAP SAT使用说明

SAT简介 SAT是SAP提供的用来替代SE30的程序性能优化分析工具( runtime analysis),功能比SE30更加强大。 创建SAT变式-设置SAT运行属性,默认为default,可以参照创建一个自己的变式。 SAT变式说明 Size Limits: 设置文件最大容量…

【LeetCode: 279. 完全平方数 | 暴力递归=>记忆化搜索=>动态规划 | 背包模型】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Goby 漏洞更新 |商混ERP系统 DictionaryEdit.aspx 页面存在SQL注入

漏洞名称:商混ERP系统 DictionaryEdit.aspx 页面存在SQL注入 English Name:SQL injection exists on Lotus ERP DictionaryEdit.aspx pag CVSS core: 8.5 影响资产数:616 漏洞描述: 杭州荷花软件有限公司开发的商混ERP系统。…

开发板和虚拟机socket报错“connect error: No route to host”

学习socket编程时,将服务器程序运行在开发板上,将客户端应用程序运行在 虚拟机Ubuntu16.04 系统,服务器可以正常开启, 但客户端连接时, 报错“connect error: No route to host” 1、网上大多是以下情况: …

易智编译EaseEditing:计算机顶会不一定比SCI期刊更权威!

计算机SCI期刊和学术会议都是评估学术研究水平和影响力的重要指标,但在不同领域、不同学科、不同评价指标下可能会有不同的权威性。 在计算机科学领域,传统上认为顶级学术会议的影响力和权威性更高。 因为计算机科学发展较快,研究领域广泛&a…

【Linux】8. 环境变量

1. 环境变量的引入 先描述一个现象,我们在执行二进制可执行程序的时候,是需要找到其所在位置的(程序要运行必须先加载到内存,是因为冯诺依曼体系结构规定CPU只能从内存中读取数据),所以这也就是为什么我们在运行前带上./的原因&a…

洛谷P5717-三角形分类

洛谷P5717-三角形分类 题目 这道题更像是初中题,但是怎么能完整的按照题目的意思来解决呢,说实话这个题卡了我有一会儿,要做一次性做出这个题,我觉得需要搞清楚if-if 和if-else if-else if,试想这两个的区别是什么&am…

ChatGPT有意识吗?

​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ChatGPT是一个计算机程序,它没有意识。它只是根据预设的算法和规则来处理输入和输出。虽然它可以模拟人类的对话,但它没有自己的思想或感觉。它只是根据程序设…

ROS 下 激光扫描仪 YDLidar-G4 使用

环境配置: ubuntu20.04 LTS ROS noetic 编程工具:vs code,远程通过ssh访问 扫描仪:YDLidar-G4 YDLidar驱动: YDLidar SDK YDLidar ROS 功能包 1 . YDLidar-SDK通信协议 雷达扫描输出的数据以十六进制格式输出到通信…