一  创建scrapy项目

  运行命令:

  

scrapy startproject 项目名称

  

  目录结构

  

二  定义Item容器

  Item是保存爬取到数据的容器,其使用方法和python字典类似,并且提供了额外的保护机制来避免拼写错误导致的未定义字段错误

  item的内容示例如下:

  

三  编写爬虫

  写在spiders文件夹下: Spider是用户编写用于从网站上爬取数据的类,其包含了一个用于下载的初始URL,然后是如何跟进网页中的链接以及如何分析页面中的内容,还有提取生成item的方法.

   spider文件的具体内容:

  

  

  在命令行运行:

    

scrapy crawl 爬虫名称(此处即为spider中name的名称,这也是为什么name不能重复的原因)

  对页面进行爬取

  注:

    一  第一行的 # -*- coding: UTF-8 -*-  是当出现“Non-ASCII character 'xe5' in file”报错问题时加上,

    出现问题的原因:

      Python默认是以ASCII作为编码方式的,如果在自己的Python源码中包含了中文(或者其他非英语系的语言),此时即使你把自己编写的Python源文件以UTF-8格式保存了,但实际上,这依然是不行的。解决的办法只要在上面的开头部分加上上面的那一句话即可

   

  从爬取下来的页面源码中找出我们所需要的信息的方法:

    一  使用正则表达式

    二  在scrapy中, 我们可以使用一种基于XPath 和 CSS 的表达机制:Scrapy Selectors(选择器)

    

    Selectors(选择器),四个基本的方法:

    xpath():传入xpath表达式,返回表达式所对应的所有节点的selector list 列表

    css(): 传入css表达式,返回表达式所对应的所有节点的selector list 列表

    extract():序列化该节点为unicode字符串并返回list

    re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串的列表

在命令行中运行scrapy shell 对爬取的网页进行分析

在shell 中输入response.headers,正确返回网页的头部信息即可

接下来可以是使用上述的四个方法对页面进行分析

  使用XPath对页面进行分析:

    XPath是一门在网页中查找特定信息的语言,所以用XPath来筛选数据,要比正则表达式容易些

  XPath 的用法如下:

    /html/head/title: 表示选择HTML文档中<head>标签内的<title>元素

    /html/head/title/text():表示选择上面提到的<title>元素的文字

    //td: 表示选择所有的<td>元素

    //div[@class="mine"]: 表示所以具有class="mine"属性的div元素

  response.xpath() == response.selector.xpath()

例如:使用response.xpath('//title'),  //后面跟着一个标签的名字,表示选出所以标签为title的元素,如下,返回的是一个selector对象的列表

下面对返回的列表进行字符串化,可以使用extract()方法,返回的是一个unicode 的字符串

获取title中的文字,在后面加上/text()即可

取出所有的tag标签

获取所有的标题和链接

四  存储内容

  使用item容器,将上述爬取和筛选后的内容存入到item容器之中,在使用之前我们必须将item导入到spider中

  

  然后修改parse函数

  

  最后将数据导出,导出爬取的数据有四种格式(json,csv,xml等)

  运行如下命令:

scrapy crawl haha -o items.json -t json 

# 此处 -o 后面跟导出的文件名 -t 后面跟的是导出的形式

成功生成item.json文件

至此,第一个scrapy爬虫就宣告完毕了!!!

scrapy初探的更多相关文章

  1. scrapy初探(一)-斗鱼TV直播信息抓取

    由于有相关需求,最近两天开始学了一下scrapy 这次我们就以爬取斗鱼直播间为例,我们准备爬取斗鱼所有的在线直播信息, 包括1.主播昵称 2.直播领域 3.所在页面数 4.直播观看人数 5.直播间ur ...

  2. python之scrapy初探

    1.知识点 """ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取 Scrapy模块: 1.schedul ...

  3. scrapy架构初探

    scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...

  4. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  5. 第一节:Scrapy开源框架初探

       Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.  具体开发流程如下:   一.确定待抓取网站 当您需要从某 ...

  6. Scrapy的架构初探

    Scrapy,Python开发的一个web抓取框架. 1,引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想 ...

  7. Scrapy框架初探

    Scrapy 貌似是 Python 最出名的爬虫框架 0. 文档 中文文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.ht ...

  8. 【网络爬虫】【python】网络爬虫(五):scrapy爬虫初探——爬取网页及选择器

    在上一篇文章的末尾,我们创建了一个scrapy框架的爬虫项目test,现在来运行下一个简单的爬虫,看看scrapy爬取的过程是怎样的. 一.爬虫类编写(spider.py) from scrapy.s ...

  9. Python爬虫 ---scrapy框架初探及实战

    目录 Scrapy框架安装 操作环境介绍 安装scrapy框架(linux系统下) 检测安装是否成功 Scrapy框架爬取原理 Scrapy框架的主体结构分为五个部分: 它还有两个可以自定义下载功能的 ...

随机推荐

  1. vue-transition-fade

    <!Doctype> <html> <head> <meta charset="utf-8"> <meta name=&quo ...

  2. 图论:费用流-SPFA+EK

    利用SPFA+EK算法解决费用流问题 例题不够裸,但是还是很有说服力的,这里以Codevs1227的方格取数2为例子来介绍费用流问题 这个题难点在建图上,我感觉以后还要把网络流建模想明白才能下手去做这 ...

  3. AOP编程的常用实现方式

    aop代理分为静态代理.jdk动态代理.cglib动态代理 通过动态代理的方式实现横向扩展,实现权限校验.日志等功能. jdk静态代理:代理类和委托类实现同一接口,并且在代理类中需要硬编码接口. jd ...

  4. openlayers3中应用proj4js

    要在openlayers3中应用proj4js,需要在html中引用proj4js,然后在引用所需要的projection的js定义,如 http://epsg.io/21781-1753.js 然后 ...

  5. [bzoj3876][AHOI2014]支线剧情——上下界费用流

    题目 传送门 题解 建立s和t,然后s向1连下限0上限inf费用0的边,除1外所有节点向t连下限0上限inf费用0的边,对于每条边下限为1上限为inf费用为经过费用,然后我们只有做上下界网络流构出新图 ...

  6. CF 200 div.1 A

    2013-10-11 16:45 Rational Resistance time limit per test 1 second memory limit per test 256 megabyte ...

  7. UpdateData的用法(转)

    原文转自 https://blog.csdn.net/ddjj_1980/article/details/51452289 UpdateData(TRUE)——刷新控件的值到对应的变量.(外部输入值交 ...

  8. iptables 用法及常用模块总结

    iptables传输数据包的过程: 1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去. 2. 如果数据包就是进入本机的,它就会沿着图向下移动, ...

  9. [ MongoDB ] 分片集群及测试

    分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量. ...

  10. 使用kubeadm安装kubernetes1.12.1

    kubeadm是kubernetes官方用来自动化高效安装kubernetes的工具,手动安装,特别麻烦. 使用kubeadm安装无疑是一种不错的选择. 1.环境准备 1.1系统配置 系统是CentO ...