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

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

目录

一.通过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的环境来进行配置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.4.15

代码&#xff1a;uart4.c #include "uart4.h"void uart4_config() {//使能GPIO\GPIOG\UART4的外设时钟RCC->MP_AHB4ENSETR | (0x1<<1);RCC->MP_AHB4ENSETR | (0x1<<6);RCC->MP_APB1ENSETR | (0x1<<16);//设置PB2和PG11为管脚复用功能//P…

游戏行业科普 (二)游戏是怎么做出来,怎么卖出去的?

游戏行业科普系列文章&#xff0c;大家可以关注起来&#xff0c;等我慢慢分享~~ 《蛋仔派对》 一、研运流程--游戏是怎么做出来的 一款游戏的开发和运营大体上可以分为预研立项、设计开发、测试调优、发行上线和成熟运营几个阶段。 1&#xff09;预研立项&#xff1a; 初始研…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/4/14]

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

Matlab|基于广义Benders分解法的综合能源系统优化规划

目录 1 主要内容 广义benders分解法流程图&#xff1a; 优化目标&#xff1a; 约束条件&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《综合能源系统协同运行策略与规划研究》第四章内容基于广义Benders分解法的综合能源系统优化规划&…

树莓派点亮双色LED

双色LED灯准确来说叫双基色LED灯,是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态 :灭,颜色1亮,颜色2亮,根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。 接线:将引脚S(绿色)和中间引脚(红色)连接到Raspberry Pi的GPIO接口上,对Raspberry…

针对MaxCompute优化案例分享

声明 原文来源&#xff1a;微信公众号&#xff1a;阿里云开发者 前言 MaxCompute 是阿里巴巴集团推出的一种大数据计算平台&#xff0c;用于处理海量数据和进行数据分析。它提供了高可靠性、高扩展性和高性能的数据处理能力&#xff0c;支持 SQL 查询、MapReduce 计算和机器…

1113. 红与黑--Flood Fill 算法

目录 1113. 红与黑--Flood Fill 算法---宽搜&#xff08;BFS&#xff09;或DFS&#xff09; 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 1.BFS 思路&#xff1a; 2.DFS 思路 方法一&#xff1a;&#xff08;BFS&#x…

hadoop最新详细版安装教程 2024 最新版

文章目录 hadoop安装教程 2024最新版提前准备工作用户配置安装 SSH Server免密登录设置编辑 SSH server 配置文件配置Java环境查看java 版本验证 环境变量设置安装Hadoop下载hadoop解压hadoop查看hadoop 版本hadoop 配置编辑编辑配置文件core-site.xml编辑配置文件hdfs-site.xm…

使用深度学习集成模型进行乳腺癌组织病理学图像分类

基于预训练的VGG16和VGG19架构训练了四种不同的模型&#xff08;即完全训练的 VGG16、微调的 VGG16、完全训练的 VGG19 和微调的 VGG19 模型&#xff09;。最初&#xff0c;我们对所有单独的模型进行了5倍交叉验证操作。然后&#xff0c;我们采用集成策略&#xff0c;取预测概率…

深度学习框架

深度学习框架 1 引言 在当今技术加速发展的时代&#xff0c;深度学习已经成为了人工智能领域内最为引人注目的子领域之一。其在图像识别、自然语言处理、自动驾驶等多个行业中的成功应用&#xff0c;已经证明了深度学习在解决复杂问题方面的巨大潜力。然而&#xff0c;深度学习…

package.java文件的作用

你查看springboot的源码&#xff0c;有很多类都有这个文件&#xff0c;在idea不能创建&#xff0c;因为不支持这种命名&#xff0c;只能用记事本创建后复制都项目中。 主要应用是给类添加正常&#xff0c;或者把公用的注解都放到这里&#xff0c;常量不合适&#xff0c;作用范…

动态消息系统设计

动态消息流是一个在你个人主页不同更定的故事列表&#xff0c;推特、mega和Instagram 的post消息都是典型的动态消息列表&#xff0c;和普通消息流系统的最大区别是消息流动态变化、实时更新&#xff0c;设计一个动态消息系统核心功能消息流的构建和消息的发布&#xff0c;需要…

蓝桥杯 — — 纯质数

纯质数 题目&#xff1a; 思路&#xff1a; 一个最简单的思路就是枚举出所有的质数&#xff0c;然后再判断这个质数是否是一个纯质数。 枚举出所有的质数&#xff1a; 可以使用常规的暴力求解法&#xff0c;其时间复杂度为&#xff08; O ( N N ) O(N\sqrt{N}) O(NN ​)&…

破译验证码reCAPTCHA 之 打码平台

由于登录需要验证码&#xff0c;除了日常的字符串&#xff0b;数字&#xff0c;此时就需要用第三方插件进行破译。 reCaptcha是Google公司的验证码服务&#xff0c;方便快捷&#xff0c;改变了传统验证码需要输入n位失真字符的特点。 1. reCAPTCHA 初识 reCaptcha是Google公司…

Oracle+11g+笔记(3)-SQL/Plus

Oracle11g笔记(3)-SQL/Plus 3、SQL/Plus 3.1 启动退出SQL/Plus > sqlplus 账号/密码数据库 # 示例 > sqlplus scott/tigerorcl> sqlplus /nolog -- 无日志登录&#xff1a;避免别人从日志中查询到登录信息 > conn soctt/socttorcl # 示例 > sqlplus /nolog &…

Numpy数组和列表list的区别

参考&#xff1a;Numpy Array vs List 在Python编程中&#xff0c;列表&#xff08;list&#xff09;和Numpy数组&#xff08;numpy array&#xff09;是两种常见的数据结构&#xff0c;它们都可以用来存储多个元素。但是它们在实际使用中有很大的区别&#xff0c;本文将详细比…

爬虫 | 垃圾处理设施数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目通过发送网络请求&#xff08;requests&#xff09;&#xff0c;从指定的 URL 获取垃圾处理设施的相关数据&#xff0c;并将数据保存到 CSV 文件中&#xff0c;以供后续分析和利用。 目录 一、项目结构 二、详细说明 三…

【详解算法流程+程序】DBSCAN基于密度的聚类算法+源码-用K-means和DBSCAN算法对银行数据进行聚类并完成用户画像数据分析课设源码资料包

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。 与划分和层次聚类方法不同&#xff0c;它将簇定义为密度相连的点的最大集合&#xff0c;能够把具有足够高密度的区域划分为簇&#xff0c; 并可在噪声的空间数据…

数据结构与算法——22.哈希算法

这篇文章我们来讲一下哈希表中较为关键的部分——哈希算法 目录 1.哈希算法的介绍 2.hash算法的使用 2.1 Object.hashCode 2.2 String.hashCode 3.关于哈希表及哈希算法的一些思考 1.哈希算法的介绍 问题&#xff1a;什么是哈希算法&#xff1f;哈希算法有哪些&#xff…

【Linux 驱动基础】设备树中断

# 前置知识 interrupts 文档 Specifying interrupt information for devices 1) Interrupt client nodes -------------------------Nodes that describe devices which generate interrupts must contain an "interrupts" property, an "interrupts-extende…