一、前提

我们开始爬虫前,基本按照以下步骤来做:

1.爬虫步骤:新建项目,明确爬虫目标,制作爬虫,存储爬虫内容

二、实战(已豆瓣为例子)

2.1 创建项目

1.打开pycharm -> 点开terminal (或者命令行都可以)输入

scrapy startproject douban

2.导入 douban scrapy项目,项目结构如下

--spiders 爬虫主文件,爬虫文件在这个里面编写

--items 数据结构文件,封装提取的文件字段,保存爬取到的数据的容器

--settings 项目设置文件

--pipelines 项目中的pipelines文件

2.2 分析网站

->需求:

1.目标站点:https://movie.douban.com/top250

2.获取第一页 所有电影对应的编号,电影名称,星级,评论,介绍

3.获取所有页数的 电影信息

2.3 步骤

1.编辑items.py

数据结构文件,简单的理解成,爬取的数据都存在这里面,要单独定义个字段以字典的形式去存储

class DoubanItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#序号
serial_number = scrapy.Field()
#电影名称
movie_name = scrapy.Field()
#电影介绍
movie_introduce = scrapy.Field()
#星级
movie_start = scrapy.Field()
#电影评论数
movie_evaluate = scrapy.Field()
#电影描述
movie_describe = scrapy.Field()

2.编辑settings.py,编辑 USER_AGENT

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'

 

3.在spiders下面新增douban_spider.py

class DoubanSpiderSpider(scrapy.Spider):
#爬虫名
name = 'douban_spider'
#允许爬虫的域名
allowed_domains = ['movie.douban.com']
#入口url,放到调度器里->到引擎->到下载器->返回到scarpy
start_urls = ['http://movie.douban.com/top250']
print(response.text)
  def parse(self, response):
  print(response.text)

4.我们来运行一下,打开pycharm-terminal-输入scrapy crawl douban_spider

5.但是每次输入的话,都很麻烦,我们新建一个run_main.py,每次运行这个文件就可以了

from scrapy import cmdline
cmdline.execute('scrapy crawl douban_spider'.split())

6.获取单个页面信息代码

知识点:

1.用xpath解析网页

2..extract()  通过xpath获取的是selector,我们在通过extract()方法得到内容 extract_first(),获取第一个内容

3.yield 返回内容

    def parse(self, response):
     #单个页面的电影列表
movie_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')
for i_item in movie_list:
        #声明item.py方法
douban_item = DoubanItem()
douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()
douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//span[@class='title']/text()").extract_first()
douban_item['movie_introduce'] = i_item.xpath(".//div[@class='bd']//span[@class='inq']/text()").extract_first()
douban_item['movie_start'] = i_item.xpath(".//div[@class='star']//span[@class='rating_num']/text()").extract_first()
douban_item['movie_evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first() content = i_item.xpath(".//div[@class='item']//div[@class ='bd']//p/text()").extract()
yield douban_item

  

7.获取所有的完整的页面代码

class DoubanSpiderSpider(scrapy.Spider):
#爬虫名
name = 'douban_spider'
#允许爬虫的域名
allowed_domains = ['movie.douban.com']
#入口url,放到调度器里->到引擎->到下载器->返回到scarpy
start_urls = ['http://movie.douban.com/top250'] def parse(self, response):
movie_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')
for i_item in movie_list:
douban_item = DoubanItem()
douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()
douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//span[@class='title']/text()").extract_first()
douban_item['movie_introduce'] = i_item.xpath(".//div[@class='bd']//span[@class='inq']/text()").extract_first()
douban_item['movie_start'] = i_item.xpath(".//div[@class='star']//span[@class='rating_num']/text()").extract_first()
douban_item['movie_evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first() content = i_item.xpath(".//div[@class='item']//div[@class ='bd']//p/text()").extract()
yield douban_item
    #下一页的xpath
next_link = response.xpath("//*[@id='content']//span[@class='next']//link/@href").extract()
    #如果是true,执行,并且回调self.parse
if next_link:
next_link = next_link[0]
print(next_link)
yield scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)

  

参考文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

 

【scarpy】笔记三:实战一的更多相关文章

  1. zookeeper curator ( 实战一)

    目录 zookeeper 的伪集群搭建 写在前面 1.1. zookeeper 安装&配置 1.1.1. 创建数据目录和日志目录: 1.1.2. 创建myid文件 1.1.3. 创建和修改配置 ...

  2. Netty聊天器(实战一):从0开始实战100w级流量应用

    Java 聊天程序(百万级流量实战一):系统介绍 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之14 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在前面 ...

  3. 【k8s实战一】Jenkins 部署应用到 Kubernetes

    [k8s实战一]Jenkins 部署应用到 Kubernetes 01 本文主旨 目标是演示整个Jenkins从源码构建镜像到部署镜像到Kubernetes集群过程. 为了简化流程与容易重现文中效果, ...

  4. miniFTP项目实战一

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

  5. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  6. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  7. 【转】Delphi+Halcon实战一:两行代码识别QR二维码

    Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.co ...

  8. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

  9. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  10. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

随机推荐

  1. storcli 简易使用介绍

    MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli,需要去Broadcom官网查找Legacy产品支持,搜索MegaR ...

  2. react native第一天--------KnightRider

    今天是2017年6月8,是我的项目react native-CRM(用户关系管理)的第一天,一早就配置了一上午Mac的环境,然后运行项目,在react-native init project的时候一直 ...

  3. 动态规划———最长公共子序列(LCS)

    最长公共子序列+sdutoj2080改编: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/ ...

  4. Modelsim仿真.do脚本示例

    #“#”为注释 #删除原有工程,需重启Modelsim #vdel -all -lib work #退出当前仿真 quit -sim #清空命令行显示 .main clear #创建库,是实际存在的物 ...

  5. 如何使用ESP8266、ESP8285做一个WiFi中继(WiFi信号放大器)

    准备工作 准备一个深圳四博智联科技有限公司的ESP-F 模组.或者四博智联科技的NODEMCU 当我们拿到ESP-F模块后,可以按照以下接线进行测试: 即 VCC.EN 接 3.3v.GPIO15 G ...

  6. select下拉列表js操作兼容性问题分享

    做一个下拉列表鼠标移入改变对应的图片的值, $("select").mosover(function(){ //var i=$(this).find("selected& ...

  7. 存储过程 传 datatable

    首先  定义 datatable 然后把要传的数据放到table里面 调用 存储过程   传递参数

  8. Unity more efficient find

    Unity caches GameObjects based on their tags, so in a big scene with lots of objects, GameObject.Fin ...

  9. classPath与PATH

    PATH是window的变量,而不是Java的变量: 通常配置PATH路径是为了找到需要的XX.exe命令,而且配置在用户的变量下面: 例如:JDK中的javac与java命令在cmd中使用,需要把命 ...

  10. Phone 3rd Recovery

    #解锁之后会低级格式化,请做好相关备份.1.#unlock code#2.adb reboot-bootloader3.fastboot devices4.fastboot oem unlock ** ...