喵叔的爬虫--第一节--先动动小手儿

时间:2022-07-24
本文章向大家介绍喵叔的爬虫--第一节--先动动小手儿,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

嗨,大家好,我是喵叔。今天开始跟大家讲解一下Python 爬虫的编写,今天是第一节课,这篇文章主要是带领大家动手体验一下爬虫的编写。废话不多说,开始上课。

零、什么是爬虫,爬虫能干什么

小明问:喵叔,什么是爬虫呢? 喵叔答:这里说的爬虫可不是有生命的虫子

,而是是一种按照一定的规则,自动地抓取互联网信息的程序或者脚本。

小亮问:爬虫能干什么呢? 喵叔答:爬虫能干的事儿很多,我刚才也说了爬虫可以抓取互联网信息,这些信息包括多种类型,例如图片、视频、文字、文件等等。一般来说像百度这类的搜索引擎网站的爬虫,爬取的是几乎所有的互联网信息,个人编写的爬虫一般爬取的是其中几种类型的信息,比如带 FBI Warning 的视频,小姐姐的图片,或者是具有不可描述内容的文件。

一、动起小手儿

扯了点简单的知识后,现在开始动动小手儿,跟我一起来编写一个爬虫。

  1. 创建项目 我们打开IDE,创建一个的项目,项目名字很霸气,叫 PaChongDemo
  2. 创建爬虫 接下来,一个重要人物登场,他的英文名叫 Scrapy,但是呢这个家伙总是迷路,因此我们需要引导他来到我们的项目里。在项目根目录下,打开命令行输入如下命令:
pip install scrapy

输入完命令后,他就来到了我们的项目里。我们让他来到我们的项目中可不是白来的,我们需要让他为我们干活,首先要让他创建爬虫,我们只需对他下命令即可:

scrapy startproject bookDemo

这时我们可以看到,他已经为我们创建了爬虫项目,项目的目录结构如下:

在这个命令中,startproject 是创建爬虫项目的命令,bookDemo 是爬虫项目的根目录的名称。

  1. 编写代码 这一步我们开始编写爬虫代码,在编写代码之前我们需要分析一下我们要爬取的网页。目标网址是:books.toscrape.com 。这个网址是专门用来练习scrapy 的网站。(以Chrome为例)我们在任意一本书上右键审查元素。我们会看到书的信息包含在 article 元素中,其中书名在 h3 元素中的 a 标签的 title 属性中,价格信息在 具有 class=price_color 属性的 p 标签里。我们爬取数据不可能说只爬取一页的数据对吧,因此我们还需要分析下一页的路径。在页面上的 next 元素上右键选择审查元素,这时我们发现下一页的地址在 具有 class=‘next’ 属性的 li 元素中的 a 标签的 href 属性上,并且是一个相对地址。分析完,我们就要开始编写代码了。

我们直接通过命令创建爬虫的基本代码,在命令行中输入如下命令:

scrapy genspider books books.toscrape.com

其中的 books 是爬虫的名字,这个很重要,我们在运行爬虫的时候需要告诉 Scrapy 运行哪个爬虫,如果爬虫没有名字的话,就好比我们告诉 Scrapy :你去把那谁运行起来。然后他就一脸懵X

命令执行完后,我们会在 spiders 文件夹下看到多了一个 books.py 的文件,这个就是刚才我们创建的爬取目标网站的 spiders 文件。我们在 parse 函数中,输入提取页面信息的代码:

import scrapy


class BooksSpider(scrapy.Spider):
    name = 'books'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com/']

    def parse(self, response):
        for book in response.css('article.product_pod'):
            name = book.xpath('./h3/a/@title').extract_first()
            price = book.css('p.price_color::text').extract_first()
            yield {
                'name': name,
                'price': price
            }
        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        if next_url:
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url, callback=self.parse)

这里我来解释一下每个属性的意思:

属性

解释

name

爬虫的名字

allowed_domains

可以访问的域,可以是多个

start_urls

爬虫起始爬取页面,可以是多个

parse

默认页面解析函数,主要完成两个任务,一个是提取页面数据,另一个是提取页面链接并产生对链接的下载请求,这哥们儿好累

  1. 运行爬虫 在命令行输入如下命令,将爬取的数据存储在csv文件中
scrapy crawl books -o books.csv

命令完成后,我们会看到项目中多了一个books.csv文件,并且里面存储了我们爬取到数据。

二、课堂作业

注意听,下面的也别讲话了,我现在留一下这节课的作业。将我本节写的代码,自己动手写一遍,并且写一千字读后感啊,明天学习委员交上来。