欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scrapy爬虫框架学习一

程序员文章站 2022-05-06 20:29:22
...

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
#在命令行日志中可以看到抓取的诗词内容全部打印出来

Scrapy爬虫框架学习一

相关标签: python数据分析