嗨,大家好,我是喵叔。今天开始跟大家讲解一下Python 爬虫的编写,今天是第一节课,这篇文章主要是带领大家动手体验一下爬虫的编写。废话不多说,开始上课。
零、什么是爬虫,爬虫能干什么
小明问:喵叔,什么是爬虫呢? 喵叔答:这里说的爬虫可不是有生命的虫子
,而是是一种按照一定的规则,自动地抓取互联网信息的程序或者脚本。
小亮问:爬虫能干什么呢? 喵叔答:爬虫能干的事儿很多,我刚才也说了爬虫可以抓取互联网信息,这些信息包括多种类型,例如图片、视频、文字、文件等等。一般来说像百度这类的搜索引擎网站的爬虫,爬取的是几乎所有的互联网信息,个人编写的爬虫一般爬取的是其中几种类型的信息,比如带 FBI Warning 的视频,小姐姐的图片,或者是具有不可描述内容的文件。
一、动起小手儿
扯了点简单的知识后,现在开始动动小手儿,跟我一起来编写一个爬虫。
- 创建项目 我们打开IDE,创建一个的项目,项目名字很霸气,叫 PaChongDemo。
- 创建爬虫 接下来,一个重要人物登场,他的英文名叫 Scrapy,但是呢这个家伙总是迷路,因此我们需要引导他来到我们的项目里。在项目根目录下,打开命令行输入如下命令:
pip install scrapy
输入完命令后,他就来到了我们的项目里。我们让他来到我们的项目中可不是白来的,我们需要让他为我们干活,首先要让他创建爬虫,我们只需对他下命令即可:
代码语言:javascript复制scrapy startproject bookDemo
这时我们可以看到,他已经为我们创建了爬虫项目,项目的目录结构如下:
在这个命令中,startproject 是创建爬虫项目的命令,bookDemo 是爬虫项目的根目录的名称。
- 编写代码 这一步我们开始编写爬虫代码,在编写代码之前我们需要分析一下我们要爬取的网页。目标网址是: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
命令执行完后,我们会在 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 | 默认页面解析函数,主要完成两个任务,一个是提取页面数据,另一个是提取页面链接并产生对链接的下载请求,这哥们儿好累 |
- 运行爬虫 在命令行输入如下命令,将爬取的数据存储在csv文件中
scrapy crawl books -o books.csv
命令完成后,我们会看到项目中多了一个books.csv文件,并且里面存储了我们爬取到数据。
二、课堂作业
注意听,下面的也别讲话了,我现在留一下这节课的作业。将我本节写的代码,自己动手写一遍,并且写一千字读后感啊,明天学习委员交上来。