scrapy野蛮式爬取(将军CrawlSpider,军师rules)

    如果将Spider比作scrapy爬虫王国的一个元帅,那CrawlSpider绝对是元帅手底下骁勇善战的将军。而其rules,便是善于抽丝剥茧的军师。

以下便记录以下一个CrwalSpider的作战过程。

1、    首先创建scrapy项目

                                       python      -m      scrapy   startproject    项目名称

2、    创建CrawlSpider

                                       python       -m      scrapy genspider    -t    crawl     蜘蛛名     域名

    python     -m  详细内容可见                https://zhuanlan.zhihu.com/p/91120727

此时我们便已经创建好了基础的CrawlSpider

其中项目中的域名与起始url我们都可以自己手动修改。我们可以将不同的url入口放在start_urls中列表中,从而从不同起点开始爬取整个网站。爬虫开始后首先从start_urls列表中提取开始请求的url,然后其解析的response交给rules,rules通过LinkExtractor中的各种筛选url的方式,挑选出我们想要请求的url,,自动请求后将response通过callback返回给相应的回调函数。从而解析出我们想要的内容。

3、Rule里边参数解析

1、 LinkExtractor

LinkExtractor筛选方式:

其具体参数有:(可查看scrapy官方文档,搜索关键词:LinkExtractor)

主要用到:

1、 allow    定义从start_url请求来的response中哪些链接使我们要的。其为一个正则表达式或者正则表达式列表形式写出。

                      如: allow=r'http.*?.html' ,可以描述为允许提取http.............html类似的链接。

2、restrict_xpaths('')     直接放入表达式即可

3、restrict_css('')        如: 可表述为:只要id为mainbody里的ul里的li里的a里边的链接。

其余方法看需要使用。LinkExtractor中可以使用多个筛选方式,用 “,”隔开即可

2、 callback

callback 将把LinkExtractor解析出来的链接请求之后的response回调给一个函数。函数接收该response后即可直接解析内连接内容。

注意:callback不可回调给parse。此处 parse已被默认去做了其它事情。如果重新定义一个parse来接受response,爬虫将可能无法工作。

3、cb_kwargs

它是一个字典格式的数据,里边包含了要传给回调函数的参数,

4、process_links

根据LinkExtractor中的条件过滤链接。

5、 process_request

 去请求url

本人刚学习scrapy,所以了解不是很深。我现在的理解是process_links是用来根据LinkExtractor筛选出链接,然后process_request去请求这些筛选后的链接,最后得到的response通过callback回调给相应函数,从而进行下一步对数据的处理。(如果理解不对,请大家指正。谢谢!)

通过定义一个Rule我们便可以实现当前页面的所有详情页的请求,如果再定义一个Rule去把其他页面的url提取出来便可以实现网页垂直与横向爬取。从而一步步爬完整个网站。

另外发现rules的强大之处,其不需要我们再去构造完整的url。它可以结合我们的域名再结合提取的网页的相对地址,自动构造出完整的url。从而去实现更为方便的爬取。这也是算是比较惊喜的一个地方。

 

最后总结一下,CrawlSpider,通过start_urls制定爬取起点,通过rules制定两个(或多个)Rules规则,通过callback回调,便可以实现网页的深度、广度爬取。同时能够使我们对想要爬取的部分作出更为清晰的定义,其自动构造url的绝对路径能够极大的简化传统spider中url构造部分。

                                                          

                                                                                                                                                                         PS:小胖胖的猪崽

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音合成(speech synthesis)两种方法-拼接合成和参数合成

TTS(Text To Speech)是一个序列到序列的匹配问题。处理TTS的方法一般分为两部分:文本分析和语音合成(speech synthesis)。文本分析可能采用NLP方法。 而在语音合成(speech synthesis)上有两种主…

一分钟告诉你可以合成声音的手机软件

前端时间有位朋友和我分享了一段立体声的纯音乐。我觉得它听起来十分的悦耳,于是便网上查找了一些关于声音合成立体声的软件。经过我一番搜寻之后,终于找到了几个简单易上手的软件。今天借这个机会,也给大家分享一下这些软件吧!如…

语音合成:模拟最像人类声音的系统

近年来随着深度学习技术的不断发展,语音合成技术也取得了突破性进展,也成为了很多设备的标配。比如siri通过手机跟我们讲冷笑话,车载音箱实时播报汽车的行进路线等等无不用到语音合成。 并且,深度神经网络在语音合成模型与声码器中…

【点灯科技+esp8266+小爱同学】实现语音控制的米思齐代码和arduino代码

以下转换后的arduino代码。 #define BLINKER_WIFI #include <Blinker.h> char auth[] = "点灯分配的密钥"; char ssid[] = "你的wifi"; char pswd[] = "wifi密码"; void miotPowerStatedata(const String & data){ if (data == BL…

首页 系统相关 正文 小米手机远程和电脑互相连接及控制的方法

【文章摘要】Windows系统自带了一个远程桌面服务&#xff0c;我们可以很方便利用这个服务来进行远程桌面控制&#xff0c;很多人会用电脑进行远程终端登陆&#xff0c;用手机进行远程桌面访问的人就不多了。下面详细给大家说明。 原文链接&#xff1a;http://bbs.xiaomi.cn/thr…

8. R语言绘图系统介绍、高级绘图与低级绘图、【绘图参数】、绘图函数包

b站课程视频链接&#xff1a; https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新&#xff0c;但是要花钱&#xff0c;我花99&#x1f622;&#x1f622;元买了&#xff0c;感觉讲的没问题&#xff0c;就是知识点结构有点乱&#xff0c;有点废话&#xff09;&…

R语言画图/绘图/作图2

R语言画图/绘图/作图2 动画气泡图 可以使用该gganimate包实现动画气泡图。它与气泡图相同&#xff0c;但是&#xff0c;您必须显示值如何在第五维&#xff08;通常是时间&#xff09;上变化。 要做的关键是将 设置为aes(frame)要在其上设置动画的所需列。其余与地块建设相关的程…

R语言之ggplot2画图篇

1. qplot quick plot 数据集&#xff1a;diamonds &#xff08;1&#xff09;基本用法 eg library(ggplot2) length(diamonds) set.seed(1410)#设定种子数 dsmall<-diamonds[sample(nrow(diamonds),100),]#随机产生样本数 qplot(carat,price,datadiamonds)#画散点图 qpl…

R语言中的高级绘图

1、散点图 attach(mtcars) plot(wt, mpg, main"Basic Scatterplot of MPG vs. Weight", xlab"Car Weight (lbs/1000)", ylab"Miles Per Gallon ", pch19) ablin…

R语言常用的绘图参数

1.点线结构参数 在plot函数中&#xff0c;使用参数type来控制点线输出结构 参数type的取值及定义 参数取值 描述 typep 点 typel线 typeb 点连线 typeo 线穿过点 typeh 悬垂线 types 阶梯线 xc(2,4,6,8,10) xts(x,startc(2010,1)) #将x转换成时序数据&#xff0c…

R语言ggplot2|玩转Manhattan图-你有被要求这么画吗?

Manhattan图算是GWAS分析的标配图了&#xff0c;可参考Bio|manhattan图 进行绘制。 由于Manhattan点太多&#xff0c;后期AI/PS修改的话难度有点大&#xff0c;如果可以“个性化”绘制的话那是极好的&#xff01; 一 载入R包&#xff0c;数据 1&#xff09;载入数据处理的tidyv…

[R语言绘图]plot函数的使用

R语言中最简单的一个绘图函数就是plot了。如果之前用过matlab&#xff0c;用R画图的时候就很可能会尝试plot这个命令能不能使用。plot(a)一般就能得到我们想要的图。但是&#xff0c;如果想进一步设置其他属性&#xff0c;如标题、x轴名称、y轴名称等&#xff0c;还需要对另外的…

R语言绘图之ggplot2

一.基础知识 首先载入tidyverse包 # install.packages("tidyverse") library(tidyverse) 这一行代码加载了tidyverse的核心R包。在几乎所有的数据分析任务中&#xff0c;你都会用到这些R包。这行代码还会告诉你tidyverse中的哪些函数与基础R包&#xff08;或者已加…

R语言(ggplot2绘图)

原文链接&#xff1a;https://wklchris.github.io/R-ggplot2.html ggplot2 的语法与 R 原生的语法并不统一&#xff0c;但是熟悉起来也并不复杂。它主要通过“”连接多个绘图函数&#xff0c;同时允许将绘图结果赋值给其他对象&#xff0c;因此使用起来更加灵活。 ggplot2 最为…

R语言绘图——实用篇 ggplot2绘图

文章目录 R语言绘图——实用篇 ggplot2绘图绘制等值线图相关如何绘制等值线图插值&#xff0c;平滑插值插值&#xff0c;缺失值插值色条(色阶)划分图例的色条(色阶)修改&#xff0c;合理的参数值选用图例的色条(色阶)修改&#xff0c;刻度线修改无效或不显示的问题 地图绘制相关…

R语言ggplot绘图

一、R语言ggplot2绘折线图 读取文件放置的位置&#xff0c;赋予数组名称 library(ggplot2) setwd("E:\\Buffer\\My work\\ggplot_data") diameter <- read.csv("0.031_0.062_ggplot_try.csv", stringsAsFactors FALSE)看看数组里的各种内容 class(d…

R语言基础画图/绘图/作图

R语言基础画图 R语言免费且开源&#xff0c;其强大和自由的画图功能&#xff0c;深受广大学生和可视化工作人员喜爱&#xff0c;这篇文章对如何使用R语言作基本的图形&#xff0c;如直方图&#xff0c;点图&#xff0c;饼状图以及箱线图进行简单介绍。 0 结构 每种图形构成一…

R语言ggplot2绘图

R语言绘图之ggplot2 一.绘图的基本要素1.图形映射2.分面&#xff1a;3.添加平滑曲线 二.绘制条形图设置坐标抽格式 一.绘图的基本要素 首先载入tidyverse包 install.packages("tidyverse") library(tidyverse)​​​​这一行代码加载了tidyverse的核心R包。在几乎所…

R语言---ggplot绘图

散点图 堆积柱形图 library(ggplot2)ggplot(mtcars,aes(mpg,wt))geom_point()簇状柱形图 library(ggplot2) ggplot(mtcars,aes(factor(cyl),fillfactor(am)))geom_bar()直方图 密度图 library(ggplot) ggplot(mtcars,aes(factor(cyl),fillfactor(am)))geom_bar(position&qu…

R语言绘图基础

目录 一、R语言的基本绘图函数 1、高级绘图函数 &#xff08;1&#xff09;plot函数 &#xff08;2&#xff09;其他高级绘图函数 2、低级绘图函数 二、图形参数与图形控制 1、绘图参数 2、图形控制 3、图形颜色 &#xff08;1&#xff09;颜色名称 &#xff08;2&#…