python scrapy框架

news2024/12/24 21:19:25

scrapy概述

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试

scrapy安装

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

最开始安装了低版本 报错builtins.AttributeError: module 'OpenSSL.SSL' has no attribute 'SSLv3_METHOD' 升级到最新版本2.10.0 没有问题

scrapy使用

scrapy创建项目及结构

创建项目

scrapy startproject 项目名称

scrapy自定义爬虫类

创建爬虫文件

scrapy genspider 爬虫文件名称 网页地址

scrapy genspider MyTestSpider www.baidu.com

一般情况下不需要添加http协议, 因为start urls的值是根据allowed domains修改的 ,所以添加了http的话,那么start urls就需要我们手动去修改

import scrapy


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

    def parse(self, response):
        pass

 scrapy response的属性和方法

response.text       获取的是响应的字符串

response.body     获取的是二进制数据

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

response.extract  提取seletor对象的data属性值

response.extract_first 提取seletor列表的第一个值

scrapy启动爬虫程序

scrapy crawl  爬虫名称

scrapy crawl MyTestSpider

scrapy原理

1、引擎向spiders要url

2、引擎学将要爬取的url给调度器

3、调度器会将url生成请求对象放到指定的队列中,从队列中发起一个请求

4、引擎将请求交给下载器进行处理

5、下载器发送请求获取互联网数据

6、将数据返回给下载器

7、下载器将数据返回给引擎

8、引擎将数据给spiders

9、spiders解析数据,交给引擎,如果发起第二次请求,会再次交给调度器

10、引擎将数据交给管道

scrapy爬虫案例

创建项目

scrapy startproject movie

创建spider

scrapy genspider mv https://www.dytt8.net/html/gndy/china/index.html
import scrapy


class MvSpider(scrapy.Spider):
    name = "mv"
    allowed_domains = ["www.dytt8.net"]
    start_urls = ["https://www.dytt8.net/html/gndy/china/index.html"]

    def parse(self, response):
        pass

items.py

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    src = scrapy.Field()

编写管道 

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class MoviePipeline:
    # 执行之前执行
    def open_spider(self, spider):
        self.fp = open('movie.json','w',encoding='utf-8')

    def process_item(self, item, spider):
        self.fp.write(str(item))
        return item

    # 执行之后执行
    def close_spider(self,spider):
        self.fp.close()

settings.py开启管道

BOT_NAME = "movie"

SPIDER_MODULES = ["movie.spiders"]
NEWSPIDER_MODULE = "movie.spiders"


ROBOTSTXT_OBEY = True

ITEM_PIPELINES = {
   "movie.pipelines.MoviePipeline": 300,
}

REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"

编写爬虫程序

import scrapy
from movie.items import MovieItem

class MvSpider(scrapy.Spider):
    name = "mv"
    allowed_domains = ["www.dytt8.net"]
    start_urls = ["https://www.dytt8.net/html/gndy/china/index.html"]

    def parse(self, response):
        a_list = response.xpath('//div[@class="co_content8"]//td[2]//a[2]')

        for a in a_list:
            name = a.xpath('./text()').extract_first()
            href = a.xpath('./@href').extract_first()

            #第二页的地址是
            url = 'https://www.dytt8.net' + href

            # 对第二页的链接发起访问
            yield scrapy.Request(url=url, callback=self.parse_second,meta={'name':name})

    def parse_second(self,response):
        src = response.xpath('//div[@id="Zoom"]//img/@src').extract_first()
        # 接受到请求的那个meta参数的值
        name = response.meta['name']

        movie = MovieItem(src=src, name=name)
        # 返回给管道
        yield movie

运行并查看结果

进入spider目录下,执行 scrapy crawl mv

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

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

相关文章

【力扣】216. 组合总和 III <回溯、回溯剪枝>

【力扣】216. 组合总和 III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字 1 到 9,每个数字最多使用一次,返回所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回…

MindManager

MindManager 简介下载安装crack 简介 MindManager是一款由Mindjet公司开发的思维导图软件。思维导图是一种图形化的方法,用于在一个中心主题周围组织和呈现各种相关思想、想法和信息。MindManager允许用户创建、编辑和共享思维导图,以帮助他们更好地组织…

Source Insight 宏-局部替换

编码中有没有遇到这种情况:添加一个新的函数,参考某某函数。然后我们新加一个函数名,把某某函数的内容全部拷贝过来,参数不一样时,再把拷贝过来的内容里的参数全部替换成新的参数。source insight 里替换的命令是ctrlh…

电商项目part06 微服务网关整合OAuth2.0授权中心

微服务网关整合 OAuth2.0 思路分析 网关整合 OAuth2.0 有两种思路,一种是授权服务器生成令牌, 所有请求统一在网关层验证,判断权 限等操作;另一种是由各资源服务处理,网关只做请求转发。 比较常用的是第一种,把API网关…

Linux内核学习(九)—— 虚拟文件系统(基于Linux 2.6内核)

虚拟文件系统(VFS)作为内核子系统,为用户空间程序提供了文件和文件系统相关的接口。通过虚拟文件系统,程序可以利用标准的 Unix 系统调用对不同的文件系统(甚至不同介质上的文件系统)进行读写操作。 一、通…

人力资源小程序的设计原则与实现方法

随着移动互联网的快速发展,小程序成为了各行各业推广和服务的新利器。对于人力资源行业来说,开发一款定制化的小程序不仅可以提升服务效率,还可以增强品牌形象和用户粘性。那么,如何定制开发人力资源类的小程序呢?下面…

数组和指针练习解析(6)

题目: int main() { char *c[] {"ENTER","NEW","POINT","FIRST"}; char**cp[] {c3,c2,c1,c}; char***cpp cp; printf("%s\n", **cpp); printf("%s\n", *--*cpp3); printf("%s\n&…

Unity3D Pico VR 手势识别

本文章使用的 Unity3D版本: 2021.3.6 , Pico SDK 230 ,Pico OS v.5.7.1 硬件Pico 4 Pico SDK可以去Pico官网下载SDK 导入SDK 第一步:创建Unity3D项目 第二步:导入 PICO Unity Integration SDK 选择 Windows > Package Manager。 在 Packag…

巴别塔再现?高质量端到端数据助力Meta推出AI模型SeamlessM4T

追求卓越与无限的精神一直流淌在人类的基因里。圣经中有故事:在古代,人们说着同一种语言,决定建造一座高耸入云,塔顶能触及天堂的塔,被称为巴别塔,以彰显人类的力量和创造力。然而上帝看到人类的意图&#…

数据科学 × 临床医学丨和鲸打造可供科研多角色协同的低代码研究平台

领域背景:临床研究的“多角色”性 临床研究是以疾病的诊断、治疗、预后和病因为主要研究内容,以患者为主要研究对象的科学研究活动。现代临床研究项目的开展具有“多角色”参与的特性,除了发起项目的 PI 外,项目的核心团队可能还…

14-模型 - 增删改查

增: # 1. 找到模型类并创建对象 user User() # 2. 给对象的属性赋值 user.username username user.password password user.phone phone # 3. 将user对象添加到session中 (类似缓存) db.session.add(user) # 4. 提交数据 db.session.commit() 删: # 两种删除:# 1. 逻辑删…

C++核心编程:类和对象

总览 C 面向对象的三大特性: 封装,继承,多态 C认为 万事万物都皆为对象,对象上有其属性和行为 封装 封装的意义 封装是C面向对象的三大特征之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事…

芯科科技推出专为Amazon Sidewalk优化的全新片上系统和开发工具,加速Sidewalk网络采用

芯科科技为Sidewalk开发提供专家级支持 中国,北京 - 2023年8月22日 – 致力于以安全、智能无线连接技术,建立更互联世界的全球领导厂商Silicon Labs(亦称“芯科科技”,NASDAQ:SLAB)今日在其一年一度的第四…

安防监控平台EasyCVR视频汇聚平台增加首页告警类型的详细介绍

安防监控/视频集中存储/云存储EasyCVR视频汇聚平台,可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等…

kubernetes--技术文档--可视化管理界面dashboard安装部署

阿丹: 使用官方提供的可视化界面来完成。 Kubernetes Dashboard是Kubernetes集群的Web UI,用户可以通过Dashboard进行管理集群内所有资源对象,例如查看资源对象的运行情况,部署新的资源对象,伸缩Deployment中的Pod数量…

SAP 之如何定义功能范围Function Area

目录 目录 前言 一、注意点 二、使用步骤 1. Step by step 2. 其它功能 总结 前言 在SAP中,FA功能范围是一个组织单元,一般根据活动对产生的运营费用进行分类。例如生产、管理、销售、研发等,可以分配给成本中心Cctr、GL总账科目、Ord…

电压放大器的用途有哪些

电压放大器是一种常见的电子设备,用于将输入信号的电压放大到所需的输出电压水平。它在各种领域中都有广泛的应用。下面西安安泰电子将介绍电压放大器的主要用途。 音频放大:电压放大器在音频领域中扮演着重要角色。音频放大器是电压放大器的一种特殊形式…

支付事-乐刷支付母公司移卡发布2023年中期业绩报告

8月24日晚间,乐刷支付母公司移卡发布2023年中期业绩报告。 2023年上半年,移卡实现收入20.62亿元,同比增长25.6%;经调整EBITDA2.91亿元;同比增长317.4%。业绩表现优异主要来源于主营支付业务的大幅增长。 中期业绩报告…

MIA文献阅读 —— 深度学习在医学图像分析中的最新进展及临床应用【2022】

目录 0 摘要1 引言2 深度学习方法概述2.1 监督式学习2.2 无监督学习2.2.1 自编码器 (Autoencoders)2.2.2 生成对抗网络(GANs)2.2.3 自监督学习 2.3. 半监督学习2.4 提高性能的策略2.4.1 注意力机制2.4.2 领域知识2.4.3 估计的不确定性 3 深度学习应用3.1 分类3.1.1 监督分类3.1…

Camunda 7.x 系列【28】定时器启动事件

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. 概述3. 案例演示3.1 建模3.2 固定时间日期3.2 持续时间3.3 重复间隔1. 前言 Sta…