(一) 入门

作者: iamlightsmile | 来源:发表于2019-05-04 18:29 被阅读0次

0.声明

主要供自己以后查阅,因此略去一些不重要环节.

本系列运行环境如下:

  • Scrapy : 1.6.0
  • lxml : 4.2.5.0
  • libxml2 : 2.9.8
  • cssselect : 1.0.3
  • parsel : 1.5.1
  • w3lib : 1.20.0
  • Twisted : 19.2.0
  • Python : 3.7.1 (default, Dec 14 2018, 19:28:38) - [GCC 7.3.0]
  • pyOpenSSL : 18.0.0 (OpenSSL 1.1.1a 20 Nov 2018)
  • cryptography : 2.4.2
  • Platform : Linux-4.19.28-1-MANJARO-x86_64-with-arch-Manjaro-Linux

不同环境下一些细节略有不同,如Python编码等,注意!

1.简介

2.安装

3.基本项目流程

  1. 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
  2. 明确目标 (编写items.py):明确你想要抓取的目标
  3. 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
  4. 存储内容 (pipelines.py):设计管道存储爬取内容

4.基本工作流程

  • 创建一个Scrapy项目
  • 定义提取的结构化数据(Item)
  • 编写爬取网站的Spider并提取结构化数据(Item)
  • 编写Item Piplines来存储提取到的Item(即结构化数据)

4.入门案例

1.创建项目

使用如下命令在当前目录下新建名为tutorial的项目:

scrapy startproject tutorial

2.明确目标

我们打算抓取传智播客网站里的所有讲师的姓名、职称和个人信息。
如图:

itcast.png

我们打算先初步抓取其中各老师的名称,职称,描述三部分.

3.定义结构化数据Item

修改项目中items.py文件内容为:

import scrapy

class ItcastItem(scrapy.Item):
   name = scrapy.Field()
   title = scrapy.Field()
   info = scrapy.Field()

4.制作爬虫

1.初始化爬虫

在当前目录下输入以下命令,初始化一个爬虫:

scrapy genspider itcast "itcast.cn"

然后打开spiders目录下的itcast.py文件,可以看到scrapy为我们自动生成了如下代码:

import scrapy

class ItcastSpider(scrapy.Spider):
    name = "itcast"
    allowed_domains = ["itcast.cn"]
    start_urls = (
        'http://itcast.cn/',
    )

    def parse(self, response):
        pass

2.设定初始url

start_urls的值修改为需要爬取的第一个url.

start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)

3.修改parse()方法

修改parse()方法为:

def parse(self, response):
        filename = "teacher.html"
        with open(filename, 'w') as f:
            f.write(response.text)

非必要流程:我们可以执行以下命令,来简单测试一下当前的效果:

scrapy crawl itcast

如果程序执行无误的话,那么结果就是在当前目录会生成一个teacher.html文件,里面就是我们刚刚要爬取的网页的全部源代码信息。

4.取数据

然后我们可以对response对象使用xpath选择器取到我们想要的数据.
细节略,最终itcast.py脚本的内容如下:

# -*- coding: utf-8 -*-
import scrapy

from tutorial.items import ItcastItem

class ItcastSpider(scrapy.Spider):
    name = "itcast"
    allowed_domains = ["itcast.cn"]
    start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)

    def parse(self, response):
        # filename = "teacher.html"
        # with open(filename, 'w') as f:
        #     f.write(response.text)

        # # 获取网站标题
        # context = response.xpath('/html/head/title/text()')

        # # 提取网站标题
        # title = context.extract_first()
        # print(title)

        items = []

        for each in response.xpath("//div[@class='li_txt']"):
            item = ItcastItem()

            name = each.xpath("h3/text()").extract()
            title = each.xpath("h4/text()").extract()
            info = each.xpath("p/text()").extract()

            item['name'] = name[0]
            item['title'] = title[0]
            item['info'] = info[0]

            items.append(item)
        
        return items

5.保存数据

scrapy保存信息的最简单的方法主要有四种,-o 输出指定格式的文件,命令如下:

scrapy crawl itcast -o teachers.json

其他保存的文件类型还如jsonlines(简称jl),csv,xml等.

-1.参考

相关文章

网友评论

    本文标题:(一) 入门

    本文链接:https://www.haomeiwen.com/subject/lgtfoqtx.html