python spider 爬虫 之 scrapy框架 企业级

news2024/9/25 17:18:00

Scrapy定义

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

Scrapy 安装

pip install scrapy
安装过程中可能出现的错误:

报错1: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

解决办法:

    下载twisted库,网址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

    注意:cp后面是 python版本,amd64代表64位
下载对应版本,下载完成后使用 pip install twisted的路径 进行安装

安装完成后在进行安装scrapy。

报错2:提示升级pip指令:python.exe ‐m pip install ‐‐upgrade pip

解决办法:运行指令python.exe ‐m pip install ‐‐upgrade pip 即可。

报错3: win32错误。
解决办法: 运行指令 pip install pypiwin32

再报错 安装anaconda

scrapy 应用

1、创建爬虫项目 就是创建个框架

在cmd终端执行
scrapy startproject 项目名 # 项目的名字不能以数字打头,且不能包含中文
在这里插入图片描述在这里插入图片描述

2、创建爬虫文件

爬虫文件要创建在spiders文件下
cd 项目名称\项目名称\spiders
在这里插入图片描述
3、创建爬虫文件
scrapy genspider 爬虫程序项目名 网址 # 网址不要带协议
在这里插入图片描述

4、运行爬虫文件

scrapy crawl 项目名称

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

scrapy 框架结构

项目名称
项目名称
spiders —存储爬虫文件
init.py
自定义的爬虫文件.py
init.py
items.py ----定义数据结构的地方 爬取的数据包含哪些
middleware.py ----中间件 跟Vue 一样 代理
pipelines.py -----管道 用来处理下载的数据
settings.py ------配置文件 robots协议 UA定义等

所有selector对象还可以调用xpath方法

    #scr "//ul/li/a/img/@src"
    # alt = "//ul/li/a/img/@alt"  

    for x in response.xpath('//ul/li/a/img'):
        print(x.xpath('./@src').extract())		
import scrapy


class BaiduSpider(scrapy.Spider):
    # 爬虫的名称,用于运行爬虫需要用到    scrapy crawl baidu
    name = "baidu"
    # 允许访问的域名
    allowed_domains = ["www.baidu.com"]
    #起始的url地址  首次要访问的域名
    #  新版本的python 会自动判断 html会去掉/
    # start_urls 是  协议  +   allowed_domains  +  /  组成
    start_urls = ["https://www.baidu.com"]

    # 是执行start_url 之后的方法    response就是返回那个对象
    # 相当于   response = urllib.request.urlopen()
    #         response = requests.get()
    #         response = requests.post()
    def parse(self, response):
        print("AAAAAAAAAAAAAAAAAAAAAAAAAAA")
        # 获取响应  以字符串形式显示
        print(response.text)
        # 获取响应  以二进制数据   不是content
        print(response.body)
        # 可以直接用xpath方法来定位元素  response.xpath('xpath 语法') 返回Selector对象列表
        ###
        ##  所有selector对象还可以调用xpath方法
        ###
        ele = response.xpath('xpath 语法')[0]
        print(response.xpath('xpath 语法'))
        # 提取selector对象的data属性值
        print(ele.extract())
        # 提取selector列表的第一个数据
        print(ele.extract_first())

scrapy 工作原理

在这里插入图片描述

scrapy shell

实际用处不大
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开启管道控制

在这里插入图片描述

要在自定义爬虫文件中,导入items.py的类

from 项目名称.items import XXItem
然后要在自定义爬虫文件def.parse 中初始化这个类
def parse(self, response)
# 参数就定义在Items.py的数据结构 xxx=scrapy.Field()
yy=xxItem(形参=实参)
# 提交给pipelines管道 yield相当于return ,只是每次都记录当前位置,下次会从下一个位置继续执行 原理跟C#yield ,foreach一样 迭代
yield yy

pipelins.py

#  要管道生效,需要在settings开启
class DdPipeline:
    # 此处item  就是 自定义爬虫yield 返回的数据
    def process_item(self, item, spider):
        # 此处可以给item进行下载等相关处理
        return item

在这里插入图片描述
开启多管道

ITEM_PIPELINES = {
	# 爬虫项目名 . pipelines . 管道类
	# 管道类 就是在pipelines.py  定义的 class xxxx
    'myproject.pipelines.Pipeline1': 300,
    'myproject.pipelines.Pipeline2': 400,
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import scrapy
from DD.items import DdItem
class DangdangSpider(scrapy.Spider):
    name = "dangdang"
    # 多页下载时,要修改allowed_domians  一般 只保留域名就可以了
    allowed_domains = ["category.dangdang.com"]
    start_urls = ["https://category.dangdang.com/cp01.01.02.00.00.html"]
    # https://category.dangdang.com/pg2-cp01.01.02.00.00.html
    base_url='https://category.dangdang.com/pg'
    page=1
    def parse(self, response):       
        #scr "//ul/li/a/img/@src"
        # alt = "//ul/li/a/img/@alt" 
        for x in response.xpath('//ul/li/a/img'):
            src = x.xpath('./@src').extract()
            alt = x.xpath('./@alt').extract()
            yield DdItem(src=src,alt=alt)
        if self.page<100:
            self.page=self.page+1
            url= self.base_url+str(self.page)+'-cp01.01.02.00.00.html'
            # 调用parse方法
            # scrapy.Request就是scrapy的get请求
            # url 就是请求的地址
            # callback 是要执行的函数,注意不要加()
            yield scrapy.Request(url=url,callback=self.parse)

在这里插入图片描述

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

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

相关文章

如何将银行卡拍照转为excel?

如果您手头上有很多的银行卡&#xff0c;并且需要录入到电脑&#xff0c;怎么办&#xff1f;手工一张一张、一个数字一个数字地敲键盘打字&#xff1f;太麻烦了&#xff0c;效率低&#xff0c;而且银行卡上的卡号数字可不短&#xff0c;传统的人工打字录入很容易出错&#xff0…

基于模糊控制算法的水位控制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Qt 动态手势识别“手掌随动”+“握拳选择”

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

leetcode583. 两个字符串的删除操作(java-动态规划)

两个字符串的删除操作 leetcode583. 两个字符串的删除操作题目描述解题思路解法一 递归加缓存动态规划代码演示 动态规划专题 leetcode583. 两个字符串的删除操作 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/delete-…

算法基础修炼

算法基础 数据结构与算法 字符串匹配 KMP算法&#xff1a; 字符串算法之KMP&#xff08;字符串匹配&#xff09;kmp字符串匹配算法青萍之末的博客-CSDN博客 各大排序算法&#xff1a; 冒泡排序&#xff1a; 选择排序&#xff1a; 类似于冒泡算法&#xff0c;不断找到乱…

Android 编译Android7.0版本源码

编译Android7.0版本源码 前言正文一、前置条件二、编译准备三、下载编译源码1. 下载Repo2. 初始化仓库3. 同步远程代码4. 编译源码5. 启动模拟器 四、编译中的问题① Jack-Server② 本地化设置③ Communication error with Jack server (35), try jack-diagnose or see Jack se…

Pycharm中运行Allure报错不是内部或外部命令的解决方案

问题现象&#xff1a; Allure已安装并配置好系统环境变量&#xff1a; 1、Allure的下载地址&#xff1a;https://github.com/allure-framework/allure2/releases 2、下载后解压&#xff0c;将解压后的bin路径配置到环境变量中&#xff1a; allure-pytest插件也已安装好&#x…

Thinkphp5分页后携带参数进行跳转传递

问题&#xff1a; 我在tp框架中写了一个图书详情分页的&#xff0c;代码如下&#xff1a; public function verify_details(){$sell_order_numinput(sell_order_num);$resDB::table(verif)->where(["sell_order_num">$sell_order_num])->paginate(10);// 模…

Linux上安装matlab

首先需要下载文件&#xff0c;微人大正版软件下载里有 然后直接点击&#xff0c;就可以就可以安装&#xff0c;不需要使用挂载命令&#xff0c;然后使用 ./install就可以进行安装了&#xff0c;这里记住是得登录自己的人大邮箱&#xff0c;否则无法激活&#xff0c;然后修改安…

LINUX7下安装kaldi实战

LINUX7下安装kaldi实战&#xff0c;需要升级gcc版本。还需要将kaldi相关的github.com替换为kgithub.com。 1 升级安装gcc过程 我是在LINUX7.5下安装部署得kaldi。自带的gcc版本为4.8.5&#xff0c;所以需要安装升级gcc. 1.1 安装说明 gcc库包含3个依赖库&#xff1a;gmp、m…

【各种乐器波形图】笛子、二胡、钢琴、号角等乐器波形图研究

标题&#xff1a;不同乐器波形图 笛子的频率取决于其音高&#xff0c;不同音高的笛子频率也不同。以C调笛子为例&#xff0c;其最基本的频率为261.63 Hz&#xff08;即中央C的频率&#xff09;。而其他调号的笛子的基本频率则会有所不同。 笛子的波形图&#xff1a; import n…

有奖问卷 | 2023 中国软件研发效能调查问卷即将截止

中国信通院将根据问卷征集和企业调研结果&#xff0c;与业内专家共同撰写**《2023 中国软件研发效能调查报告》**&#xff0c;研判发展趋势&#xff0c;提供研发效能体系建设建议&#xff0c;并于 2023 年 7 月 7 日正式发布调查报告解读。 随着云计算应用的不断深入&#xff0…

微信小程序中使用echart、动态加载几条折线

一、示例 echart小程序示例 gitub地址&#xff1a;GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本 在小程序中放入 效果 二、 小程序代码 json 组件的位置取决于一示例中的的echart的位置 { "navigationStyle":"custom","…

STM32速成笔记—EEPROM(AT24C02)

文章目录 一、AT24C02简介二、AT24C02引脚三、AT24C02寻址四、AT24C02读/写操作4.1 AT24C02写操作4.2 AT24C02读操作 五、AT24C02程序六、应用实例七、拓展应用 一、AT24C02简介 AT24C01/02/04/08/16…是一个1K/2K/4K/8K/16K位电可擦除PROM&#xff0c;内部含有128/256/512/10…

数据中心供配电系统负荷的计算方法(三)

数据中心供配电系统是为机房内所有需要动力电源的设备提供稳定、可靠的动力电源支持的系统&#xff1b;是数据中心日常运维的重大支出之一&#xff0c;在数据中心&#xff0c;供配电系统相当于一个人的“心脏和血管”&#xff0c;负责把能量输送到系统的每一台设备。一旦供配电…

伦敦金价格实时查询

伦敦金是具有显著杠杆效应的投资品种&#xff0c;参与其中的投资者&#xff0c;往往需要时刻关注它的实时行情走势&#xff0c;以及自己交易账户内的情况&#xff0c;才能及时地兑现利润和控制交易的风险。所以对于每一位伦敦金投资者来说&#xff0c;实时的行情报价都是十分重…

stable-diffusion 预训练模型汇总

目前各个github上各个库比较杂乱&#xff0c;故此做些整理方便查询 Stable UnCLIP 2.1 New stable diffusion finetune (Stable unCLIP 2.1, Hugging Face) at 768x768 resolution, based on SD2.1-768. This model allows for image variations and mixing operations as d…

OA办公系统如何通过审批流程提高效率

企业的发展与管理离不开信息化&#xff0c;很多企业的信息化都会选择从OA信息化开始。一个成熟先进的OA办公系统流程审批也是核心功能关注的功能之一&#xff0c;今天小编举例有18年平台经验的天翎低代码平台OA系统&#xff0c;给大家分享一下如果提升流程审批效率&#xff1a;…

展会回顾|万应低代码重磅亮相2023全球人工智能产品应用博览会

6月25-27日&#xff0c;人工智能领域的行业盛会——第五届全球人工智能产品应用博览会&#xff08;简称“全球智博会”&#xff09;在苏州国际博览中心成功举行。大会由苏州市人民政府指导、苏州工业园区管理委员会支持、新一代人工智能产业技术创新战略联盟、苏州市人工智能协…

Qt 事件过滤器使用QPainter绘制温度

文章目录 【1】eventFilter使用简介【2】QPainter使用简介【3】QPainter绘制温度案例头文件源文件 【4】 UI界面设计【5】温度绘制图 【1】eventFilter使用简介 Qt的eventFilter是一个事件过滤器&#xff0c;可以用来捕获和处理Qt对象的事件。事件过滤器可以被安装到一个对象上…