Python Scrapy爬虫框架之初次使用

本案例来自小甲鱼的课程

关于Scrapy的安装网上都有方法,这里便不再叙述。

使用Scrapy抓取一个网站一共需要四个步骤:

0、创建一个Scrapy项目;

1、定义Item容器;

2、编写爬虫;

3、存储内容。

本次爬取的目标是全球最大的目录网站http://www.dmoztools.net,由于此网站数据过于庞大,我们这里只拿它的两个子网页做测试(手动捂脸)

http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/

http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/

我们需要爬取的是子网页 http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/ 中的名单、超链接、名单描述。

---

0、创建一个Scrapy项目

首先打开cmd窗口输入以下命令将路径移到桌面(其他位置也可以)

cd desktop

然后创建一个Scrapy项目。继续在命令行中输入以下命令,(命令执行后请暂时不用关闭命令行,等下要用)

scrapy startproject tutorial

(创建一个新的Scrapy项目文件夹,文件夹的名字叫tutorial)文件夹中会有一个scrapy.cfg的配置文件和一个tutorial的子文件夹,tutorial文件夹中有如下内容:

0、__init__.py  这个不用多说,是模块的初始化,不用管

1、items.py  项目的容器

2、pipelines.py

3、settings.py 设置文件

4、spiders/ 文件夹,里面只有一个初始化文件__init__.py ,这里需要我们来完善。

等等文件(可能还有一些其他的文件,这里不多叙述)

1、定义Item容器

item容器是什么呢?item容器是保存爬取到的数据的容器,其使用方法和python字典类似,并且提供了额外的保护机制来避免拼写错误导致的未定义字段错误。

接下来我们要建模。为什么要建模呢?因为item容器是用来存放我们爬取到的网页内容,当爬取的时候返回的是整个网页的内容,而往往我们只是需要其中的一部分内容比如这里的网页 http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/ ,我们只需要他的书名、描述、与超链接。

所以这里我们需要改动item容器,打开 tutorial/item.py ,将其中的TutorialItem模块内容改为以下内容并写好注释:

class TutorialItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()  #标题
    link = scrapy.Field()   #超链接
    desc = scrapy.Field()   #描述

保存退出。

2、编写爬虫

接下来是编写爬虫类Spider,Spider是用户编写用于从网站上爬取数据的类。

其包含了一个用于下载的初始URL,然后是如何跟进网页中的链接以及如何分析页面中的内容,还有提取生成item的方法。

接下来我们在Spider文件夹中新建一个叫 dmoz_spider.py 的文件,编写以下代码:(其中name是本次的项目名)

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    #allowed_domains是为了防止在爬取的时候进入了其他网站
    allowed_domains = [‘dmoztools.net‘]
    #初始爬取位置
    star_url = [
        ‘http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/‘
        ‘http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/‘
        ]

    #定义一个分析方法
    def parse(self, response):
        filename = response.url.split("/")[-2]
        with open(filename, ‘wb‘) as f:
            f.write(response,body)

保存关闭。代码解释(解释的不是很好,大概意思理解就行,不喜勿喷):

在本地目录下创建两个文件,叫做Books和Resource,然后将start_url中的两个初始网址提交给Scrapy引擎,Scrapy引擎中有下载器,会将网站的源代码下载过来,然后根据parse方法将下载的内容存放到Books和Resource中。

接下来继续进入刚才的cmd窗口,输入以下命令将路径切换到tutorial文件夹中:

cd tutorial

继续在命令行输入以下命令:

scrapy crawl dmoz

其中crawl是爬取的意思,dmoz是项目名。

然后输入回车执行。成功的话将会出现以下信息:

并且命令执行后在当前目录会生成两个新的文件,叫做Books和Resource。两个文件的内容就是爬取到的网站内容(即网站的源代码)。

3、存储内容

以往我们在爬取网页内容的时候都是使用的html的正则表达式,但是在Scrapy中是使用一种基于Xpath和CSS的表达式机制:Scrapy Selectors

Selectors是一个选择器,它有四个基本的方法:

xpath(): 传入spath表达式,返回该表达式所对应的所有节点的selector list列表

css():传入CSS表达式,返回该表达式所对应的所有节点的selector list列表

extract():序列化该节点为unicode字符串并返回list

re():根据传入的正则表达式对数据进行提取,返回unicode字符串list列表

存储数据之前我们先进去scrapy的shell窗口进行测试。继续对刚才的cmd窗口进行操作,输入以下命令进入shell窗口:

scrapy shell "http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/"

目的是进入该网站的scrapy shell窗口,界面如下:

此时我们便可以对他进行操作。

其实这是返回我们刚才的response对象,我们可以对他进行一系列操作,比如response.body命令将会出现该网站的源代码,response.headers命令会出现网站的头配置等等

现在我们列举几个该对象的使用方法:

/html/head/title:选择html文档中<head>标签内的<title>元素;

/html/head/title/text():选择上面提到的<title>元素的文字;

//td:选择所有的<td>元素;

//div[@class=‘mine‘]:选择所有具有class=‘mine‘属性的div元素。

此时shell窗口中还有 一个返回对象sel,接下来我们进行查找名单的测试。

输入命令:(以下出现的路径请自行检查网页内容进行查看,右键点击网页对象选择检查即可出现)

sel.xpath(‘//section/div/div/div/div/a/div/text()‘).extract()

执行后将会返回网页中的所有名单,图如下:

同样,输入命令以下命令将会返回所有名单的超链接和描述

sel.xpath(‘//section/div/div/div/div/a/@href‘).extract()   //返回超链接
sel.xpath(‘//section/div/div/div/div/a/div/text()‘).extract()    //返回名单描述

好,测试完了之后我们来继续编写代码。

现在我们来对爬取内容进行筛选

打开编辑我们刚才编写的 dmoz_spider.py 文件,将内容改为以下内容

import scrapy

from tutorial.items import TutorialItem #引入模块

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    #allowed_domains是为了防止在爬取的时候进入了其他网站
    allowed_domains = [‘dmoztools.net‘]
    #初始爬取位置
    start_urls = [
        ‘http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/‘,
        ‘http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/‘
        ]

    #定义一个分析方法
    def parse(self, response):
        sel = scrapy.selector.Selector(response) #分析返回的response对象
        #//section/div/div/div/div/a/div/text()
        sites = sel.xpath(‘//section/div/div/div/div‘)    #对内容进行筛选
        items = []
        for site in sites:    #对爬取内容进行进一步筛选
            item = TutorialItem()
            item[‘title‘] = site.xpath(‘a/div/text()‘).extract()
            item[‘link‘] = site.xpath(‘a/@href‘).extract()
            item[‘desc‘] = site.xpath(‘div/text()‘).extract()
            items.append(item)    #将筛选后的内容添加到列表items中

        return items

保存退出。然后继续在cmd窗口进行操作,首先退出shell窗口:

exit()

随后开始爬取网站内容并将筛选后的数据导出,进行以下命令:

scrapy crawl dmoz -o items.json -t json

-o后面接导出的文件名;-t后面接导出的形式,形式常用的有四种:json、xml、jsonlines以及csv,这里我使用的是json。

执行后在当前路径会产生一个 items.json 的文件,我们使用文本编辑器打开它时会发现,里面就是我们本次要爬取的筛选后的内容:

本次爬取到这里便成功完成!

谢谢观看!(??????)??

我演了很多悲剧,到头来你们都说那是喜剧。            ------------------周星驰

原文地址:https://www.cnblogs.com/jxxclj/p/9350476.html

时间: 2024-09-28 13:01:10

Python Scrapy爬虫框架之初次使用的相关文章

Python Scrapy爬虫框架安装、配置及实践

近期研究业界安卓APP主要漏洞类型.wooyun算是国内最有名的漏洞报告平台,总结一下这上面的漏洞数据对后面测试与分析漏洞趋势有指导意义,因此写一个爬虫. 不再造轮子了,使用Python的Scrapy框架实现之. 一.安装 64位系统安装时,一定要注意Python的位数与Scrapy及其依赖库位数一致.否则各种坑爹Bug 安装32位Python 2.7 下载并安装pip(方便自动安装管理依赖库) https://pypi.python.org/pypi/pip/7.1.2 下载源码,python

python - scrapy 爬虫框架(创建, 持久化, 去重, 深度, cookie)

## scrapy 依赖 twisted  - twisted 是一个基于事件循环的 异步非阻塞 框架/模块 ##  项目的创建  1. 创建 project scrapy startproject 项目名称 项目名称(项目结构) - spiders # 爬虫文件 - q.py - w.py - items.py # 持久化 - pipelines # 持久化 - middlewares.py # 中间件 - settings.py # 配置文件(爬虫) scrapy.cfg # 配置文件(部署

Python之Scrapy爬虫框架安装及简单使用

题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫. 本文档将

Python爬虫教程-31-创建 Scrapy 爬虫框架项目

本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环境下,所以如果没有安装 Anaconda 请先到官网下载安装 Anaconda 下载地址:https://www.anaconda.com/download/ Scrapy 爬虫框架项目的创建 0.打开[cmd] 1.进入你要使用的 Anaconda 环境 1.环境名可以在[Pycharm]的[Se

一个咸鱼的python爬虫之路(五):scrapy 爬虫框架

介绍一下scrapy 爬虫框架 安装方法 pip install scrapy 就可以实现安装了.我自己用anaconda 命令为conda install scrapy. 1 Engine从Spider处获得爬取请求(Request)2Engine将爬取请求转发给Scheduler,用于调度 3 Engine从Scheduler处获得下一个要爬取的请求4 Engine将爬取请求通过中间件发送给Downloader5 爬取网页后,Downloader形成响应(Response)通过中间件发给En

Scrapy爬虫框架第一讲(Linux环境)

1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前面我们介绍了使用requests.beautifulsoup.selenium等相当于你写作文题,主要针对的是个人爬虫:而Scrapy框架的出现给了我们一个方便灵活爬虫程序架构,我们只需针对其中的组件做更改,即可实现一个完美的网络爬虫,相当于你做填空题!) 基于Scrapy的使用方便性,下面所有的S

Python Scrapy爬虫(上)

Python Scrapy爬虫 预备知识: 1.Scrapy框架:是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架. 2.Scrapy去重原理:Scrapy本身自带有一个中间件.scrapy源码中可以找到一个dupefilters.py去重器,需要将dont_filter设置为False开启去重,默认是True,没有开启去重. 3.指纹去重:对于每一个URL的请求,调度器都会根据请求得相关信息加密得到一个指纹信息,并且将该URL的指纹信息和set()集合中的指纹信息进行

Scrapy爬虫框架的使用

#_author:来童星#date:2019/12/24# Scrapy爬虫框架的使用#1.安装Twisted模块 https://www.lfd.uci.edu/~gohlke/pythonlibs/#2.单击Twisted索引import scrapyfrom scrapy.crawler import CrawlerProcess# 导入获取项目设置信息from scrapy.utils.project import get_project_settingsclass QuotesSpid

【Scrapy】Scrapy爬虫框架的基本用法

Scrapy爬虫框架的基本用法 Scrapy爬虫框架是一个好东西,可以十分简单快速爬取网站,特别适合那些不分离前后端的,数据直接生成在html文件内的网站.本文以爬取 杭电OJ http://acm.hdu.edu.cn 的题目ID和标题为例,做一个基本用法的记录 可参考 https://www.jianshu.com/p/7dee0837b3d2 安装Scrapy 使用pip安装 pip install scrapy 代码编写 建立项目 myspider scrapy startproject