scrapy快速上手

embedded/2024/10/5 21:36:38/

安装

        除了scrapy本身还要安装两个库 

pip install scrapy
pip install pywin32
pip install wheel

 创建项目

在要创建项目的地方打开powershell

scrapy startproject 项目名

我们得到这样的项目结构,功能如下 

  1.         scrapy.cfg                项目的主配置信息
  2.         items.py                   设置项目模板,用于结构化数据
  3.         piplines.py                数据的持久化处理
  4.         seting                        配置文件
  5.         spiders                       爬虫文件目录

配置信息

seeting.py下修改是否支持数据爬取修改为允许,true不允许,false允许

  

 将这一行的内容改为false

配置浏览器请求头中的user-agent

根据网站反爬措施制定其他的配置 

配置模板

        items.py中照着给出的格式配置自己的数据模板

        变量名 = scrapy.Field()

创建爬虫文件

指定爬取目标

 回到powershell,

cd 项目名
scrapy genspider 爬虫文件名 爬取目标网址

得到这样一个文件

import scrapyclass QuotesSpider(scrapy.Spider):# 爬虫名name = "quotes"allowed_domains = ["quotes.toscrape.com"]# 爬取目标start_urls = ["https://quotes.toscrape.com/"]# 爬取动作def parse(self, response):

寻找元素和内容

在parse方法中定义爬取动作 ,参数列表中的response是爬取目标的响应对象。

具有如下属性

  1. url:响应的 URL 地址。
  2. status:HTTP 状态码,如 200 表示成功,404 表示未找到等。
  3. headers:响应的 HTTP 头部信息,是一个类似字典的对象。
  4. body:响应体,即服务器返回的内容,是一个字节串(bytes)。
  5. text:响应体的字符串形式,如果响应的 Content-Type 是文本类型(如 HTML),则可以直接使用此属性获取内容。
  6. encoding:响应的编码方式,用于将 body 转换为 text
  7. meta:传递给响应的元数据信息,常用于在请求和响应之间传递数据。
  8. request:触发此响应的请求(Request)对象。

具有如下方法

  1. xpath():用xpass寻找元素
  2. css():用css寻找元素
  3. urljoin():构造网址
  4. get() 和 getall(): 这两个方法用于从SelectorSelectorList对象中提取数据。get()方法返回第一个匹配节点的文本或属性值(如果指定了属性),而getall()方法返回所有匹配节点的文本或属性值列表。
  5. extract() 和 extract_first(): 这两个方法是旧版本Scrapy中用于提取数据的方法,但在新版本中,推荐使用get()getall()方法。extract()方法返回所有匹配节点的文本列表,而extract_first()方法返回第一个匹配节点的文本。
  6. re(regex, replace_entities=True) 和 re_first(regex, default=None, replace_entities=True): 这两个方法允许你使用正则表达式来提取匹配的数据。re()方法返回所有匹配的字符串列表,而re_first()方法返回第一个匹配的字符串。
  7. attrib: 这是一个属性字典,用于访问当前节点的属性。如果当前对象是SelectorList,则attrib将返回列表中第一个元素的属性字典。

        使用xpath和css方法寻找元素的时候如果返回多个值的时候添加.extract()返回的是str类型列表,单个值则为.extract_first(),返回的是str类型


text = q.xpath(".//span[@class='text']/text()").extract_first()
author = q.xpath('.//span/small[@class="author"]/text()').extract_first()   
tags = q.xpath('.//div[@class="tags"]/a[@class="tag"]').extract()

        这样找到的元素可以直接被bs4解析并获取值。

将结果组成模板

        首先导入item,并在要组成模板的位置实例化一个ScrapydemoItem对象

from scrapydemo.items import ScrapydemoItemitem = ScrapydemoItem()#在你要组成模板的位置写

         为实例属性赋值

item["text"] = text
item["author"] = author
item["tags"] = tags

        结束爬虫        yield类似return,但是可以循环返回

yield item

         每返回一个item会写入一条数据

        当然也可以不返回item,获取到下一个页面的url即可继续访问下一个页面

        # 获取访问下一页地址next = response.css('.pager .next .a::attr(href)').extract_first()  # 两个冒号获取属性值# 合成绝对路径url = response.urljoin(next)# 访问请求的回调函数# 第三个参数是关闭地址过滤yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)

         这样就可以调用自己继续访问下一页了

创建启动项

创建main.py 

from scrapy import cmdlinecmdline.execute("scrapy crawl quotes -o quotes.json".split())
#                scrapy crawl 爬虫名  -o代表文件流  创建quotes.json这个文件

        也可以在cmd或powershell中输入字符串中的值 

爬取scrapy官方靶站的示例代码:

import scrapyfrom scrapydemo.items import ScrapydemoItemclass QuotesSpider(scrapy.Spider):# 爬虫名name = "quotes"allowed_domains = ["quotes.toscrape.com"]# 爬取目标start_urls = ["https://quotes.toscrape.com/"]# 爬取动作def parse(self, response):# 获取页面中的元素返回列表quote = response.xpath('//div[@class="quote"]')# 遍历列表每个元素for q in quote:text = q.xpath(".//span[@class='text']/text()").extract_first()    # 获取内容author = q.xpath('.//span/small[@class="author"]/text()').extract_first()    # 获取作者tags = q.xpath('.//div[@class="tags"]/a[@class="tag"]').extract()    # 获取标签# 实例化item = ScrapydemoItem()# 为实例属性赋值item["text"] = textitem["author"] = authoritem["tags"] = tags# 返回数据,相当于return,但是可以循环返回。yield item# 获取访问下一页地址next = response.css('.pager .next .a::attr(href)').extract_first()  # 两个冒号获取属性值# 合成绝对路径url = response.urljoin(next)# 访问请求的回调函数# 第三个参数是关闭地址过滤yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)


http://www.ppmy.cn/embedded/123551.html

相关文章

温度转换-C语言

1.问题: 输入一个华氏温度,要求输出摄氏温度。公式为 c5(F-32)/9,取位2小数。 2.解答: scanf("%lf",&f);或者scanf("%f",&f);如果你前面定义的f是用double类型的话,就应该用%lf格式&…

MeterSphere压测配置说明

在MeterSphere中,执行性能测试时的配置参数对测试结果有重要影响。以下是对MeterSphere压测配置中几个关键参数的解释: 执行方式:决定了测试的执行模式,例如可以按照持续时间或迭代次数来执行测试。 按持续时间:在这种…

cloud-(Nacos)--注册中心原理-服务注册-服务发现

并且通过(RestTemplate)Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题 在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了注册中心的概念。注册中心、服务提供者、服务消费者三者间关系如下: 流程如下: 服务启动…

CSS 实现楼梯与小球动画

CSS 实现楼梯与小球动画 效果展示 CSS 知识点 CSS动画使用transform属性使用 页面整体布局 <div class"window"><div class"stair"><span style"--i: 1"></span><span style"--i: 2"></span>…

PostgreSQL常用数值处理函数简介

PostgreSQL 提供了许多用于数值处理的函数&#xff0c;涵盖数学运算、取整、取余、随机数生成等操作。以下是一些常用的数值处理函数及其使用示例&#xff1a; 1. ABS() - 取绝对值 返回数字的绝对值。 SELECT ABS(-10); -- 返回 10 SELECT ABS(3.5); -- 返回 3.52. CEIL(…

【unity进阶知识6】Resources的使用,如何封装一个Resources资源管理器

文章目录 一、Unity资源加载的几种方式1、Inspector窗口拖拽2、Resources3、AssetBundle4、Addressables&#xff08;可寻址资源系统&#xff09;5、AssetDatabase 二、准备三、同步加载Resources资源1、Resources.Load同步加载单个资源1.1、基本加载1.2、加载指定类型的资源1.…

(9)MATLAB瑞利衰落信道仿真2

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、瑞利衰落信道二、瑞利衰落信道建模三、仿真结果二、高斯随机变量和瑞利随机变量后续 前言 本文首先给出瑞利衰落信道模型&#xff0c;并根据瑞利衰落变量估…

C++教程(三):c++常用的配置文件类型

目录 1. INI 文件 2. JSON 文件 3. YAML 文件 4. XML 文件 5. TOML 文件 6. 二进制配置文件&#xff08;Protocol Buffers, MessagePack, Avro 等&#xff09; 总结 在 C 项目中&#xff0c;常用的配置文件类型有多种选择&#xff0c;具体选择取决于项目的复杂性、可读性…