当前位置: 首页 > news >正文

一文解决scrapy带案例爬取当当图书

Scrapy框架

简介

Scrapy的五大组件

Spiders(爬虫):

它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)

Engine(引擎):

负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器):

它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):

负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还Scrapy Engine(引擎),由引擎交给Spider来处理

ItemPipeline(管道):

它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):

你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):

你可以理解为是一个可以自定扩展和操作引擎和Spider中间

通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)
scrapy的数据流图:

绿线是数据流
在这里插入图片描述

在这里插入图片描述

安装:

   pip install scrapy

scrapy几条命令

创建项目:scrapy startproject xxx
进入项目:cd xxx
基本爬虫:scrapy genspider xxx(爬虫名) xxx.com (爬取域)
还有一条是规则爬虫的命令,只是这条有变化,前俩条不变
规则爬虫:scrapy genspider -t crawl xxx(爬虫名) xxx.com (爬取域)
运行命令:scrapy crawl xxx

建立项目

(1).建立一个文件夹 scrapyDemo1
(2).在该文件夹下面打开命令行窗口 scrapy startproject demo1 则会在文件夹scrapyDemo1下面建立scrapy项目文件夹demo1,包括scrapy的各个组件子文件
在这里插入图片描述

(3).进入到项目文件夹demo1下 cd demo1
(4).scrapy genspider 爬虫名 域名 e.g:scrapy genspider demo1spider baidu.com
(5).scrapy crawl 爬虫名 用于运行爬虫 一般该命令在命令行使用 而且输出许多信息 很不方便 所以专门写个run.py来执行程序且内容几乎固定,和scrapy.cfg同级

run.py

from scrapy import cmdline
cmdline.execute('scrapy crawl demo1spider --nolog'.split())#--nolog   控制台不输出日志
   e.g:scrapy crawl demo1spider

在这里插入图片描述

执行三四之后相当于建立一个爬虫项目,并启动这个项目,一般在第三步骤之后就要进行相应的代码编写和配置更改
在这里插入图片描述

scrapy框架文件的简单配置使用介绍

setting.py 进行全局配置

项目名 User-Agent 机器人规则 并发数 延迟 cookies 默认请求头 项目管道优先级配置

主要注意注释介绍,几个常用的

# Scrapy settings for demo1 project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.htmlBOT_NAME = 'demo1'  #项目名SPIDER_MODULES = ['demo1.spiders']    #
NEWSPIDER_MODULE = 'demo1.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'demo1 (+http://www.yourdomain.com)'    #这个可以浏览器抓包查看值 比较重要 一般都要带的# Obey robots.txt rules
ROBOTSTXT_OBEY = False   # 机器人规则 默认是true  一般都要修改为false  否则几乎爬不了太多东西# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32  #最大并发数 可以开启的爬虫线程数# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 1   #下载延迟时间,单位是秒,默认是3秒,即爬一个停3秒,设置为1秒性价比较高,如果要爬取的文件较多,写零点几秒也行
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16# Disable cookies (enabled by default)
#COOKIES_ENABLED = False   #是否保存COOKIES,默认关闭,开机可以记录爬取过程中的COKIE,非常好用的一个参数# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}     #默认请求头,上面写了一个USER_AGENT,其实这个东西就是放在请求头里面的,这个东西可以根据你爬取的内容做相应设置。# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'demo1.middlewares.Demo1SpiderMiddleware': 543,
#}# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'demo1.middlewares.Demo1DownloaderMiddleware': 543,
#}# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {#'demo1.pipelines.Demo1Pipeline': 300,#'demo1.pipelines.Demo1MySqlPipeline' : 200,
#}  #项目管道,300为优先级,越低爬取的优先度越高 pipelines.py里面写了两个管道,一个爬取网页的管道,一个存数据库的管道,我调整了他们的优先级,如果有爬虫数据,优先执行存库操作。# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
日志配置
相关变量
LOG_LEVEL= ""LOG_FILE="日志名.log"

在运行时后面加上–nolog,控制台就不会输出日志信息了:

scrapy crawl demo1spider --nolog
日志等级

1.DEBUG 调试信息

2.INFO 一般信息

3.WARNING 警告

4.ERROR 普通错误

5.CRITICAL 严重错误

如果设置:
LOG_LEVEL="WARNING",就只会WARNING等级之下的ERRORCRITICAL
默认等级是1

导出为几种格式

执行爬虫文件时添加-o选项即可

json格式,默认为Unicode编码

scrapy crawl 项目名 -o 项目名.json

json lines格式,默认为Unicode编码

scrapy crawl 项目名 -o 项目名.jsonlines

csv 逗号表达式,可用Excel打开

scrapy crawl 项目名 -o 项目名.csv

xml格式

scrapy crawl 项目名 -o 项目名.xml

对于json文件,在setting.js文件里添加,设置编码格式,否则会乱码:

FEED_EXPORT_ENCODING='utf-8'

xpath

选择查找类

1.from scrapy.selector import Selector:引入选择查找类
2.selector = Selector(text=htmlText):装载Html文档 形成Selector对象 可以使用Xpath方法
3.Xpath可以连续调用 返回的是selector列表 则这个列表可以连续调用Xpath

Xpath查找Html元素

1.“//”表示文档下面所有节点元素,“/”表示当前节点的下一级节点元素,“.”表示当前节点元素
2.如果Xpath返回Selector对象,调用extract()函数会得到这些对象元素文本的列表,extract_first()获取列表中的第一个元素,如果列表为空,返回None,对于单一的Selector对象没有extract_first()函数
3.“/@attrName”得到一个Selector元素的attrName属性节点对象,也是一个Selector对象
4.“/text()”得到一个Selector元素包含的文本值,文本值节点对象也是一个Selector对象,通过extract()函数获取文本值
5.“tag[condition1 and condition2...]”来限定一个tag元素,condition是这个tag的属性
6.Xpath可以使用position()来确定其中一个元素的限制,选择序号从1开始

s = selector.xpath("//book[position()=1]/title").extract_first()

7.“*”代表任何元素节点,不包括text和comment
8.“@*”代表任何属性
9.“element/parent::*”选择element的父节点,该节点只有一个
10.“element/following-sibling::*”搜索element后面同级的所有兄弟节点,“element/following-sibling::[position()=1]”搜索element后面的同级的第一个兄弟节点
11.“element/preceding-sibling::*”搜索element前面同级的所有兄弟节点

yield函数

1.yield类似于return,但它是生成器的一部分

生成器详解
首先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器)

2.yield与return

带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从foo函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束。

实例

爬取当当网站图书数据并保存到mysql中
基础就在demo1上进行

观查网页

当当图书网:http://search.dangdang.com
输入python,网址变化成:http://search.dangdang.com/?key=python&act=input
翻到下一页或者第二页:http://search.dangdang.com/?key=python&act=input&page_index=2
在这里插入图片描述
在这里插入图片描述

确定爬取的信息:

title 标题
author 作者
date 发布日期
publisher 出版社
detail 细节介绍
price 价格

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

mysql中建立相应数据库和表:

show databases ;create database ddbookdb;use ddbookdb;create table books(btitle varchar(512) primary key ,bauthor varchar(256),bpublisher varchar(256),bdate varchar(32),bprice varchar(16),bdetail text
);
select * from books;

编写运行run.py文件:

from scrapy import cmdline
cmdline.execute('scrapy crawl demo1spider --nolog'.split())#--nolog   控制台不输出日志

编写items.py数据项目类Demo1Item:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass Demo1Item(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()#标题author = scrapy.Field()#作者date = scrapy.Field()#发布日期publisher = scrapy.Field()#出版社detail = scrapy.Field()#细节介绍price = scrapy.Field()#价格#pass

编写pipelines.py文件,写连接和关闭mysql数据库的两个函数,将数据项传输过来的数据输出到控制台并存入到mysql数据库中,使用count变量统计爬取的书籍数量:

# 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
import pymysqlclass Demo1Pipeline:def open_spider(self,spider):print("opened")try:self.con =pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="lzyft1030", db="ddbookdb", charset="utf8")self.cursor = self.con.cursor(pymysql.cursors.DictCursor)#创建游标self.cursor.execute("delete from books")self.opend = Trueself.count = 0except Exception as err:print(err)self.opend = Falsedef close_spider(self,spider):if self.opend:self.con.commit()#提交self.con.close()#关闭self.opend = Falseprint("closed")print("总共爬取",self.count,"本书籍")def process_item(self, item, spider):#查看传输过来的数据try:#把数据存入到mysql中if self.opend:self.cursor.execute("insert into books(btitle, bauthor, bpublisher, bdate, bprice, bdetail) values(%s, %s, %s ,%s ,%s, %s)", \(item["title"], item["author"], item["publisher"], item["date"], item["price"], item["detail"]))#计算书籍数量self.count+= 1except Exception as err:print(err)return item

修改setting.py文件【修改机器人规则, 加入User-Agent, 打开 ITEM_PIPELINES 将数据传输过来送到 demo1Pipeline 类中然后存到mysql中】:

# Scrapy settings for demo1 project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.htmlBOT_NAME = 'demo1'  #项目名SPIDER_MODULES = ['demo1.spiders']    #
NEWSPIDER_MODULE = 'demo1.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'demo1 (+http://www.yourdomain.com)'    #这个可以浏览器抓包查看值 比较重要 一般都要带的# Obey robots.txt rules
ROBOTSTXT_OBEY = False   # 机器人规则 默认是true  一般都要修改为false  否则几乎爬不了太多东西# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32  #最大并发数 可以开启的爬虫线程数# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 1   #下载延迟时间,单位是秒,默认是3秒,即爬一个停3秒,设置为1秒性价比较高,如果要爬取的文件较多,写零点几秒也行
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16# Disable cookies (enabled by default)
#COOKIES_ENABLED = False   #是否保存COOKIES,默认关闭,开机可以记录爬取过程中的COKIE,非常好用的一个参数# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}     #默认请求头,上面写了一个USER_AGENT,其实这个东西就是放在请求头里面的,这个东西可以根据你爬取的内容做相应设置。# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'demo1.middlewares.Demo1SpiderMiddleware': 543,
#}# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'demo1.middlewares.Demo1DownloaderMiddleware': 543,
#}# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'demo1.pipelines.Demo1Pipeline': 300,#'demo1.pipelines.Demo1MySqlPipeline' : 200,
}  #项目管道,300为优先级,越低爬取的优先度越高 pipelines.py里面写了两个管道,一个爬取网页的管道,一个存数据库的管道,我调整了他们的优先级,如果有爬虫数据,优先执行存库操作。# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

修改demo1spider.py文件,进行具体的爬虫操作:

import scrapy
from bs4 import UnicodeDammit
from bs4 import BeautifulSoup
from ..items import Demo1Item#重写start_requests方法class Demo1spiderSpider(scrapy.Spider):name = 'demo1spider'#allowed_domains = ['baidu.com']#start_urls = ['http://baidu.com/']  #入口地址key = "python"source_url = "http://search.dangdang.com/"def start_requests(self):#入口函数  可以用入口地址代替 入口地址可以有多个 是个列表url = Demo1spiderSpider.source_url+"?key=" + Demo1spiderSpider.keyyield scrapy.Request(url=url, callback=self.parse)def parse(self, response):#回调函数#一般网址response返回的是二进制  可以response.body.decode()转为文本try:#采用bs4里面的方法来处理编码问题dammit = UnicodeDammit(response.body, ['utf-8','gbk'])data = dammit.unicode_markup#建立选择查找类Selector对象 调用xpath方法selector = scrapy.Selector(text=data)lis = selector.xpath("//li['@ddt-pit'][starts-with(@class,'line')]")#print(lis)for li in lis:title = li.xpath("./a[position()=1]/@title").extract_first()price = li.xpath("./p[@class='price']/span[@class='search_now_price']/text()").extract_first()author = li.xpath("./p[@class='search_book_author']/span/a/@title").extract_first()date = li.xpath("./p[@class='search_book_author']/span[position()=2]/text()").extract_first()publisher = li.xpath("./p[@class='search_book_author']/span[position()=3]/a/@title").extract_first()detail = li.xpath("./p[@class='detail']/text()").extract_first()#有时为空 Noneitem = Demo1Item()item['title'] = title.strip() if title else ""item['author'] = author.strip() if author else ""item['date'] = date.strip()[1:] if date else ""item['publisher'] = publisher.strip() if publisher else ""item['price'] = price.strip() if price else ""item['detail'] = detail.strip() if detail else ""yield item#最后一页时link为nonelink = selector.xpath("//div[@class='paging']/ul[@name='Fy']/li[@class='next']/a/@href").extract_first()if link:url = response.urljoin(link)yield scrapy.Request(url=url, callback=self.parse)except Exception as err:print(err)

如果导入 from …items import Demo1Item 不合适 可以按一下操作
把项目的根目录设置为源路径:选中项目根目录,该项目根目录是第一个demo1,按图操作 语句写成上面的格式就欧克了

在这里插入图片描述

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

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

Python 模块导入 import ...\from... import...

代码越来越多的时候,我们将代码写到一个.py 文件里,随着代码的增加,代码的维护越来越困难。如果将代码按照不同的功能拆分放到不同的.py文件中,每个.py文件就是一个模块。 不同模块中的变量名可以相同,他们不会受影响…...

盘点golang中的开发神器

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 在Java中,我们用Junit做单元测试,用JMH做性能基准测试(benchmark),用async-profiler剖析cpu性能,用jstack、jmap、arthas等来排查问题。 作…...

监控系统实践第12天:5天上手Laravel8.5之路由篇(1/5)

监控系统实践第12天:5天上手Laravel8.5之路由篇(1/5)前言安装与配置Laravel基础功能:路由(Route)路由是什么?设置路由的请求方式定义路由的路径定义路由的内容闭包中定义内容控制器中定义内容视图中定义内容其它内容的…...

学习响应式BootStrap来写融职教育网站,Bootsrtap第三天nav布局

nav导航布局 <!DOCTYPE html> <html lang"zh_CN"> <head><meta charset"UTF-8"><title>融职教育</title><!-- 移动设备优先--><meta name"viewport" content"widthdevice-width, initial…...

前端常见跨域解决方案(全)

文章目录什么是跨域&#xff1f;什么是同源策略&#xff1f;同源策略限制以下几种行为常见跨域场景跨域解决方案一、 通过jsonp跨域二、 document.domain iframe跨域三、 location.hash iframe跨域四、 window.name iframe跨域五、 postMessage跨域六、 跨域资源共享&#x…...

因为一个字符校对问题,我的大厂面试挂了

摘要&#xff1a;字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。 本文分享自华为云社区《一个字符校对规则引发的血案》&#xff0c;原文作者&#xff1a;DRS技术快客 。 问题现场 我们先看一个建表语句 CREATE TABLE collate_test ( val1 char(32…...

AndroidUtilCode 最强大的工具类

一、前言&#xff1a; AndroidUtilCode 是一个强大易用的安卓工具类库&#xff0c;它合理地封装了安卓开发中常用的函数&#xff0c;具有完善的 Demo 和单元测试&#xff0c;利用其封装好的 APIs 可以大大提高开发效率&#xff0c;如今它主要包括两部分模块&#xff0c;其一是…...

SVN常用命令集合_艾孜尔江撰

在平时的工作中我们大多数情况下喜欢使用Tortoise SVN之类的可视化版本控制工具&#xff0c;但笔者发现&#xff0c;命令行的方式进行版本控制在执行速度上将会更快一些。尽管在大多数情况下使用命令行并不是很方便&#xff0c;但只要用户习惯了&#xff0c;就非常顺畅了。针对…...

什么样才能叫“技术很牛”?

近日&#xff0c;在某论坛上&#xff0c;有人提出了“一直不懂一个问题&#xff0c;什么叫‘技术很牛’&#xff1f;”的问题。详细提问称“说实话&#xff0c;我从本科到硕士&#xff0c;我觉得计算机的技术很多都是看看就会了&#xff0c;多操练下就熟了。可能有些设计问题需…...

金三银四大厂面经总结,java怎么快速创建构造方法

前言 Java作为最全面的语言&#xff0c;国内开发者也是最多的&#xff0c;Java综合起来各方面都不错&#xff0c;在大部分场景下是一种稳健的技术选择。加上近年来安卓的推动&#xff0c;目前也是最流行的一种语言。 现在Java的就业市场看起来还是挺大的&#xff0c;而且工资…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

IntentService源码分析指南

转载链接&#xff1a;https://www.jianshu.com/p/8a3c44a9173a...

为啥集群小文件治理那么重要,你真的懂吗?

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…...

Flink大数据实时计算系列-第一个程序JAVA版本-分组统计

Flink大数据实时计算系列-第一个程序JAVA版本-分组 在基线版本上增加了分组统计的代码 #Flink代码 package com.flinkniu.flink.operator;import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink...

Ant Design Vue实现a-table表格单元格合并

Ant Design Vue实现a-table表格单元格合并 参考Ant design Vue官网关于行和列合并api https://antdv.com/components/table-cn/ 下面官网对表格合并这块的描述 &#xff01;&#xff01;&#xff01;注意注意注意重要事情说三遍&#xff1a;很多同学都习惯性的将columns写在d…...

css中id和class的区别

css中id和class的区别ID是唯一的类不是唯一的语法区别ID是唯一的 每个元素仅可以有一个ID每个页面仅可以有一个元素拥有这个ID 类不是唯一的 你可以在多个元素中使用相同的类你可以使用多个类在一个元素中 语法区别 id对应css是用样式选择符“#”&#xff08;井号&#xff…...

力扣刷题:动态规划篇

目录322. 零钱兑换题目介绍题目实现5. 最长回文子串题目介绍题目实现518. 零钱兑换 II题目介绍题目实现53. 最大子序和题目介绍题目实现63. 不同路径 II题目介绍[62. 不同路径](https://leetcode-cn.com/problems/unique-paths/)题目实现70. 爬楼梯题目介绍题目实现72. 编辑距离…...

Java面试list 和 set 区别

List和Set的区别 List:&#xff1a;有序&#xff0c;按对象进入的的序保存对象&#xff0c;可可允许多个Null元素对象&#xff0c;可以使用lterator迭取出所有元素。在逐一便历&#xff0c;也可以使用get(int index)获取指定下标的元素 Set&#xff1a;无序&#xff0c;不可重复…...

诚意分享:这里有份超全Java体系化进阶学习图谱

摘要 Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log)&#xff0c;之后成为Apache项目的一部分。 成千上万的企业都在使用Kafka&#xff0c;三分之一的世界500强公司也在其中&…...

HTTPOXY 漏洞说明

这里有一个核心的背景是&#xff0c; 长久一来我们习惯了使用一个名为"http_proxy"的环境变量来设置我们的请求代理。 http_proxy127.0.0.1:9999 wget http://www.laruence.com/如何形成 在CGI(RFC 3875)的模式的时候&#xff0c; 会把请求中的Header&#xff0c; …...

python_爬虫 03 urllib库

目录 一、urllib库 1.1 urlopen函数 1.2 urlretrieve函数 1.3 urlencode函数 1.4 parse_qs函数 1.5 urlparse和urlsplit 1.6 request.Request类&#xff1a; 1.7 测试&#xff1a;用Request爬取拉勾网数据 1.8 ProxyHandler处理器&#xff08;代理设置&#xff09; 二…...

HTML表单标签,已拿offer附真题解析

前言 校招 -1 年 这个阶段还属于成长期&#xff0c;更需要看重的是你的基础和热情。对于 JS 基础&#xff0c;计算机基础&#xff0c;网络通信&#xff0c;算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀&#xff0c;所以只能从基础部分入手考察。…...

java面向对象编程

面向对象 最大特点在于面向对象的编程设计 面向对象主要这几模式为模块化设计&#xff0c;可以进行从用配置。在整个面向对象的设计里面更对情况下考虑的是标准。在使用的时候根据标准进行拼装&#xff0c;而对于面向对象有3个特征 封装性&#xff1a;内部的操作对外部而言不可…...

CentOS安装VirtuanBox

CentOS7安装virtualbox 1.进入virtualbox官网 https://www.virtualbox.org/ 2.点击download 3.点击Linux distributions 4.向下翻至如图&#xff0c;并且进入同种框选页面 5.在/etc/yum.repos.d/目录下新建virtualbox.repo并写入如下内容 [virtualbox] nameOracle Linux / R…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

鼻塞用鼻喷剂-调研(成分+刺激性)

称谓&#xff1a; 鼻滴水、鼻喷剂、滴鼻药 鼻喷剂原理: 鼻喷剂刺激鼻腔: 搜集标准&#xff1a; ①拼多多和淘宝上销量≥1 ②删除宠物用滴鼻药水 ③相同成分药水会有多种品牌&#xff0c;不重复列举 ④来自淘宝、 拼多多、京东&#xff0c;搜索关键词为"鼻塞 药水"…...

ESP8266|RPi pico 通过ESP8266搭建web服务器(树莓派pico通过esp8266联网)

文章目录前言软件准备硬件准备接线C/C实现代码实验现象Micropython实现代码实验现象参考资料前言 Raspberry pi pico官网介绍&#xff1a;https://www.raspberrypi.org/documentation/rp2040/getting-started/#board-specificationsESP8266官网介绍&#xff1a;https://www.es…...

CentOS系列 docker安装以及virtualenv和virtualenvwrapper的安装及使用

环境&#xff1a;CentOS7.7 以下命令若执行不成功 试着在命令开头加上sudo 1、docker # 先升级一下yum yum -y update # 设置docker的阿里源&#xff0c;如果第一步执行失败&#xff0c;就先执行下面那条&#xff0c;然后再回来执行这条&#xff1b; yum-config-manager --add…...

高分子化学顺着思路走

目录常用名&#xff08;必记&#xff09;&#xff1a;每章需要思考的内容缩聚和逐步聚合自由基聚合机理烯类单体对聚合机理的选择性引发引发剂其他的引发方式&#xff1a;热引发&#xff0c;光引发&#xff0c;辐射引发&#xff0c;等离子体引发&#xff0c;微波引发引发效率聚…...

React全家桶写一个CNode社区

webpack2reactreact-routerreact-reduxES6antd-mobile版本的Cnode https://juejin.im/post/5902c98fda2f60005def88a2?utm_sourcetuicool&utm_mediumreferral苦于我就职的公司的技术栈还是ES5jQhandelbars&#xff0c; 而我一直对React全家桶非常感兴趣&#xff0c;所以想…...

基于vue的nuxt框架cnode社区服务端渲染

nuxt-cnode 基于vue的nuxt框架仿的cnode社区服务端渲染&#xff0c;主要是为了seo优化以及首屏加载速度线上地址 http://nuxt-cnode.foreversnsd.cngithub地址 https://github.com/Kim09AI/nu... 技术栈 vuevue-routervuexnuxtaxiossimplemdeES6/7stylus目录结构 ├─npm-shrin…...

React实战入门课程:dva开发一个cnode网站(3)

完成详情页渲染&#xff0c;用到了react-markdown来渲染 先看效果&#xff1a; 1 在components下新建Detail.js import React , { Component }from react; import { Card, Avatar, Spin, Icon,Comment, Tooltip, List} from antd; import PropTypes from prop-types; import …...

react-cnode实践笔记

https://segmentfault.com/n/1330000011347905 参照http://react-china.org/t/webp...源码 这里面写得有点乱&#xff0c;看不太明白&#xff0c;所以自己学着边学边做 项目地址 https://github.com/LRY1994/re......

dva开发一个cnode网站(1)

dva 首先是一个基于 redux 和 redux-saga 的数据流方案&#xff0c;然后为了简化开发体验&#xff0c;dva 还额外内置了 react-router 和 fetch&#xff0c;所以也可以理解为一个轻量级的应用框架。本教程是利用cnode的开放api来做一个一样的网站&#xff0c;以此来学习dva框架…...

NodeJs 多核多进程并行框架实作 - CNode

NodeJs 多核多进程并行框架实作 - CNode NodeJs 多核多进程并行框架实作 - CNodeNodeJs 多核多进程并行框架实作多核编程的重要性无需多说&#xff0c; 我们直奔主题&#xff0c;目前nodejs 的网络服务器有以下几种支持多进程的方式&#xff1a;#1 开启多个进程&#xff0c;每个…...

dva开发一个cnode网站(2)

今天来学习第二节课程&#xff0c;完成列表数据的展示效果&#xff1a; 1. 新建ListData组件 import React , { Component }from react; import { List, Avatar, Icon, Spin } from antd; import PropTypes from prop-types; import { connect } from dva;class ListData exten…...

jmeter抓取cnode网站token值

前置条件&#xff1a;已经登录 1、线程组下面先添加HTTP信息头管理器 1.1 jmeter向服务器发送http请求时&#xff0c;需要验证 cookie的等设置信息给到服务器去识别&#xff0c;因此&#xff0c;在发送请求前&#xff0c;我们一般会把相关需要验证的数据添加在HTTP信息头管理器…...

关于cnode react的一比一实现

演示 点此查看程序演示github地址写在前面 本项目是学习react一个非常好的案例&#xff0c;不论是入门还是想进阶的人都能得到帮助。如果你觉得本项目确实给你带来了收获&#xff0c;记得分享给他人和 star 一下。 通过本项目&#xff0c;你可以学到&#xff1a; 一个合理的rea…...

js vue 创建一个div_Vue.js 创建一个 CNODE 社区(1)

使用 Vue.js 创建一个 CNODE 社区 (1) - 入门终于学到了 Vue&#xff0c;选的毕设是用 Vue 创建一个类似 CNODE 的社区。Vue 作为一个主要运用了 MVVM 架构的框架&#xff0c;很值得我们去学习&#xff0c;就先从 Vue 的官方网站教程中过一遍 demo&#xff0c;尽快熟悉关于 Vue…...

vue2.0版cnode社区项目搭建及实战开发

_________________________________________________________________________________________ 初涉vue就深深的被vue强大的功能&#xff0c;快速的开发能力所折服。所以就写了一个cnode社区的app来实践对vue的学习成果。也算是入坑指南吧&#xff0c;如果您觉得对您有帮助&am…...

node爬取cnode首页数据

源码如下&#xff0c;其中 cheerio类似jquery&#xff0c;具体文档 直接使用npm安装就行&#xff0c;运行 node index.js即可 const https require(https); const cheerio require(cheerio); const fs require(fs);let page 1 let endPage 50 // 最后一页 let url https…...

Vue2版Cnode社区webapp

1、 先看效果图 手机端扫码&#xff0c;pc端点击这里&#xff0c;github地址在这里&#xff0c;喜欢就给star吧&#xff5e; 2、 主要功能 1、炫酷入场动画&#xff0c;loading加载动画 2、权限验证&#xff0c;即未登录用户不能随便跳转页面&#xff08;vue-router实现&…...

分享我用cnode社区api做微信小应用的入门过程

首先感谢cnode社区提供的api&#xff0c;本次实现了简单的cnode社区应用号制作。 实现了数据的读取、展示&#xff0c; 实现了简单的布局&#xff0c; 实现了下一页功能。 下面就说说我做这个的过程&#xff0c;不足之处&#xff0c;请多多指教&#xff0c;只愿为进步。 1.创建…...

使用react写cNode项目初期------环境的配置

该项目涉及知识点&#xff1a; crate-react-app&#xff0c;通过官方提供的脚手架&#xff0c;快搭建一个项目框架 react redux&#xff0c;数据状态的管理 react-redux&#xff0c;整合react和redux redux-thunk&#xff0c;异步更新react数据请求 react-router&#xf…...

利用React 和ant-design 搭建cnode项目的随笔

文章目录利用React 和ant-design 搭建cnode项目的随笔利用create-react-app搭建一个React项目利用React 和ant-design 搭建cnode项目的随笔 利用create-react-app搭建一个React项目 利用npm包管理器创建React项目 npm init react-app cnode-hooks进入项目然后删除多余的文件…...

vue-cnode使用vue重构cnode社区

vue-cnode 欢迎star git clone https://github.com/hbbaly/vue-cnode.git使用vue写cnode网站, 我尽量用工作中规范去要求我改写这个项目&#xff0c;包括使用 BEM 来管理class类名,使用eslint来管理代码规范,只构建了三个页面,却使用了 vuex并且分了模块&#xff0c;对一些命…...

CNode社区——React实现

2019独角兽企业重金招聘Python工程师标准>>> 最近在学习react&#xff0c;学了一段时间之后&#xff0c;想找一个项目来练手&#xff0c;正好发现cnode社区提供了现成的API&#xff0c;就简单的做了一下这个网站&#xff08;功能还在持续完善中。。。&#xff09; 现…...

cnode系列之登陆注册功能

Express应用的结构其实就是R(路由)M(模型)V(视图)C(控制器)。 今天总结之前写的cnode的登陆注册功能。 前提搭好环境, mongodb redis。 R路由 var express require(express); var router express.Router(); //引入控制器 var signController require(../controller/sign);/…...

【mindspore】数据加载报错,提示The pointer[cnode] is null.

1、请问一下&#xff0c;在我执行脚本训练的时提示这个异常&#xff0c; [EXCEPTION] PYNATIVE(2834706,7f17151ac700,python):2021-11-12-10:30:18.738.479 [mindspore/ccsrc/pipeline/pynative/pynative_execute.cc:1116] GetOpOutput] : The pointer[cnode] is null. [ERRO…...