Python 2.7
IDE Pycharm 5.0.3
Scrapy 1.0.3


什么是Scrapy?

Scrapy框架不多解释,这篇很详细,但是代码部分不适用于现在的Dmoz网站,什么是Scrapy框架,第一个小程序

请务必先看这个,不然看以下会云里雾里哒


起因

昨天开始接触Scrapy框架,感觉还是挺新奇的,但是跟着例子做,基本上网上的教程,几乎完全一致的对Dmoz网站进行目录抓取,测试对其title对应的link,description进行抓取,而且!代码都特么是一样的,时间久远,Dmoz网站的编码和他们出教程的时候已经不一样了,虽然,现在看来只不过是对参数进行替换而已,但对于我们这种刚接触Scrapy的小白来说,首先得依瓢画葫芦,但是这个瓢,都特么是坏的!!


遇到问题和解决方案

折腾了我差不多三个小时(见笑了),收获在于解决了:
1.IndentationError: unindent does not match any outer indentation level

问题原因:请不要使用Notepad++进行编辑,不是说不好,但是纠错能力显然没有Pycharm来得好,编辑过程中如果有拷贝代码的现象,请注意缩进!!!Python的灵魂在于缩进!

解决方案:使用Pycharm进行编辑,拷贝时候注意缩进!


2.ImportError: No module named tutorial.items

问题原因:执行路径中没有tutorial目录,所以找不到模块和包

解决方案:在dmoz_spider.py中开头加上路径的导入

import sys
try:sys.path.append("C:\\Users\\MrLevo\\Desktop\\tutorial")#每台电脑路径不一样,自己看tutorial项目在哪
except:pass
#print sys.path

然后在此之后再尝试from tutorial.items import DmozItem


3.scrapy [boto] ERROR: Caught exception reading instance data

具体表现:

问题原因:未知(以后补充)

解决方案:
1.在setting.py中加入

DOWNLOAD_HANDLERS = {'s3': None,}

2如果问题还没解决:
尝试在dmoz_spider中加入:

from scrapy import optional_features
optional_features.remove('boto')

这只是不抛出错误而已,对后续爬内容没有影响,暂且只能这么解决,dmoz还是没有出现。如果有谁知道,麻烦留言告知,先谢过。


改后的代码–第一阶段

第一阶段代码
目的:初结识,测试shell,response
以下是dmoz_spider.py代码,放在spiders文件夹下,和 init.py同一级目录。

from scrapy.spiders import Spider
from scrapy.selector import Selector
import scrapyfrom scrapy import optional_features
optional_features.remove('boto')
#为了解决scrapy [boto] ERROR: Caught exception reading instance data问题class DmozSpider(scrapy.Spider):name = "dmoz"allowed_domains = ['dmoz.org']start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/","http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):filename = response.url.split("/")[-2]with open(filename,'wb') as f:f.write(response.body)

以下是items.py代码:

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapy
class DmozlItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()link = scrapy.Field()desc = scrapy.Field()

还是不清楚的话,应该是这样的:


最初一级目录是这样的:

这都是我跑完几次之后的,上面那张图刚开始之后cfg文件和tutorial文件夹而已!这个之后说


接下来是在cmd窗口开始爬:
这是title的目录结构

在cmd窗应该这样:


这是link超链接目录结构:

取出超链接应该这样操作:


这是desc的目录结构:

需要这样操作:


至于怎么操作,为什么是sel,//,@什么的,具体看开头给的超链接,那里很详细写,我这里只放更新后的实现代码!!!



改后的代码–第二阶段

dmoz_spider.py代码
目的:将title,link,desc存储在dict中,对应起来。

import sys
try:sys.path.append("C:\\Users\\MrLevo\\Desktop\\tutorial")
except:pass
#print sys.pathfrom tutorial.items import DmozItem
from scrapy.spiders import Spider
from scrapy.selector import Selector
import scrapyfrom scrapy import optional_featuresoptional_features.remove('boto')class DmozSpider(scrapy.Spider):name = "dmoz"allowed_domains = ['dmoz.org']start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/","http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):sel = Selector(response)sites = sel.xpath('//div[@class="title-and-desc"]')items = []for site in sites:item=DmozItem()item['title'] = site.xpath('a/div/text()').extract()item['link'] = site.xpath('a/@href').extract()item['desc'] = site.xpath('div/text()').extract()items.append(item)return items

还有items代码

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapy
from scrapy.item import Item,Field
class DmozItem(Item):# define the fields for your item here like:# name = scrapy.Field()title = Field()link = Field()desc = Field()

items.py没怎么修改,就改规范了点。
正常爬应该是这样的;

很多,没截完,可以看出,对应存储在dict中了


之后就把它导出成json文件:

然后项目文件夹中会出现一个items.json文件,可以用编辑器打开,是这逼样的;

全部抓起来了,但是空格还没去,还有一些乱七八糟的/t/n什么的,我想用正则抓一下或者split试一下应该可以,主要是Scrapy的使用,累死宝宝了,再此更新下Dmoz的抓取代码。虽然很基础很基础,但是初学者需要瓢啊!!!给我们瓢啊!!不然怎么画葫芦!!!!(委屈脸)

基于Scrapy对更新后的Dmoz进行抓取(网上旧版本不靠谱)相关推荐

  1. 【Python_Scrapy学习笔记(十三)】基于Scrapy框架的图片管道实现图片抓取

    基于Scrapy框架的图片管道实现图片抓取 前言 本文中介绍 如何基于 Scrapy 框架的图片管道实现图片抓取,并以抓取 360 图片为例进行展示. 正文 1.Scrapy框架抓取图片原理 利用 S ...

  2. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统

    主权项: 1.基于Ajax的新闻网页动态数据的抓取方法,其特征是,包括如下步骤:步骤(101):建立新闻网页爬取内容数据库,设置新闻网页爬取内容数据库的编码方式:获得待抓取新闻网页的新闻列表页面的UR ...

  3. 基于深度学习的旋翼无人机机械臂抓取

    基于深度学习的旋翼无人机机械臂抓取 摘要:随着空中机器人技术的快速发展与日益成熟,无人机在越来越多的领域得到了广泛的应用.而多旋翼无人机作为最常用的无人机之一,以其体积小.运动灵活.定点悬停等优势广泛 ...

  4. 项目实战——基于计算机视觉的物体位姿定位及机械臂抓取(单目标定)

    项目实战--基于计算机视觉的物体位姿定位及机械臂抓取(单目标定) 请各位读者朋友注意,这里面很多东西涉及到我的毕设,写作辛苦,请勿滥用,转载请务必注明出处!         单目标定主要分为两个部分, ...

  5. 尝试自动重定向的次数太多_GoRod:基于DP协议的Web自动化和数据抓取工具

    在日常开发中我们经常可能会遇到这样一些情景:需要使用一些自动化的手段来帮助我们测试:在获取某些网页的数据的时候,由于目标网页的数据是动态的,使用传统的数据获取手段无法有效的抓取:需要时不时的抓取某个网 ...

  6. python抓取直播源 并更新_电视直播源抓取工具箱

    很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容. 软件简介: 经常看到大家电视直播源 ...

  7. 基于Scrapy框架的豆瓣影评及评分爬取

    一.创建爬虫项目,明确爬取信息 1.1创建Scrapy项目nz_comments 1.1.1使用交互行创建Scrapy项目 爬虫项目在Pycharm的工作目录下创建.首先复制Pycharm的工作目录. ...

  8. 基于scrapy的B站UP主信息爬取

    文章目录 思路分析 项目目录 代码 结果 思路分析 本次爬取的信息,包括UP主的mid.昵称.性别.头像的链接.个人简介.粉丝数.关注数.播放数.获赞数. 我的思路是,首先,选择一位B站比较火的UP主 ...

  9. Scrapy爬虫实战项目【003】 - 抓取360图解电影

    爬取360图解电影 原创 目的:使用Scrapy爬取360图解电影,保存至MONGODB数据库,并将图集按电影名称分类保存至本地 目标网址:http://image.so.com/z?ch=video ...

最新文章

  1. Java实现最小堆一
  2. 解决Moodle日历乱码的最佳方案
  3. 百试不爽的30条职场经验(转)
  4. 【项目实战】vue-springboot-pytorch前后端结合pytorch深度学习 html打开本地摄像头 监控人脸和记录时间
  5. 2. TypeScript笔记
  6. 几种机器学习算法的优缺点
  7. python如何处理视频_OpenCV-Python系列之视频处理入门
  8. (软件工程复习核心重点)第四章总体设计习题
  9. java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)
  10. 95-280-035-源码-资源管理-计算资源管理-TaskSlot
  11. C#、TypeScript之父Anders Hejlsberg:“会用Excel就是程序员 ”
  12. 标签select选择框通过js来选择默认值;代码示例
  13. 安防在智能家居中扮演什么角色?
  14. 蓝桥杯真题(python)+B组真题+解题链接
  15. 在linux中重启网络服务的命令,linux重启网络命令
  16. delphi网络时间校对
  17. 软键盘实例 request参数修改
  18. 百度地图比例尺与级别关系
  19. LeetCode 6036. 构造字符串的总得分和
  20. vscode使用问题合集

热门文章

  1. 如何在Windows 10中打印照片
  2. php 解压dat,如何打开dat文件?
  3. php写串口上位机,QT5串口编程—编写简单的上位机
  4. rowid会变化么_基情满满!美团amp;饿了么外卖小哥组CP出道
  5. 独身主义也不赖:选择不结婚究竟是选择了什么?
  6. 游戏辅助制作核心--植物大战僵尸逆向之植物攻击加速(六)
  7. 《活着就为改变世界:史蒂夫.乔布斯转》读书分享
  8. Type mismatch affecting row number 0 and column type 'BIGINT': Value [7] is of type [Integer] and c
  9. .net core 不能更新数据
  10. usb hub芯片 android,usb hub芯片GL850G详解