栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Scrapy笔记,基本的流程与方法介绍

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scrapy笔记,基本的流程与方法介绍

安装

pip install scrapy
有时候会有错误,cryptograph库存在问题

进入rust网站,下载自己的系统版本
https://www.rust-lang.org/tools/install

运行后,确认安装,出现

选1default,安装成功后会在自动退出,用检查版本的方式看是否安装成功

这样的话scrapy不能在虚拟环境安装,只能在自己的主环境安装,会影响一些包


可以重新建个虚拟环境继承系统环境

启动项目 创建项目
scrapy startproject my

创建spider

可以根据上一个的提示创建,他的example是指的爬虫名字和爬虫网站主机
比如这样的,sta是名字,csdn.net是主机地址

此时的项目结构是这样的

配置

配置文件的解析请查看:https://blog.csdn.net/qq_40558166/article/details/107882564
默认的大部分设置是注释的
主要调整ROBOTSTXT_OBEY,爬虫规则的遵守
一般也开启管道、中间件、插件、下载器的设置

启动爬虫

在项目目录下命令行启动

scrapy crawl sta


会开始执行sta下的parse函数

##配置日志
在settings做配置

LOG_LEVEL = 'WARNING'
LOG_FILE = './log.log'

这样warning级别以上的信息才会被显示,并且输入到文件

数据提取 xpath提取

从scrapy的selector导入Selector类
声明一个类的实例
然后用xpath提取
示例:提取图片的链接
地址:https://pic.netbian.com/4kmeinv/
先修改starturls列表,加上这个地址


可以使用链式方法extract()和extract_first()方式提取文字

css选择器

代码类似,也有extract的两种方法,不同的是在浏览器检查里选择复制的是selector

re正则匹配

前面拿到的数据都可以后面接链路re(表达式)进行正则匹配

上面xpath和css取出来的值都是相当于html元素,可以在元素上继续接xpath和css取下级元素

链接传播

使用如下语句传递到下一个链接,回调函数是parse函数

yield scrapy.Request(newurl,callback=self.parse)

Request里面也有别的参数可以添加

除了这个还有FormRequest方法传递表单数据,一般取method和formdata,callback三个参数

更通用的是response的follow方法

数据存储 定义数据

在items.py文件中定义数据字段

    name= scrapy.Field()
    url = scrapy.Field()
调用数据字典

在spider类的parse函数中调用
先创建类的实例

item = items.MyItem()

赋值给他就是

item['name']='xxx'

传递出去用

yield item

或者return也可以

处理数据

首先要在设置中把items_pipline的设置打开
在piplines.py文件里面做处理
下面的例子是用mysql数据库检查数据是否已经存在
open_spider定义启动的操作
close_spider定义关闭的操作
process_item定义处理item的操作
还可以定义init函数,做初始化操作
最后都要return item,一般用raise DropItem来抛弃item不处理

from itemadapter import ItemAdapter
import pymysql
from scrapy.exceptions import DropItem


class FfPipeline:

    def open_spider(self, spider):
        self.client = pymysql.connect(
                host = '127.0.0.1',
                port = 3306,
                user = 'root',
                password = '12345678',
                database = 'db1',
                charset = 'utf8'
        )
        self.cursor = self.client.cursor()

    def close_spider(self, spider):
        self.cursor.close()
        self.client.close()

    def process_item(self, item, spider):
        sname=item['sname']
        age=item['age']
        sql=f"select * from testtable where sname='{sname}' and age='{age}'"
        print(sql)
        rows=self.cursor.execute(sql)
        print(rows)
        if rows==0:
            sql2=f"insert into testtable(sname,age)  values ('{sname}','{age}')"
            self.cursor.execute(sql2)
            print('新增了一条数据')
            self.client.commit()
            return item
        else:
            print(f'数据({sname},{age})已存在')
            raise DropItem
读取设置文件

可以用from_crawler 的类方法读取设置文件的信息,读出来是字典,可以用get方法获取指定设置的值

@classmethod
def from_crawler(cls, crawler):
    settings = crawler.settings
    return cls(*args, **kwargs)
 
Spider类中的方法

除了默认的parse方法,它还可以 有别的方法
start_requests:读取start_urls内的地址,并为每一个地址生成一个Request对象,交给Scrapy下载并返回Response,仅调用一次
make_requests_from_url:在start_requests()中调用,实际生成Request的函数。默认的回调函数为parse(),提交的方式为get
parse:默认的Request对象回调函数,处理返回的response。生成Item或者Request对象。用户必须实现这个方法
init:初始化Spider类的变量,如start_urls和alowed_domains
具体参考:https://www.cnblogs.com/derek1184405959/p/8450457.html

中间件

有两种中间件
下载器中间件和蜘蛛中间件
具体的区别参考:https://blog.csdn.net/Qwertyuiop2016/article/details/105553100?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1
蜘蛛中间件一般用于操作蜘蛛返回的request,而下载中间件用于操作向互联网发起请求的request和返回的response

启用

将设置内的两个中间件取消注释,并将自己的中间件加入字典中,优先级取值根据需要调整

方法

下载中间件的核心的方法一般有
process_request(request, spider):处理请求
process_response(request, response, spider):处理响应
process_exception(request, exception, spider):处理异常
蜘蛛中间件的核心方法有
process_spider_input(response, spider):所有请求都会调用这个方法
process_spider_output(response, result, spider):spider解析完response之后调用该方法,result就是解析的结果(是一个可迭代对象),其中可能是items也可能是request对象
process_spider_exception(response, exception, spider):处理异常
process_start_requests(start_requests, spider):同process_spider_output,不过只处理spider中start_requests方法返回的结果

共有的有from_crawler(cls, crawler),从settings.py获取配置

一般都自定义下载中间件,来实现修改 User-Agent、处理重定向、设置代理、失败重试、设置 cookies 、随机等待延迟等功能

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号