下午被一个问题困扰了好一阵,最终使用另一种方式解决。

在开始之前假设你已经成功安装一切所需,整怀着一腔热血想要抓取某网站。一起来have a try。

1. 前期基础准备。

Oh,不能在准备了,直接来。

(1) 创建项目。

输入:

[python] view plaincopy
  1. scapy startproject w3school

以上创建项目w3school。这时会产生w3school文件夹,文件夹下文件如下:

[plain] view plaincopy
  1. scrapy.cfg
  2. w3school/
  3. __init__.py
  4. items.py
  5. pipelines.py
  6. settings.py
  7. spiders/
  8. __init__.py

其中scrapy.cfg目的配置文件。主要改写的是w3school中的三个文件以及其中spiders中需要编写的爬虫。

一个一个来。

(2) 在items.py中定义Item容器。也就是编写items.py内容。

所谓Item容器就是将在网页中获取的数据结构化保存的数据结构,类似于Python中字典。下面为items.py中代码。

[python] view plaincopy
  1. #project: w3school
  2. #file   : items.py
  3. #author : younghz
  4. #brief  : define W3schoolItem.
  5. from scrapy.item import Item,Field
  6. class W3schoolItem(Item):
  7. title = Field()
  8. link = Field()
  9. desc = Field()

上面定义了自己的W3schoolItem类,它继承自scrapy的Item(这里没有显示定义W3schoolItem的__init__()方法,也正因为如此,python也会为你自动调用基类的__init__(),否则必须显式在子类的__init__()中调用基类__init__())。

之后声明W3schoolItem中元素并使用Field定义。到此items.py就OK了。

(3) 在pipelines.py中编写W3schoolPipeline实现对item的处理

在其中主要完成数据的查重、丢弃,验证item中数据,将得到的item数据保存等工作。代码如下:

[python] view plaincopy
  1. import json
  2. import codecs
  3. class W3SchoolPipeline(object):
  4. def __init__(self):
  5. self.file = codecs.open('w3school_data_utf8.json', 'wb', encoding='utf-8')
  6. def process_item(self, item, spider):
  7. line = json.dumps(dict(item)) + '\n'
  8. # print line
  9. self.file.write(line.decode("unicode_escape"))
  10. return item

其中的process_item方法是必须调用的用来处理item,并且返回值必须为Item类的对象,或者是抛出DropItem异常。并且上述方法将得到的item实现解码,以便正常显示中文,最终保存到json文件中。

注意:在编写完pipeline后,为了能够启动它,必须将其加入到ITEM_PIPLINES配置中,即在settings.py中加入下面一句:

[python] view plaincopy
  1. ITEM_PIPELINES = {
  2. 'w3school.pipelines.W3SchoolPipeline':300
  3. }


2.编写爬虫。

爬虫编写是在spider/文件夹下编写w3cshool_spider.py。

先上整个程序在慢慢解释:

[python] view plaincopy
  1. #!/usr/bin/python
  2. # -*- coding:utf-8 -*-
  3. from scrapy.spider import Spider
  4. from scrapy.selector import Selector
  5. from scrapy import log
  6. from w3school.items import W3schoolItem
  7. class W3schoolSpider(Spider):
  8. """爬取w3school标签"""
  9. #log.start("log",loglevel='INFO')
  10. name = "w3school"
  11. allowed_domains = ["w3school.com.cn"]
  12. start_urls = [
  13. "http://www.w3school.com.cn/xml/xml_syntax.asp"
  14. ]
  15. def parse(self, response):
  16. sel = Selector(response)
  17. sites = sel.xpath('//div[@id="navsecond"]/div[@id="course"]/ul[1]/li')
  18. items = []
  19. for site in sites:
  20. item = W3schoolItem()
  21. title = site.xpath('a/text()').extract()
  22. link = site.xpath('a/@href').extract()
  23. desc = site.xpath('a/@title').extract()
  24. item['title'] = [t.encode('utf-8') for t in title]
  25. item['link'] = [l.encode('utf-8') for l in link]
  26. item['desc'] = [d.encode('utf-8') for d in desc]
  27. items.append(item)
  28. #记录
  29. log.msg("Appending item...",level='INFO')
  30. log.msg("Append done.",level='INFO')
  31. return items

(1)需要注意的是编写的spider必须继承自scrapy的Spider类。

属性name即spider唯一名字,start_url可以理解为爬取入口。

(2)parse方法。

parse()是对scrapy.Spider类的override。

(3)网页中的数据提取机制。

scrapy使用选择器Selector并通过XPath实现数据的提取。关于XPath 推荐w3school的教程。

小工具:

关于网页代码中意向信息的查找可以借助几个工具:

第一个——Firefox插件Firebug。

第二个——Firefox插件XPath。可以快速的在网页中对xpath表达式的正确性进行验证。

第三个——scrapy shell.关于其使用可以查看教程。

分析:

在这里我提取的是http://www.w3school.com.cn/xml/xml_syntax.asp网页中下图部分。

即“XML 基础”下所有目录结构的名字、链接和描述。使用Firebug找到次部分对应的代码块后就可以使用XPath执行信息提取。Xpath表达式如上面代码中所示。

上面还涉及到了对item中信息的编码,是为了中文信息在json文件中的正确显示。

(4)在parse方法中还使用到了log功能实现信息记录。使用log.mes()函数即可

3.执行。

一切就绪。进入到项目目录下,执行:

[python] view plaincopy
  1. scrapy crawl w3school --set LOG_FILE=log

在目录下生成log和w3school_data_utf8.json文件。

查看生成的json文件:

OK。这就实现了针对 http://www.w3school.com.cn/xml/xml_syntax.asp中导航条部分的提取。

原文连接:http://blog.csdn.net/u012150179/article/details/32911511

scrapy研究探索(二)——爬w3school.com.cn相关推荐

  1. Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)

    原创,转载注明: http://blog.csdn.net/u012150179/article/details/34913315 基于上面的博客修改而得 一 目的 在教程(二)中使用基于Spider ...

  2. scrapy爬虫实战(二)-------------爬取IT招聘信息

    主要从智联招聘,51job,周伯通三个网站爬取IT类企业的招聘信息,并按照编程语言和职位数量和平均薪资进行统计,计算. 源代码github地址: https://github.com/happyAng ...

  3. 【EduCoder答案】Scrapy爬虫(二)热门网站数据爬取

    简介 答案查询的入口网页版 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 Scrapy爬虫(二)热门网站数据爬取 >>>查看 第1关:猫眼电影排行TOP100信息 ...

  4. Scrapy入门探索盗墓笔记

    Scrapy入门探索盗墓笔记 声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 引言 本文出自微信公众号[Python三剑客] 作者:阿K 阅读时长:5min 留言 ...

  5. Python爬虫实战使用scrapy与selenium来爬取数据

    系列文章目录 实战使用scrapy与selenium来爬取数据 文章目录 系列文章目录 前言 一.前期准备 二.思路与运行程序 1.思路 2.运行程序 三.代码 1.代码下载 2.部分代码 总结 前言 ...

  6. Scrapy框架+Gerapy分布式爬取海外网文章

    Scrapy框架+Gerapy分布式爬取海外网文章 前言 一.Scrapy和Gerapy是什么? 1.Scrapy概述 2.Scrapy五大基本构成: 3.建立爬虫项目整体架构图 4.Gerapy概述 ...

  7. pythonscrapy爬虫_Python 爬虫:Scrapy 实例(二)

    原标题:Python 爬虫:Scrapy 实例(二) 稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来.我们就从网络天气预报开始. 首先要做的是确定网络天气数据的来源.打开百度,搜索 ...

  8. python 爬虫实例-Python 爬虫:Scrapy 实例(二)

    原标题:Python 爬虫:Scrapy 实例(二) 稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来.我们就从网络天气预报开始. 首先要做的是确定网络天气数据的来源.打开百度,搜索 ...

  9. 【转载】python3安装scrapy之windows32位爬坑

    python3安装scrapy之windows32位爬坑 原创 2016年11月06日 01:38:08 标签: scrapy / windows / python / 开源框架 / 网络爬虫 早就听 ...

最新文章

  1. Mac下PHP7.1+Nginx安装和配置
  2. 腾讯Bugly异常崩溃SDK接入
  3. 窗体DataGridView控件中按回车键时,单元格向下移动,如何能改成向右移动
  4. 【Python基础】pandas中apply与map的异同
  5. hdu 2825 Wireless Password AC自动机+状态DP
  6. html的文档类型三种,XHTML文档类型
  7. 华为开启位置服务器,android 开启位置服务器
  8. 大数据学习——免密登录配置
  9. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc
  10. 权限判断 java_一个简单的关于权限判断登陆的javaBean文件
  11. JS的一些时间获取和计算公用方法封装
  12. 思科模拟器叫什么_宇宙无敌上帝视角无所不能之星球生成模拟器。
  13. swift拖放的按钮如何在后台设置点击事件 www.cnblogs.com/foxting/p/SWIFT.html
  14. pcb钻孔披锋改善报告_【热点】大族激光:大客户下单积极,公司PCB业务有望延续增势...
  15. 活学活用pic单片机c语言编程pdf,活学活用PIC单片机C语言编程
  16. hadoop权威指南-MapReduce气象程序实现过程
  17. 如何用python快速的搭建一个websocket服务器?
  18. I2S 总线学习:I2S驱动WM8978
  19. 宽带拨号连接失败,代码651
  20. lilo是什么意思_Lilo_英文名Lilo是什么意思

热门文章

  1. mybatisplus学习之通用的Service(四)
  2. 《长安十二时辰》静安司上云,云计算有杀手锏
  3. STP生成树原理及选举规则举例
  4. java usb 断开_Android P开发者选项中的USB调试关闭
  5. n1 c语言程序,C语言基础编程练习
  6. 牛津大学人类未来研究所:万字长文谈AI新职场方向-政策研究
  7. 一个关于windows服务管理的工具的源码
  8. ensp启动设备蓝屏_超全超详细的电脑蓝屏问题解决方案汇总
  9. Android Fonts
  10. 计算机本科毕业论文和毕设注意事项