pycharm爬虫模块(scrapy)基础使用

news2025/1/14 0:54:46

今天学了个爬虫。在此记录

目录

一.通过scrapy在命令行创建爬虫项目

二.判断数据为静态还是动态

三.pycharm中的设置

三:爬虫主体

四.pipelines配置(保存数据的)

五.最终结果


一.通过scrapy在命令行创建爬虫项目

1.首先需要在cmd中进入到python文件对应的文件夹目录下

2.下载scrapcy模块

(如果是在conda环境下的话直接配置就行了ps:(conda是款工具,里面有自带的python环境))

3.创建项目

scrapy startproject test (创建一个爬虫工程,名字为test2 (ps:前面那两一定得加,如果不指定目录默认安装在当前的路径下边指定目录的话按后面这样写scrapy startproject ⼯程名 [⼯程⽬录]))

进入pycharm中发现创建成功。ps:如果没使用ancoda,直接本机pycharm安装,这里面可能有些东西会标红,把鼠标放到红色的地方会弹出来个导包选项,导进去就行。

scrapy.cfg是最终部署爬⾍的配置⽂件

items.py设置要爬取的字段

pipelines.py设置保存爬取内容

settings.py设置⽂件,⽐如User-Agent spiders⽬录保存genspider⽣成的爬⾍⽂件

genspider表示⽣成爬⾍,example表示爬⾍名称,可以对应爬取⽹址域名的前缀,example.com是要爬取的⽹址

而后回到项目目录下创建爬虫文件

创建成功后,就会在spiders下看到创建的.py文件。其中,里面这两地址是可以改的,改成准备爬取的地址也可以在创的时候就改好,这里爬一个搜索 | 腾讯招聘这玩意。

二.判断数据为静态还是动态

创建好后,可以通过postman(一个软件,可以解析url的具体请求)对其进行分析,看看爬取类型是动态还是静态。(网页中分为静态爬取和动态爬取)通过f12查看页面源码,观察具体情况。

f12点开后,首先便将点击图中的网络,即可看到关于页面网络的相关信息(刚点击去应该是空的,会有个提示ctrl+R查看网络信息),而后点击fetch/xhr,这是网络中一个查看网页中异步请求的模块。(异步:说到异步处理就得提它兄弟,同步处理。(举例子,具体区别搜别的佬怎么写的)同步处理很好理解,就是一条一条请求顺序执行,第一条执行完才执行第二个。但这样就会出现一种情况,如果第一条是个很庞大的命令,那就要执行很久,就会导致长时间的等待,出现堵塞情况。而异步就是解决此问题,如果出现一条需要执行很长很久的命令或者任务,异步处理会先将其挂起,转而处理下一条命令。比如一条命令需要执行1000秒,异步请求就会先将其挂在后台一个叫任务队列的东西,先执行下一条数据。等到1000秒后才会执行前面这条挂起的数据。)由于js是单线程运行的(设计原因),只能一条一条执行,因此异步就变得非常关键。

通过刷新页面,这个页面就会出现几个数据包(报头)。其中就可以看到一条关于腾讯招聘的数据信息及其url,此时可以将其放到postman中获取具体的信息。

进入postman(下载很简单,默认ok就行),放入url进行一个发送,可以看到下面得到的响应数据,将其拖到最下面发现总行数为208行。因为要判断数据是静态还是动态,需要翻到这个网站页面的第二页查看情况。

发现其数据的总数依旧是208。正常情况来看,如果数据发生了变化,其所对应的代码量应该也是会出现变化的。但这里依旧是208,并没有改变,因此可以初步判断此处的数据是一个动态获取的数据,通过服务器内一些内部的调用来回显信息。

确定为动态数据后,可以先对url进行判断。可以发现这里只有index那么一个参数是有变化的(timestamp是个时间戳,判断时间用的,这里没啥用),因此后续爬取的时候只需要对index部分进行相关的更改即可。

确定数据类型后,则需要观察有哪些数据包的字段是可以爬取的,这里postman里可以直接看到,选取需要的数据进行爬取。(ps:有些网站postman可能无法直接将数据查出来,可以在上面的headers中添加一些refer,cookie来完成更详细的数据读取,还有些可能还有编码,需要去解)

三.pycharm中的设置

得到的需要的相关信息后,则要对pycharm中的爬虫模块进行配置,首先便是配置setting中的数据。

由于咱们是在爬取对方的数据,理论上来说这是违法的,并且直接进行爬取的话,对方网站也有相应的反爬措施,因此需要构造一些伪造的请求来对网站进行访问。这里也是从网上找了一些伪造的UA头,而后放在这个#user_agent下,后续进行调取来伪造我们是一个正常的网页对其进行访问。

而后进入middle-ware中间件,在download下对刚刚引入的ua头进行随机的引用。(为什么在download下引用是scrapy的工作原理,建议百度查查)

而后便在item下对所需要得到的数据进行简单的应用,表示⽤它来存储爬取到每⼀条职位信息对应字段的值,它继承的是scrapy.Item,这个是必须继承的,否则这些字段的值是⽆法保存到⾃定义的变量⾥⾯

将pipe这个注释取消掉(pipe是scrapy中的存储数据的管道,具体工作原理请百度),并且添加上

 "scrapy.downloadermiddleware.useragent.UserAgentMiddleware": None(作用,确保一开始中间件没有使用ua头,而是调用那些外部导入的伪造ua头)

三:爬虫主体

由于url过长,因此使用拼接的方法将其连起来。因为pageindex是翻页的信息,因此后续这个东西是要一直变的,所以把这个参数放到最后,方便后续的使用。再定义一个起始页,将它与url拼接(str的形式)。

这里需要先提前导入一下Test2中(我的项目名)中的items文件,导入items.py中的类,否则下面引用的时候会出现报错。(ps:这里出现红线没关系,也能正常使用)

这里便是爬虫方法中的一个主体,其中,刚初始化时parse这个爬虫函数是只有两个参数的,而实际使用的话该函数需要再加一个参数才能正常运行。因此搜索了一下函数文档,发现需要加上一个关键字的传递参数kwargs(前面的两个*是默认格式) 由于爬的数据都是字符串且都是json格式的,所以通过json.loads转换成一个反序列化的结构,从而更方便的得到key也就是数据(具体请查反序列化是啥 咱就一写作业的)。并使其存储导data_obj里面(这玩意叫a叫b都行),而count则是其中的总数据,posts则是数据存储的一个位置。里面有相关的数据信息。因此通过这个data_obj去取得data下面的Posts里面的数据以及count总数,并对此进行反复循环得到相关的数据。后面那一串便是通过item中定义的数据去与posts中的数据一一对应,最后通过yield将其循环反复得到数据。ps(这个网址也需要看一下,直接导入网址是无法成功的,这里选择将url进行一个简单的拼接得到(可以通过postman看到具体情况))

下面这些则是进行一个基本的页数判断。可以通过postman发现,总数据总共是有2882条,如果只是进行一个简单的+=判断,这个是无法得到最后的那几条数据的,会出现小数。因此这里通过累计加1,调用math.ceil这个函数(向上取整,举例:一个3.15的数据,通过这个函数,最终取值为4;一个18.33的数据,通过这个函数最终取值为19)因此通过该函数来得到数据,重新写入url,通过scrapy获得一个请求,拼接上相关的url地址,再写一个callback(回调方法),使整体定义的这个parse重新循环,接着爬取数据。(self可以理解成我的,这里self写在parse函数内,因此可以理解成parse的xxx,来确保引用的page_index和parse是属于parse的)

四.pipelines配置(保存数据的)

这里首先定义一个初始化的方法,通过写的方法去创造一个doucment.txt的文件(文件名随意)python中w的含义:打开一个文件只用于写⼊。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如 果该文件不存在,创建新文件。因此这里就算没有这个txt文件也没关系,而encoding则是确认编码形式。

dict_item=dict(item):将item对象转换成字典对象,后续使用字典去进行爬取

json.dump则是将此前反序列化的对象转换成一个序列化的文本(爬虫时将其反序列化是为了更加方便的得到数据中的值,而这里又将其序列化出来则是为了让输出的信息更加完整),并将其复制给text,加上ensure_acill确保是以文本的形式出现。而后将序列化后的text写入到文件中。

最后定义的close函数则是为了关闭原先定义的document.txt文本,python中 写入文件的话需要将其关闭,不然可能会出现一些异常。

五.最终结果

全部完成定义后,在命令行中通过scrapy crawl zuoye对其进行爬取,crawl为爬取的命令,zuoye则是创建的项目 就是那个name。所得的数据将会存入定义的document.txt文件中。

ps:有可能会出现以下错误,这个是由于python中一个叫twisted的配置文件版本导致的,可以选择加到最高版本或降点版本看看,如果还有问题可以尝试降低python的环境来进行配置。

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

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

相关文章

MySQL——运维

日志 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 查看日志位置: sho…

招商画册不会制作?这个教程收藏好

在制作招商画册过程中可能对于一些小型企业或刚刚起步的企业来说,招商画册的制作也不是一个难以克服的难题。本文将为您提供一些制作招商画册的技巧和建议。在制作招商画册前肯定是需要选择一款合适的在线制作工具,如FLBOOK 这个平台本就有海量的模板和设…

【Git教程】(十六)基于构建服务器的工作 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 基于构建服务器的工作 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现3.1 预备构建服务器3.2 构建服务器上的 Git3.3 比对本地开发版本与最后成功构建版本之间的差异3.4 基于构建历史的排错 4️⃣ 替代解决方案4.1 使用标签4.2 将构建历史放在中央版本库中 许多项目…

设计模式(六):原型模式

设计模式(六):原型模式 1. 原型模式的介绍2. 原型模式的类图3. 原型模式的实现3.1 创建一个原型接口3.2 创建具体原型3.3 创建一个数据缓存类3.4 测试 1. 原型模式的介绍 原型模式(Prototype Pattern)属于创建型模式&…

ctfshow web29-web40

命令执行 看清都过滤了些什么!! 知识点: web34:当;和()被过滤了就用语言结构,一般有echo print isset unset include require web37:data协议是将后面的字符串当成php代码执行,例如 /?cdat…

LabVIEW学习记录2 - MySQL数据库连接与操作

LabVIEW学习记录2 - MySQL数据库连接与操作 一、前期准备1.1 windows下安装MySQL的ODBC驱动 二、LabVIEW创建MySQL 的UDL文件三、LabVIEW使用UDL文件进行MySQL数据库操作3.1 建立与数据库的连接:DB Tools Open Connection.vi3.2 断开与数据库的连接:DB T…

如何通过ABAP将数据写回BPC模型

今天给大家安利一个标准方法,主要用于回写BPC模型数据,一般情况下,BPC模型数据的回写,标准的方式有数据抽取,直接抽取供数模型的数,利用BW标准转换方式进行供数,又或者通过逻辑脚本BADI的方式直…

【数据结构】哈希桶

目录 前言: 开散列(哈希桶) 开散列的概念 哈希桶的模拟实现 整体框架 查找 插入 删除 析构函数 前言: 闭散列线性探测缺点:一旦发生哈希冲突,所有的产生哈希冲突的数据连续存储在一块区域&#xff…

【Github】sync fork后,意外关闭之前提交分支的pr申请 + 找回被关闭的pr请求分支中的文件

【Github】sync fork后,意外关闭之前提交分支的pr申请 找回被关闭的pr请求分支中的文件 写在最前面原因解析提交pr,pr是什么?rebase 或者 merge 命令 找到分支中被删除的文件找到被关闭的提交请求pr方法1:在公共仓库被关闭的pr中…

NXP i.MX8系列平台开发讲解 - 3.9 Linux PCIe协议相关介绍(二)

目录 1. PCIe 传输层协议 2. TLP介绍 2.1 TLP包格式 2.2 TLP包的种类 2.3 TLP 包传输例子 2.4 TLP 路由规则 根据上一章的知识,对于PCIe的发展和基础知识有了大概了解,本章节将会讲解PCIe的一些工作原理,使用的协议,通信交互…

ubuntu 复制文件路径

前言 我打算搞一个ubuntu右键复制文件路径的插件,但是找不到,只能平替 这个配置,可以把文件拖拽到cmd窗口,然后就直接cmd输出文件路径 配置 cd ~ vim .bashrc 在文件结尾添加 cdd () { ddirname "$1"; echo …

【C++初阶】第八站:string类的模拟实现

目录 string类的模拟实现 经典的string类问题 浅拷贝 深拷贝 写时拷贝(了解) 构造函数 string的全缺省的构造函数: string的拷贝构造函数 传统写法 现代写法 string的赋值重载函数 传统写法 现代写法 string的无参构造函数: 遍历函数 op…

ASP.NET Core 3 高级编程(第8版) 学习笔记 03

本篇介绍原书的第 18 章,为 19 章 Restful Service 编写基础代码。本章实现了如下内容: 1)使用 Entity Framework Core 操作 Sql Server 数据库 2)Entity Framework Core 数据库迁移和使用种子数据的方法 3)使用中间件…

【黑马头条】-day11热点文章实时计算-kafka-kafkaStream-Redis

文章目录 今日内容1 实时流式计算1.1 应用场景1.2 技术方案选型 2 Kafka Stream2.1 概述2.2 KafkaStream2.3 入门demo2.3.1 需求分析2.3.2 实现2.3.2.1 添加依赖2.3.2.2 创建快速启动,生成kafka流2.3.2.3 修改生产者2.3.2.4 修改消费者2.3.2.5 测试 2.4 SpringBoot集…

机器学习作业3____决策树(CART算法)

目录 一、简介 二、具体步骤 样例: 三、代码 四、结果 五、问题与解决 一、简介 CART(Classification and Regression Trees)是一种常用的决策树算法,可用于分类和回归任务。这个算法由Breiman等人于1984年提出,它…

Clion连接MySQL数据库:实现C/C++语言与MySQL交互

确保你的电脑里已经有了MySQL。 1、找到MySQL的目录 2、进入lib目录 3、复制libmysql.dll和libmysql.lib文件 4、将这俩文件粘贴到你的clion项目的cmake-build-debug目录下 如果不是在这个目录下,运行时会出以下错误报错: 进程已结束,退…

火绒安全的应用介绍

火绒安全软件是一款集成了杀毒、防御和管控功能的安全软件,旨在为用户提供全面的计算机安全保障。以下是火绒安全软件的一些详细介绍: 系统兼容性强:该软件支持多种操作系统,包括Windows 11、Windows 10、Windows 8、Windows 7、…

AI预测福彩3D第9套算法实战化测试第3弹2024年4月25日第3次测试

今天继续进行新算法的测试,今天是第3次测试。好了,废话不多说了,直接上图上结果。 2024年4月25日福彩3D预测结果 6码定位方案如下: 百位:6、4、3、7、2、8 十位:8、4、9、3、1、0 个位:7、6、9、…

Linux进程间通信 管道系列: 利用管道实现进程池(匿名和命名两个版本)

Linux进程间通信 管道系列: 利用管道实现进程池[匿名和命名两个版本] 一.匿名管道实现进程池1.池化技术2.搭架子3.代码编写1.创建子进程1.利用命令行参数传入创建几个子进程2.创建管道和子进程(封装Channel类)1.先描述2.在组织3.开始创建 2.封装MainProcess类3.控制子进程1.封装…

无限滚动分页加载与下拉刷新技术探析:原理深度解读与实战应用详述

滚动分页加载(也称为无限滚动加载、滚动分页等)是一种常见的Web和移动端应用界面设计模式,用于在用户滚动到底部时自动加载下一页内容,而无需点击传统的分页按钮。这种设计旨在提供更加流畅、连续的浏览体验,减少用户交…