前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >喵叔的爬虫--第一节--先动动小手儿

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

作者头像
喵叔
发布2020-09-08 16:26:08
3160
发布2020-09-08 16:26:08
举报
文章被收录于专栏:喵叔's 专栏

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

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

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

mAO0T1.gif
mAO0T1.gif

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

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

一、动起小手儿

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

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

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

代码语言:javascript
复制
scrapy startproject bookDemo

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

mEkrb6.png
mEkrb6.png

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

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

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

代码语言:javascript
复制
scrapy genspider books books.toscrape.com

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

mEZfFf.gif
mEZfFf.gif

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

代码语言:javascript
复制
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文件中
代码语言:javascript
复制
scrapy crawl books -o books.csv

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

二、课堂作业

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、什么是爬虫,爬虫能干什么
  • 一、动起小手儿
  • 二、课堂作业
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档