Scrapy爬虫框架学习一

Scrapy爬虫框架学习(一)

官方文档给出的例子爬取的网址失效,加上语法版本问题导致一些功能无法实现,我自己修正了一下,以让后人事倍功半,避免空耗时间。

正文

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

Scrapy安装只需要pip install scrapy即可

创建一个scrapy项目

#在python的workspace文件夹中打开cmd命令窗口,然后在cmd中输入以下命令
scrapy startproject tutorial

#此时在python的workspace文件夹会生成一个scarpy项目
#项目结构如下
tutorial/
    scrapy.cfg

    tutorial/
        __init__.py

        items.py

        pipelines.py

        settings.py

        spiders/
            __init__.py
  #spider文件夹下面是自己要实现的爬取功能,需在此文件夹中创建具体爬取方式的python文件
 

先对项目自带的py文件做一个简要了解(先不要深究,写完项目有个通透了解后再去详细了解源码及组件)

items.py:需要提取的数据结构定义文件。

pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。

settings.py: 项目的配置文件。

spiders/: 放置spider代码的目录。 就是在此文件夹创建具体爬取方式的py文件

item.py具体实现内容

import scrapy

class DmozItem(scrapy.Item):  #自定义DmozItem类继承scrapy的Item类
    title = scrapy.Field()
    link = scrapy.Field()
#源码中继承关系 DmozItem——scrapy.Item——DictItem——BaseItem——object_ref——object 简单理解:自定义的DmozItem类就是抓取存取内容的键值对的集合,具体抓取内容的最小颗粒
#title、link就是键,爬取的每一条内容就是值 ,title = scrapy.Field() 就是定义一个字典
#源码中class Field(dict): 继承于字典,源码中解释:dict() -> new empty dictionary

在spiders文件夹创建具体实现

#在此文件夹下面创建forth.py文件
import scrapy

class Lagou(scrapy.Spider):
    name = 'forth'   #cmd命令具体爬取时,该name起定位作用
    start_urls = [
        'http://quotes.toscrape.com/'  #具体的爬取网址,可以写多个,初步案例,先只写一个
    ]
    
#parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
    def parse(self,response):
        #response.xpath是通过xpath方式定位爬取网页的具体内容,本文的xpath的含义是:class是“quote”的div,其下面的class是“text”的span标签内容
       for item in response.xpath('//div[@class = "quote"]/span[@class="text"]'):
           print(item.xpath('text()').extract()[0]) #提取span的文字内容,extract提取的是数组

测试输出

在该项目所在的文件夹中调用cmd命令

#在cmd命令行中输入以下内容
scrapy crawl forth
#在命令行日志中可以看到抓取的诗词内容全部打印出来

在这里插入图片描述

发布了4 篇原创文章 · 获赞 1 · 访问量 592

猜你喜欢

转载自blog.csdn.net/mostermoonsky/article/details/104097670