目录结构:

|写在前面:

|依葫芦画瓢:

|       | 安装:

|       | 概述:

|       | 创建一个scrapy项目

|       | 第一个scrapy蜘蛛

|      | 运行蜘蛛

|       | scrapy调试工具

|       | css提取工具的用法(初)

|详解Scrapy

|       | 如何打开页面?

|       | 如何提取数据?

|       |    css选择器提取数据

|       |    |       标签属性值提取

|       |    |       标签内容提取

|       |    |       标签嵌套

|       |    xpath选择器提取数据

|       |    |       标签属性值提取

|       |    |       标签内容提取

|       |    |       标签嵌套

|       | scrapy命令行工具

|       |     |全局命令

|       |     |项目命令

写在前面:

最近公司因业务需求,需要爬取网络上一些兼职开发人员的简历信息。临危受命,便开始了爬虫之路。(Ps:下一篇文章将介绍爬取的记录,敬请关注)其实,爬虫在大二上的时候杨凌云老师有讲过这门课,只可惜那时候痴迷于Java,没怎么花心思在爬虫上面。(Ps:杨老师请收起你那40米长大刀^0^)之前大家都说爬虫很简单的只需要一点python基础就行了。好吧,pyhton基础还是有一点的,毕竟在大一下张荣臻老师还是有印象的。和我学习其它新东西一样,一切从0开始循序渐进,找了个好的教程,对照着它一步步学习,到现在发现爬虫还是挺简单的,网页上大部分数据还是能轻松爬取得到。就目前而言,已经足够了,毕竟选择了Java重点还是以Java为主,现在有接触需要用到爬虫,那就索性花点时间来丰富自己的技术栈吧。本文重点不会很深入去展开说里面的细节实现,只是带着学习过之后再回过头看看做个记录再理解理解有个印象,下次有需要稍微看一下,便能立马使用为出发点。http://www.scrapyd.cn/doc/我学习的网站,讲的还是挺不错的。稍微看个2-3天就差不多就能熟练应用了。起初,我也没啥太大自信觉得太难了,自己学不会,但后来发现是我多余了,仔仔细细多读几次,自己亲手把里面介绍的方法多敲一敲就会了。加油!相信自己!

依葫芦画瓢:

安装

Python、anaconda、pycharm、TensorFlow之间的关系及安装捷径

https://blog.csdn.net/huiyanfei/article/details/80175780

  1. anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因此,无需单独安装Python,直接安装一个anaconda就拥有了包含Python的开发包。

    Ps:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

    清华大学开源软件镜像站,下载速度快一点。建议从这里下载。

  2. PyCharm是一种Python IDE。类似于Java的Idea。

  3. 先安装anaconda,然后安装pycharm,在pycharm中将项目的Python运行环境设置为anaconda安装路径中的Python。

概述

scrapy是一个网页爬虫框架。

扩展阅读:

cola一个分布式爬虫框架。

PySpider国人编写的强大的网络爬虫系统并带有强大的WebUI。

创建一个scrapy项目

scrapy startprojecqwe】

选取一个文件夹在CMD中创建一个叫qwe的项目,然后再pychram中打开即可。

第一个scrapy蜘蛛

import scrapyclass My_First_Spider(scrapy.Spider):name = "SpiderName"     #定义一个蜘蛛名字#用简化的方法,我们必须定义一个方法为:def parse(self, response),方法名一定是:parse
#简化start_requests(self)start_urls = [  # 另外一种写法,无需定义start_requests方法'http://lab.scrapyd.cn/page/1/','http://lab.scrapyd.cn/page/2/',]def start_requests(self):  # 由此方法通过下面链接爬取页面# 定义爬取的链接urls = ['http://lab.scrapyd.cn/page/1/','http://lab.scrapyd.cn/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse)  # 爬取到的页面如何处理?提交给parse方法处理def parse(self, response):'''start_requests已经爬取到页面,那如何提取我们想要的内容呢?那就可以在这个方法里面定义。这里的话,并木有定义,只是简单的把页面做了一个保存,并没有涉及提取我们想要的数据,后面会慢慢说到也就是用xpath、正则、或是css进行相应提取,这个例子就是让你看看scrapy运行的流程:1、定义链接;2、通过链接爬取(下载)页面;3、定义规则,然后提取数据;就是这么个流程,似不似很简单呀?'''page = response.url.split("/")[-2]     #根据上面的链接提取分页,如:/page/1/,提取到的就是:1filename = 'mingyan-%s.html' % page    #拼接文件名,如果是第一页,最终文件名便是:mingyan-1.htmlwith open(filename, 'wb') as f:        #python文件操作,不多说了;f.write(response.body)             #刚才下载的页面去哪里了?response.body就代表了刚才下载的页面!self.log('保存文件: %s' % filename)      # 打个日志


运行蜘蛛

scrapy crawl 蜘蛛名】

①运行蜘蛛crawl后面跟的是你类里面定义的蜘蛛名,也就是:name ="SpiderName"

②一定要进入:qwe这个目录,也就是我们创建的蜘蛛项目目录,以上命令才有效!

③运行发现报SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xd2 in position 23: invalid continuation byte错误。在你刚才创建的python文件最头上加上# -*-coding:GBK -*-OK,再运行一切正常。

scrapy调试工具

scrapy shell你要爬取的网址】调试(提取)数据

scrapy提取数据的几种方式:CSSXPATHRE(正则)

自己敲一敲 就知有木有!那个学习的网站给出的例子。

css提取工具的用法(初)

  • response.css('标签名'),标签名的话可以是html标签比如:title、body、div,也可以是你自定义的class标签。

In [1]: response.css('title')

Out[1]: [<Selector xpath='descendant-or-self::title' data='<title>程序员兼职,程序员远程私活平台-程序员客栈</title>'>]

  • extract()函数提取我们标签的一个列表

In [2]: response.css('title').extract()

Out[2]: ['<title>程序员兼职,程序员远程私活平台-程序员客栈</title>']

  • extract()[0] & extract_first()提取这个列表中的第一个元素

In [3]: response.css('title').extract()[0]

Out[3]: '<title>程序员兼职,程序员远程私活平台-程序员客栈</title>

In [4]: response.css('title').extract_first()

Out[4]: '<title>程序员兼职,程序员远程私活平台-程序员客栈</title>

  • ::text提取标签里面的数据

In [7]: response.css('title::text').extract()

Out[7]: ['程序员兼职,程序员远程私活平台-程序员客栈']

In [8]: response.css('title::text').extract()[0]

Out[8]: '程序员兼职,程序员远程私活平台-程序员客栈'

In [9]: response.css('title::text').extract_first()

Out[9]: '程序员兼职,程序员远程私活平台-程序员客栈'

  • 提取一组数据

每一段名言都被一个 <div class="quote post">……</div> 包裹。

提取的是第一段名言里面的数据,然后保存在mingyan1变量里面,再进一步提取里面的以上数据。

mingyan1 = response.css('div.quote')[0]

[0] 这表示提取第一段,如果没有这个限制,那我们提取的是本页所有名言。

text = mingyang1.css('.text::text').extract()[0]    # 提取名言

autor = mingyang1.css('.author::text').extract()[0]     # 提取作者

tags = mingyang1.css('.tag::text').extract()   # 提取标签

tags = ','.join(tags)      # 数组转换为字符串

  • scrapy 列表爬取

递归调用

mingyan = response.css('div.quote')  # 提取首页所有名言,保存至变量mingyan

# mingyan 这个数据集里面的数据,循环赋值给:v 第一次循环的话 v 就代表第一条数据

for v in mingyan:  # 循环获取每一条名言里面的:名言内容、作者、标签text = v.css('.text::text').extract_first()  # 提取名言autor = v.css('.author::text').extract_first()  # 提取作者tags = v.css('.tags .tag::text').extract()  # 提取标签tags = ','.join(tags)  # 数组转换为字符串fileName = '%s-语录.txt' % autor  # 定义文件名,如:木心-语录.txt# 接下来,进行保存with open(fileName, "a+") as f:  # 不同人的名言保存在不同的txt文档,“a+”以追加的形式f.write(text)f.write('\n')  # ‘\n’ 表示换行f.write('标签:' + tags)f.write('\n-------\n')f.close()
  • 全站爬取

重点:如何把链接提交给本方法或是另一个方法,进行进一步爬取!

提取属性 标签名::attr(属性名)----> <a href="http://lab.scrapyd.cn/page/1/">

next_page = response.css('li.next a::attr(href)').extract_first() if next_page is not None:next_page = response.urljoin(next_page)
#如果存在的话,我们使用:response.urljoin(next_page)把相对路径,
#如:page/1转换为绝对路径。其实也就是加上网站域名,如:http://lab.scrapyd.cn/page/1;yield scrapy.Request(next_page, callback=self.parse)
#①:我们继续爬取的链接(next_page),这里是下一页链接,当然也可以是内容页。
#②:我们要把链接提交给哪一个函数爬取,这里是parse函数,也就是本函数。
  • 指定蜘蛛参数爬取

scrapy crawl  argsSpider -a tag=标签名】指定蜘蛛参数爬取

def start_requests(self):

url = 'http://lab.scrapyd.cn/'

tag = getattr(self, 'tag', None)  # 获取tag值,也就是爬取时传过来的参数

if tag is not None:  # 判断是否存在tag,若存在,重新构造url

url = url + 'tag/' + tag  #构造url若tag=爱情,url= "http://lab.scrapyd.cn/tag/爱情"

yield scrapy.Request(url, self.parse)  # 发送请求爬取参数内容

详解Scrapy

如何打开页面?

  • 一种作为类的常量

start_urls = [ #另外一种写法,无需定义start_requests方法
'http://lab.scrapyd.cn/page/1/',
'http://lab.scrapyd.cn/page/2/',
]
  • 一种作为start_requests(self)方法的常量

def start_requests(self):  # 由此方法通过下面链接爬取页面
#定义爬取的链接urls = ['http://lab.scrapyd.cn/page/1/','http://lab.scrapyd.cn/page/2/',]for url in urls:#发送请求#爬取到的页面如何处理?提交给parse方法处理yield scrapy.Request(url=url, callback=self.parse)
  • scrapy.Request方法发送请求请求页面

  • def parse(self,response):返回页面

如何提取数据?

----css选择器提取数据

1.标签属性值提取

标签名::attr(属性名)

找到我们要提取目标最近的class或是id。代码中有个class="page-navigator"

response.css(".page-navigator  a::attr(href)").extract()

In [23]: response.css("ol.page-navigator  a::attr(href)").extract()[0]

Out[23]: 'http://lab.scrapyd.cn/page/1/'

In [24]: response.css("ol.page-navigator  a::attr(href)").extract()

Out[24]:

['http://lab.scrapyd.cn/page/1/',

'http://lab.scrapyd.cn/page/2/',

'http://lab.scrapyd.cn/page/3/',

'http://lab.scrapyd.cn/page/4/',

'http://lab.scrapyd.cn/page/6/',

'http://lab.scrapyd.cn/page/2/']

.点代表class选择器,如果代码中是:id=“page-navigator”,那我们这里就要写成#page-navigator

2.标签内容提取

::text

In [4]: response.css("title::text").extract()[0]

Out[4]: '泰戈尔 - SCRAPY爬虫实验室 - SCRAPY中文网提供'

3.标签嵌套

*::text()

最常用的提取方式:含有嵌套标签文字的提取

<div itemprop="articleBody">

<p>如果你因失去了太阳而流泪,那么你也将失去群星了。<br>

If you shed tears when you miss the sun, you also miss the stars.

</p>

<p>

<a href="http://www.scrapyd.cn">scrapy中文网(</a><a href="http://www.scrapyd.cn">http://www.scrapyd.cn</a>)整理

</p>

</div>

response.css(".post-content *::text")

::text前面有个“*”号,这是一个小技巧

-----xpath选择器提取数据

1.标签属性值提取

//    从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

@   选取属性。

限定范围:标签[@属性名='属性值']

In [10]: response.xpath("//ol[@class='page-navigator']//@href")

Out[10]:

[<Selector xpath="//ol[@class='page-navigator']//@href" data='http://lab.scrapyd

.cn/page/1/'>,

<Selector xpath="//ol[@class='page-navigator']//@href" data='http://lab.scrapyd

.cn/page/2/'>,

<Selector xpath="//ol[@class='page-navigator']//@href" data='http://lab.scrapyd

.cn/page/3/'>,

<Selector xpath="//ol[@class='page-navigator']//@href" data='http://lab.scrapyd

.cn/page/4/'>,

<Selector xpath="//ol[@class='page-navigator']//@href" data='http://lab.scrapyd

.cn/page/6/'>,

<Selector xpath="//ol[@class='page-navigator']//@href" data='http://lab.scrapyd

.cn/page/2/'>]

2.标签内容提取

//text()

In [4]: response.xpath("//title//text()").extract()

Out[4]: ['SCRAPY爬虫实验室 - SCRAPY中文网提供']

In [5]: response.xpath("//ul[@class='tags-list']//a//text()").extract()

Out[5]:

['\r\n         人生',

'\r\n         励志',

'\r\n         爱情',

'\r\n         王尔德',

'\r\n         智慧',

'\r\n         泰戈尔',

'\r\n         绝世好词',

'\r\n         木心',

'\r\n         艺术',

'\r\n         名画',

'\r\n         生活',

'\r\n         词',

'返回首页',

'SCRAPY中文社区',

'SCRAPY中文网']

3.标签嵌套

string(要提取内容的标签)

主要是提取一些内容页,里面标签夹杂着文字,但我们只要文字!

<div itemprop="articleBody">

<p>如果你因失去了太阳而流泪,那么你也将失去群星了。

<br>If you shed tears when you miss the sun, you also miss the stars.

</p>

<p><a href="http://www.scrapyd.cn">scrapy中文网(</a><a href="http://www.scrapyd.cn">http://www.scrapyd.cn</a>)整理</p>

</div>

response.xpath("string(//div[@class='post-content'])").extract()

scrapy命令行工具

*scrapy deploy scrapy1.0之后这个命令就被独立成了一个模块。部署命令。

----全局命令

在哪都能用

  • 【startproject】

  • 【genspider】创建蜘蛛模板

scrapy genspider 蜘蛛名 要爬取地址

  • 【settings】

scrapy settings --get DOWNLOAD_DELAY  蜘蛛的下载延迟

scrapy settings --get BOT_NAME 获取蜘蛛名

  • 【runspider】

scrapy runspider My_First_Spider.py 按照scrapy的蜘蛛格式编写了一个py文件(无需创建项目) 即可运行

  • 【shell】

  • 【fetch】

scrapy fetch http://www.scrapyd.cn >d:/3.html

把它的html代码拿下来看看,到底有木有我们想要的那个标签节点,如果木有的话,你就要明白我们需要使用js渲染之类的技术!

----项目命令

只能依托你的项目 需要在项目文件夹下面打开CMD命令

  • scrapy crawl 蜘蛛名 运行蜘蛛

  • scrapy check 检查蜘蛛

  • scrapy list 显示有多少个蜘蛛

爬虫Scrapy框架初体验相关推荐

  1. python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...

    小猪的Python学习之旅 -- 4.Scrapy爬虫框架初体验 Python 引言: 经过前面两节的学习,我们学会了使用urllib去模拟请求,使用 Beautiful Soup和正则表达式来处理网 ...

  2. python cookie池_Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

    下载代码Cookie池(这里主要是微博登录,也可以自己配置置其他的站点网址) 下载代码GitHub:https://github.com/Python3WebSpider/CookiesPool 下载 ...

  3. python scrapy爬虫视频_python爬虫scrapy框架的梨视频案例解析

    之前我们使用lxml对梨视频网站中的视频进行了下载 下面我用scrapy框架对梨视频网站中的视频标题和视频页中对视频的描述进行爬取 分析:我们要爬取的内容并不在同一个页面,视频描述内容需要我们点开视频 ...

  4. Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

    这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...

  5. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

  6. 自然语言处理NLP星空智能对话机器人系列:Facebook StarSpace框架初体验

    自然语言处理NLP星空智能对话机器人系列:Facebook StarSpace框架初体验 目录 Facebook StarSpace github StarSpace 安装部署 编译星际空间 Face ...

  7. Python爬虫—Scrapy框架—Win10下载安装

    Python爬虫-Scrapy框架-Win10下载安装 1. 下载wheel 2.下载twisted 3. 下载pywin32 4. 下载安装Scrapy 5. 创建一个scrapy项目 6. fir ...

  8. 【Flask框架】一. Flask框架初体验(配置环境 + 简单demo样例)

    文章目录 一. Flask框架初体验(配置环境 + 简单demo样例) 虚拟环境 新建项目 将Pycharm改为FLASK_DEBUG模式 修改FLASK_DEBUG模式的步骤 配置文件 简单用法 U ...

  9. Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider

    Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider 写在前面 初探Crawl Spider 创建Crawl Spider项目 对比Basic与Crawl ...

最新文章

  1. 看看专科程序员与本科程序员之间,到底有什么区别?
  2. 如何查看 phtml文件 并有代码颜色提示
  3. Linux终端关闭屏幕显示,使用命令行关闭监视器
  4. Node+Vue实现对数据的增删改查
  5. 程序编码(机器级代码+汇编代码+C代码+反汇编)
  6. git 初步使用01
  7. 证明AVL树的上界和下界
  8. 实战GraphQL+express+mysql项目完整demo
  9. jqgrid表格下拉搜索多选框优化—使用select下拉多选插件
  10. java中的List排序[转]
  11. css文字竖直显示_CSS属性设置 -- 盒子模型
  12. xilinx sdk对文本内容进行查找(find/replace)的快捷键ctrl+f
  13. oracle期末试题及答案,oracle期末考试试题及答案
  14. phpwamp mysql_PHPWAMP配置修改与Web服务器和php以及mysql的具体配置修改
  15. 皮尔逊相关系数_SPSS篇——皮尔逊相关
  16. 大数据管理平台-数据处理与数据集市
  17. 图像滤镜处理算法:灰度、黑白、底片、浮雕
  18. JS实现动态生成表格
  19. sed删除代码空行和删去行尾空白
  20. vue-router路由的安装、配置、具体用法和Vue-router学习笔记

热门文章

  1. 20230111英语学习
  2. 专为实习生开发的一款程序:实习宙
  3. [转] 张亚勤:网络是泡沫吗?(2001年微软亚洲研究院院长话题)
  4. python测验7答案_中国大学MOOC的APP(慕课)2021用Python玩转数据章节测验答案
  5. 美术理科生能报计算机专业吗,理科艺术生有哪些专业 理科生能报的大学
  6. IE捉迷藏bug详解
  7. 深度学习优化算法:RMSProp算法
  8. matlab广义误差分布,利用广义帕累托分布对尾数据建模
  9. 搜狗 2020.04
  10. python零基础到实践——起步