Python爬虫学习笔记(十)————Scrapy

news2024/10/7 8:23:15

目录

1.scrapy是什么?

2.安装scrapy

3. scrapy项目的创建以及运行

(1)创建scrapy项目:

(2)项目组成:

(3)创建爬虫文件:

        ①跳转到spiders文件夹中去创建爬虫文件   

        ②scrapy genspider爬虫文件的名字 网页的域名

(4)爬虫文件的基本组成:

(5)运行爬虫文件:

(6)实例

①百度

②58同城

③汽车之家

4.scrapy架构组成

(1)引擎                     

(2)下载器                   

(3)spiders                 

(4)调度器                   

(5)管道(Item pipeline)

 5.scrapy工作原理

6.日志信息和日志等级

(1)日志级别:

(2)settings.py文件设置:

7.scrapy的post请求

(1)重写start_requests方法:

(2)start_requests的返回值:

8.代理

​​​​​​​(1)到settings.py中,打开一个选项

(2)到middlewares.py中写代码


1.scrapy是什么?

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理 或存储历史数据等一系列的程序中。

2.安装scrapy

 pip install scrapy

安装过程中出错:

                    如果安装有错误!!!!

                    pip install Scrapy

                    building 'twisted.test.raiser' extension

                    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual‐cpp‐build‐tools

解决方案:

                    http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

                    下载twisted对应版本的whl文件(如我的Twisted‐17.5.0‐cp36‐cp36m‐win_amd64.whl),cp后面是 python版本,amd64代表64位,运行命令:

                    pip install C:\Users\...\Twisted‐17.5.0‐cp36‐cp36m‐win_amd64.whl

                    pip install Scrapy

如果再报错

                    python ‐m pip install ‐‐upgrade pip

如果再报错 win32

解决方法:

                    pip install pypiwin32

再报错:使用anaconda

                    使用步骤:

                            打开anaconda

                            点击environments

                            点击not installed

                            输入scrapy apply

                            在pycharm中选择anaconda的环境

3. scrapy项目的创建以及运行

(1)创建scrapy项目:

                终端输入   scrapy startproject   项目名称

注意:项目的名字不允许使用数字开头  也不能包含中文

  

(2)项目组成:

         项目名字

            项目名字

                 spiders(存储的是爬虫文件)

                            __init__.py

                           自定义的爬虫文件.py   ‐‐‐》由我们自己创建,是实现爬虫核心功能的文件                 __init__.py

                items.py                                 ‐‐‐》定义数据结构的地方,爬取的数据都包含哪些,是一

                                                                  个继承自scrapy.Item的类

                middlewares.py                     ‐‐‐》中间件   代理

                pipelines.py                           ‐‐‐》管道文件,里面只有一个类,用于处理下载数据的后

                                                                 续处理默认是300优先级,值越小优先级越高(1‐1000)

                settings.py                             ‐‐‐》配置文件 比如:是否遵守robots协议,User‐Agent

                                                                 定义等

(3)创建爬虫文件:

        ①跳转到spiders文件夹中去创建爬虫文件   

                        cd 目录名字/目录名字/spiders

例如:cd scrapy_baidu_091\scrapy_baidu_091\spiders

        ②scrapy genspider爬虫文件的名字 网页的域名

                        scrapy genspider  爬虫文件的名字 网页的域名

例如:scrapy genspider baidu   http://www.baidu.com

 注:一般情况下不需要添加http协议  因为start_urls的值是根据allowed_domains修改的  所以添加了http的话  那么start_urls就需要我们手动去修改了

(4)爬虫文件的基本组成:

        继承scrapy.Spider类

                name = 'baidu'           ‐‐‐》 运行爬虫文件时使用的名字

                allowed_domains       ‐‐‐》 爬虫允许的域名,在爬取的时候,如果不是此域名之下的 url,会被过滤掉

                start_urls                    ‐‐‐》 声明了爬虫的起始地址,可以写多个url,一般是一个

                parse(self, response) ‐‐‐》解析数据的回调函数

                        response.text                  ‐‐‐》响应的是字符串

                        response.body                ‐‐‐》响应的是二进制文件

                        response.xpath()             ‐‐‐》xpath方法的返回值类型是selector列表

                                                                        可以直接是xpath方法来解析response中的内容

                        extract()                           ‐‐‐》提取的是selector对象的是data

                        extract_first()                   ‐‐‐》提取的是selector列表中的第一个数据

(5)运行爬虫文件:

                scrapy crawl 爬虫名称

                 例如: scrapy crawl baidu

                注意:应在spiders文件夹内执行

(6)实例

①百度
import scrapy


class BaiduSpider(scrapy.Spider):
    # 爬虫的名字  用于运行爬虫的时候 使用的值
    name = 'baidu'
    # 允许访问的域名
    allowed_domains = ['http://www.baidu.com']
    # 起始的url地址  指的是第一次要访问的域名
    # start_urls 是在allowed_domains的前面添加一个http://
    #             在 allowed_domains的后面添加一个/
    start_urls = ['http://www.baidu.com/']

    # 是执行了start_urls之后 执行的方法   方法中的response 就是返回的那个对象
    # 相当于 response = urllib.request.urlopen()
    #       response  = requests.get()
    def parse(self, response):
        print('苍茫的天涯是我的爱')
②58同城
import scrapy


class TcSpider(scrapy.Spider):
    name = 'tc'
    allowed_domains = ['https://bj.58.com/sou/?key=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91']
    start_urls = ['https://bj.58.com/sou/?key=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91']

    def parse(self, response):
        # 字符串
        # content = response.text
        # 二进制数据
        # content = response.body
        # print('===========================')
        # print(content)

        span = response.xpath('//div[@id="filter"]/div[@class="tabs"]/a/span')[0]
        print('=======================')
        print(span.extract())
③汽车之家
import scrapy


class CarSpider(scrapy.Spider):
    name = 'car'
    allowed_domains = ['https://car.autohome.com.cn/price/brand-15.html']
    # 注意如果你的请求的接口是html为结尾的  那么是不需要加/的
    start_urls = ['https://car.autohome.com.cn/price/brand-15.html']

    def parse(self, response):
        name_list = response.xpath('//div[@class="main-title"]/a/text()')
        price_list = response.xpath('//div[@class="main-lever"]//span/span/text()')

        for i in range(len(name_list)):
            name = name_list[i].extract()
            price = price_list[i].extract()
            print(name,price)

4.scrapy架构组成

(1)引擎                     

                ‐‐‐》自动运行,无需关注,会自动组织所有的请求对象,分发给下载器。

(2)下载器                   

                ‐‐‐》从引擎处获取到请求对象后,请求数据。

(3)spiders                 

                ‐‐‐》Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例 如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及 分析某个网页(或者是有些网页)的地方。

(4)调度器                   

                ‐‐‐》有自己的调度规则,无需关注。

(5)管道(Item pipeline)

                ‐‐‐》最终处理数据的管道,会预留接口供我们处理数据。

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。 每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行 一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。 以下是item pipeline的一些典型应用:

  • 清理HTML数据
  • 验证爬取的数据(检查item包含某些字段)
  • 查重(并丢弃)
  • 将爬取结果保存到数据库中

 5.scrapy工作原理

6.日志信息和日志等级

(1)日志级别:

                CRITICAL:严重错误

                ERROR: 一般错误

                WARNING: 警告

                INFO: 一般信息

                DEBUG: 调试信息

                默认的日志等级是DEBUG

                只要出现了DEBUG或者DEBUG以上等级的日志

                那么这些日志将会打印

(2)settings.py文件设置:

                默认的级别为DEBUG,会显示上面所有的信息

                在配置文件中 settings.py

                LOG_FILE : 将屏幕显示的信息全部记录到文件中,屏幕不再显示,注意文件后缀一定是.log

                LOG_LEVEL : 设置日志显示的等级,就是显示哪些,不显示哪些

7.scrapy的post请求

(1)重写start_requests方法:

                def start_requests(self)

(2)start_requests的返回值:

                 scrapy.FormRequest(url=url, headers=headers, callback=self.parse_item, formdata=data)

                        url: 要发送的post地址

                        headers:可以定制头信息

                        callback: 回调函数

                        formdata: post所携带的数据,这是一个字典

8.代理

​​​​​​​(1)到settings.py中,打开一个选项

                DOWNLOADER_MIDDLEWARES = {

                        'postproject.middlewares.Proxy': 543,

                }

(2)到middlewares.py中写代码

                def process_request(self, request, spider):

                        request.meta['proxy'] = 'https://113.68.202.10:9999'

                        return None

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

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

相关文章

ext4 - delay allocation数据结构

概述 延迟分配delay allocation是ext4非常重要的特性,启用该特性write系统将用户空间buffer写入内存page cache中即返回,此时也不会真正进行磁盘block分配,而是延迟到磁盘回写时(比如dirty ratio达到一定值,定时刷新&…

高校大数据教材推荐-《Python中文自然语言处理基础与实战》

《Python中文自然语言处理基础与实战》是“十四五”职业教育国家规划教材,是大数据应用开发(Python)“1X”职业技能等级证书配套系列教材。本书以项目为载体,突出职业技能。坚持理实一体化的理念。理实一体化,就是理论…

H5基础教程

w3school官网 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 TestH5

Vue3+Vite前端知识汇总1篇

目录 1、设置package.json,让编译完成后自动打开浏览器。 2、设置vite.config.ts,设置src别名,后面就不用 ../../../ 了。 3、安装types/node 解决vscode显示红波浪线问题。 4、安装 sass和reset.css 5、创建并引入全局组件,HospitalTop…

2816. 判断子序列

题目链接&#xff1a; 自己的做法&#xff1a; #include <bits/stdc.h>using namespace std;const int N 1e5 10; int a[N], b[N]; int main() {int n, m;bool flag true;scanf("%d%d", &n, &m);for (int i 0; i < n; i) scanf("%d"…

【C++】AVL树的实现及测试

文章目录 AVL树节点的定义AVL树的定义AVL树的插入插入后更新平衡因子AVL树的右单旋AVL树的左单旋先左单旋再右单旋先右单旋再左单旋检查是否满足AVL树总代码 AVL树 AVL树也叫平衡二叉搜索树&#xff0c;通过旋转解决了搜索二叉树的不确定性&#xff0c;让整颗树趋近于一颗满二叉…

一本通OJ 1810 登山 题解

题目链接 题目大意 从 ( 0 , 0 ) (0,0) (0,0) 走到 ( n , n ) (n,n) (n,n) &#xff0c;不能超过直线 y x yx yx&#xff0c;并且图上有 m m m 个点不能走&#xff0c;问你有几种方案 解题思路 很明显这题与卡特兰数有关&#xff0c;但是不同点在于这题中存在点不能走…

解决阿里云服务器不能访问端口

服务器已经下载了redis&#xff0c;kafka&#xff0c;但就是访问不了端口号&#xff0c; 开通云服务器以后&#xff0c;请一定在安全组设置规则&#xff0c;放行端口 防火墙要关闭

服务器内存满了解决之路

背景&#xff1a;大清早&#xff0c;突然一通电话吵醒&#xff0c;说项目跑不了&#xff0c;还没洗漱赶紧跑过来&#xff0c;毕竟属于实时在用的系统。排查发现系统盘满了&#xff0c;数据写不进去了&#xff0c;导致报错。接手的项目&#xff0c;从来没考虑服务器问题&#xf…

SR501人体红外模块

文章目录 前言一、SR501模块介绍二、设备树添加节点三、驱动程序四、测试程序五、上机测试及效果总结 前言 人体红外模块 是一种能够检测人或动物发射的红外线而输出电信号的传感器。广泛应用于各种自动化控制装置中。比如常见的楼道自动开关、防盗报警等。 一、SR501模块介绍…

深度学习-第R1周心脏病预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境&#xff1a; 语言环境&#xff1a;Python3.10.7编译器&#xff1a;VScode深度学习环境&#xff1a;TensorFlow 2.13.0 一、前期工作&#xff1a; …

语义通信中基于深度双Q网络的多维资源联合分配算法

目录 论文简介系统模型多维资源联合分配模型多维资源联合分配算法 论文简介 作者 林润韬 郭彩丽 陈九九 王彦君发表期刊or会议 《移动通信》发表时间 2023.4 系统模型 场景中的边缘服务器部署在路边单元上&#xff0c;每个路边单元具有一定的无线覆盖区域&#xff0c;服务器将…

安装mmocr

安装mmocr 一、安装mmdetection 在安装前&#xff0c;如果已经安装过mmcv&#xff0c;先卸载掉&#xff0c;否则不同版本会导致ModuleNotFoundError报错&#xff01; 1、先安装对应版本的pytorch&#xff08;本次cuda10.2&#xff0c;pytorch1.7&#xff09; 2、安装对应版本的…

TableGPT: Towards Unifying Tables, Nature Language and Commands into One GPT

论文标题&#xff1a;TableGPT: Towards Unifying Tables, Nature Language and Commands into One GPT 论文地址&#xff1a;https://github.com/ZJU-M3/TableGPT-techreport/blob/main/TableGPT_tech_report.pdf 发表机构&#xff1a;浙江大学 发表时间&#xff1a;2023 本文…

搭建基于Nginx+Keepalived的高可用web集群并实现监控告警

目录 搭建相关服务器DNS服务器配置WEB服务器配置配置静态IP编译安装nginx 负载均衡器配置lb1lb2高可用配置 NFS服务器配置配置静态IP安装软件包新建共享目录web服务器挂载 监控服务器配置安装node-exporter编写prometheus.yml安装alertmanager和钉钉插件获取机器人webhook编写a…

ubuntu22.04上如何创建有privilege权限,有固定自定义IP的空容器

需求背景&#xff1a; 我想用docker来隔离自己的主机环境&#xff0c;来创建一个隔离的空白全新的开发环境&#xff0c;并且使之有固定的IP&#xff0c;在里面可以自由更新下载各种编译依赖&#xff0c;具有privileged权限的容器&#xff0c;以下是操作实现的具体步骤 查看do…

系统架构设计师-软件架构设计(2)

目录 一、基于架构的软件开发方法&#xff08;ABSD&#xff09; 1、架构需求 1.1 需求获取 1.2 标识构件 1.3 架构需求评审 2、架构设计 2.1 提出架构模型 2.2 映射构件 2.3 分析构件的相互作用 2.4 产生架构 2.5 设计评审 3、架构文档化 4、架构复审 5、架构实现 5.1 分析与…

JVM运行时区域——对象创建内存分配过程

新创建的对象&#xff0c;都存放在伊甸园区域&#xff0c;当垃圾回收时&#xff0c;将伊甸园区域的垃圾数据销毁&#xff0c;然后将存活的对象转移到幸存者0区域&#xff0c;之后创建的新的对象还是存放在伊甸园区域&#xff0c;等到再次垃圾回收后&#xff0c;将伊甸园区域和幸…

《Docker资源限制和调度策略:性能优化与资源管理,打造高效稳定的容器环境》

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Python 集合 pop()函数使用详解,pop随机删除原理

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 pop函数使用详解 1、随机删除并不完全随机1.1、纯数字1.2、纯字符1.3、混合情况 …