scrapy爬取数据学习

举报
livingbody 发表于 2022/11/12 22:44:21 2022/11/12
【摘要】 1.scrapy安装pip isntall scrapy 2.新建项目scrapy startproject mySpider(p2) PS C:\Users\livingbody\Desktop> scrapy startproject mySpiderNew Scrapy project 'mySpider', using template directory 'C:\minicond...

1.scrapy安装

pip isntall scrapy

2.新建项目

scrapy startproject mySpider
(p2) PS C:\Users\livingbody\Desktop> scrapy startproject mySpider
New Scrapy project 'mySpider', using template directory 'C:\miniconda3\envs\p2\lib\site-packages\scrapy\templates\project', created in:
    C:\Users\livingbody\Desktop\mySpider

You can start your first spider with:
    cd mySpider
    scrapy genspider example example.com

scrapy.cfg :项目的配置文件

mySpider/ :项目的Python模块,将会从这里引用代码

mySpider/items.py :项目的目标文件

mySpider/pipelines.py :项目的管道文件

mySpider/settings.py :项目的设置文件

mySpider/spiders/ :存储爬虫代码目录

3.明确目标

计划爬取 https://www.itcast.cn/channel/teacher.shtml网站讲师姓名、职称和个人信息

  1. 打开mySpider目录下的items.py

  2. Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。

  3. 可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field的类属性来定义一个Item。

  4. 接下来,创建一个ItcastItem 类,和构建item模型(model)。

import scrapy

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

4.爬取数据

在mySpider/spider目录创建一个名为itcast爬虫,指定爬取域为:

scrapy genspider itcast "itcast.cn"
(p2) PS C:\Users\livingbody\Desktop\mySpider> tree /f
卷 Windows 的文件夹 PATH 列表
卷序列号为 6C51-3930
C:.
│  scrapy.cfg
│
└─mySpider
    │  items.py
    │  middlewares.py
    │  pipelines.py
    │  settings.py
    │  __init__.py
    │
    ├─spiders
    │  │  itcast.py
    │  │  __init__.py
    │  │
    │  └─__pycache__
    │          __init__.cpython-39.pyc
    │
    └─__pycache__
            settings.cpython-39.pyc
            __init__.cpython-39.pyc
import scrapy


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

    def parse(self, response):
        pass

在此基础上进行修改

import scrapy


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

    def parse(self, response):
        with open('teacher.html','w', encoding='utf-8') as f:
            f.write(response.text)
scrapy crawl itcast

爬取完毕

5.取数据

import scrapy
from mySpider.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):
        #open("teacher.html","wb").write(response.body).close()
        # 存放老师信息的集合
        items = []

        for each in response.xpath("//div[@class='li_txt']"):
            # 将我们得到的数据封装到一个 `ItcastItem` 对象
            item = ItcastItem()
            #extract()方法返回的都是字符串
            name = each.xpath("h3/text()").extract()
            title = each.xpath("h4/text()").extract()
            info = each.xpath("p/text()").extract()

            #xpath返回的是包含一个元素的列表
            item['name'] = name[0]
            item['title'] = title[0]
            item['info'] = info[0]

            items.append(item)

        # 直接返回最后数据
        return items

6.保存数据

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

# json格式,默认为Unicode编码
scrapy crawl itcast -o teachers.json

# json lines格式,默认为Unicode编码
scrapy crawl itcast -o teachers.jsonl

# csv 逗号表达式,可用Excel打开
scrapy crawl itcast -o teachers.csv

# xml格式
scrapy crawl itcast -o teachers.xml
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。