初探scrapy,发现很多入门教程对应的网址都失效或者改变布局了,走了很多弯路。于是自己摸索做一个笔记。

环境是win10 python3.6(anaconda)。

安装

  1. pip install scrapy

由于是第一次尝试,这次爬取美剧天堂(http://www.meijutt.com/)以下模块的剧名:

1.创建工程

  1. scrapy startproject movie

2.编辑items.py,设置数据存储模版

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define here the models for your scraped items
  4. #
  5. # See documentation in:
  6. # http://doc.scrapy.org/en/latest/topics/items.html
  7.  
  8. import scrapy
  9.  
  10. class MovieItem(scrapy.Item):
  11. # define the fields for your item here like:
  12. name = scrapy.Field()

3.查看网页源代码,在spiders目录下创建爬虫文件meiju.py,如下:

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from movie.items import MovieItem
  4.  
  5. class MeijuSpider(scrapy.Spider):
  6. name = "meiju"
  7. allowed_domains = ["meijutt.com"]
  8. start_urls = ['http://meijutt.com/']
  9.  
  10. def parse(self, response):
  11. movies=response.xpath('//div[@class="c1_l_wap_contact"]/ul/li')
  12. for each_movie in movies:
  13. item=MovieItem()
  14. item['name']=each_movie.xpath('./a/@title').extract()[0]
  15. yield item

在parse函数中取文档中(//为选择匹配的节点,不考虑位置;/为选择根目录下的节点)属性为c1_l_wap_condact的div标签下的ul标签中的li标签。对每个元素选取a标签中的title属性。返回list格式,取第一个元素。(xpath语法参见 http://www.w3school.com.cn/xpath/xpath_syntax.asp)

yield函数的作用:“函数中使用yield,可以使函数变成生成器。一个函数如果是生成一个数组,就必须把数据存储在内存中,如果使用生成器,则在调用的时候才生成数据,可以节省内存。 ”

4.settings.py中增加以下内容,激活item pipeline组件:

  1. ITEM_PIPELINES = {'movie.pipelines.MoviePipeline':100}

这里的整数值决定pipelines运行的先后顺序,小的先运行,大的后运行。整数值通常设置在0-1000之间。

为了避免莫名奇妙的报错,暂时设置ROBOTSTXT_OBEY = False。以后会尽量遵守君子协定吧。。

5.编辑pipelines.py

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define your item pipelines here
  4. #
  5. # Don't forget to add your pipeline to the ITEM_PIPELINES setting
  6. # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  7.  
  8. class MoviePipeline(object):
  9. def process_item(self, item, spider):
  10. with open("my_meiju.txt",'ab+') as fp:
  11. fp.write(item['name'].encode('utf-8')+'\n'.encode('utf-8'))
  12. return item

为了写入中文并且每次写入新的一行而不要覆盖,使用'ab+'。'\n'也要转为utf8格式。

6.执行爬虫(在movie目录下)

  1. scrapy crawl meiju

生成的txt文件会出现在目录下了。内容如下:

  1. 抵押第一季
  2. 沉默的天使第一季
  3. 此时此刻第一季
  4. 黑道无边第一季
  5. 芝加哥故事第一季
  6. 相对宇宙第一季
  7. 不列颠尼亚第一季
  8. 一起单身第一季

今天先探秘到这里~

scrapy学习笔记(1)的更多相关文章

  1. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...

  2. Scrapy:学习笔记(1)——XPath

    Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...

  3. scrapy 学习笔记1

    最近一段时间开始研究爬虫,后续陆续更新学习笔记 爬虫,说白了就是获取一个网页的html页面,然后从里面获取你想要的东西,复杂一点的还有: 反爬技术(人家网页不让你爬,爬虫对服务器负载很大) 爬虫框架( ...

  4. Scrapy学习笔记(5)-CrawlSpider+sqlalchemy实战

    基础知识 class scrapy.spiders.CrawlSpider 这是抓取一般网页最常用的类,除了从Spider继承过来的属性外,其提供了一个新的属性rules,它提供了一种简单的机制,能够 ...

  5. scrapy 学习笔记2

    本章学习爬虫的 回调和跟踪链接 使用参数 回调和跟踪链接 上一篇的另一个爬虫,这次是为了抓取作者信息 # -*- coding: utf-8 -*- import scrapy class Myspi ...

  6. scrapy学习笔记一

    以前写爬虫都是直接手写获取response然后用正则匹配,被大佬鄙视之后现在决定开始学习scrapy 一.安装 pip install scrapy 二.创建项目 scrapy startprojec ...

  7. Scrapy 学习笔记(一)数据提取

    Scrapy 中常用的数据提取方式有三种:Css 选择器.XPath.正则表达式. Css 选择器 Web 中的 Css 选择器,本来是用于实现在特定 DOM 元素上应用花括号内的样式这样一个功能的. ...

  8. scrapy 学习笔记

    1.scrapy 配合 selenium.phantomJS 抓取动态页面, 单纯的selemium 加 Firefox浏览器就可以抓取动态页面了, 但开启窗口太耗资源,而且一般服务器的linux 没 ...

  9. scrapy学习笔记

    1.scrapy用哪条命令行重新编辑已有的项目?cd projectname 2.如何在pycharm中开启scrapy?先在终端创建一个项目(即文件夹),再在pycharm中打开.

随机推荐

  1. Mysql --库和表的操作

    库的增删改查 系统数据库 创建数据库 数据库的相关操作 表的操作 存储引擎介绍(有点多 很啰唆) 表的介绍 表的操作 一.系统数据库 查看系统库: show databases; nformation ...

  2. 【原创】大数据基础之Drill(2)Drill1.14+Hive2.1.1运行

    问题 Drill最新版本是1.14,从1.13开始Drill支持hive的版本升级到2.3.2,详见1.13的release notes The Hive client for Drill is up ...

  3. cocos2dx-lua 裁剪ClippingNode,圆形头像,其他形状图片

    注意事项:裁剪内容要用Sprite,不能换成ImageView 注意事项: 1.后面测试发现,ImageView也能用,注意换成ImageView时,前缀是ccui. 2.要做圆形头像,用一张圆形图做 ...

  4. django中sqlite迁移mysql

    sqlite数据迁移 1 数据备份 django中打开terminalpython manage.py dumpdata authorization > authorization_data.j ...

  5. 十一Python之路,Day6 - 面向对象学习

      本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战& ...

  6. select获取选中的option(包含value和text,重点是text怎么获取)

    简单描述:后台需要获取到select标签选择的内容,也就是text,该怎么取呢?很简单. 代码: //hml代码<div class="col-md-6"> <l ...

  7. 《XXX重大技术需求征集系统》的可用性和可修改性战术分析

    在网站的界面完整有效的呈现在最终用户面前前,其中经历的每一环节出现问题都会导致网站页面不可访问.原因如,如DNS被劫持.网站交换机失效,硬盘损坏,网卡松掉,机房停电等都可能导致网站不可用(网站故障)情 ...

  8. 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...

  9. vw实现移动端自适应页面

    一.设备支持情况 测试网站:https://caniuse.com/#search=vw css3test:https://airen.github.io/css3test/,https://gith ...

  10. 移除K位数字

    1.题目来源:选自LeetCode 402: 2.问题描述: 3.问题分析 通过分析我们可以得出这样的结论:如果后一个数字比前面的数字小的话,那么我们就要把前面的一个数字删除掉,并且每次把字符串中拆出 ...