我爱编程

编写第一个scrapy爬虫

2018-06-20  本文已影响0人  python_菜鸟

来吧!小伙伴们开始我们的第一个scrapy项目。

按照工作项目的流程,先明确一下我们的项目需求。

项目需求

一个菜鸟专用的爬虫训练网站(http://books.toscrape.com),我们可以在这个网站上获取书籍的信息。

页面图

创建项目

首先,创建一个scrapy项目,在shell中使用scrapy startproject 命令:

项目创建 项目文件

分析页面内

分析页面是编写爬虫程序之前的重要准备,当然页面分析结束后,一切问题也就迎刃而解。

我们选用Chrome浏览器的开发这工具(Tools-Developer tools)分析页面。

1、数据信息        

进入页面,单击右键‘检查’,查看HTML代码,

页面源代码

可以看到每一本书的信息包裹在<article class="product_pod">元素中:书中信息在其下后h3>a元素的title属性中,如<a href="catalogue/a-light-in-the-attic_1000/index.html" title="A Light in Attic">A Light in the ...<a>; 书价信息在其下<p class="price_color">元素的文本中,如<p class="price_color">£51.77</p>

2、链接信息

可以通过单击next按钮访问下一页,选中页面下方的next按钮,查看HTML代码。

下一页链接

可以看出下一页的URL在ul.pager > li.next > a元素的属性中,是一个相对URL地址,如:

<li class="next"><a href="catalogue/page-2.html">next</a></li>。

3、实现spider

分析完页面后,接下来进行编写爬虫。在Scrapy中编写爬虫,实现一个scrapy.Spider的子类。

在bookinfo/spiders 目录下,在该目录下创建新文件book_spider.py。然后,在book_spider.py

中实现爬虫bookspider,代码如下:

#encoding:utf-8

import scrapy

class BookSpider(scrapy.Spider):

#每一个爬虫的唯一标识符

    name ='books'

    #定义爬虫爬取的起始点,起始点可以是多个

    start_urls = ['http://books.toscrape.com/']

def parse(self,response):

#提取数据

        for bookin 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:

#如果找到下一页的URL,得到绝对路径,构造新的Request对象

            next_url = response.urljoin(next_url)

yield scrapy.Request(next_url,callback=self.parse)

在控制窗口执行

$scrapy crawl books -o books.csv

执行爬虫‘books’,并将爬去的数据存储到csv文件中。

如图获取的结果:

上一篇下一篇

猜你喜欢

热点阅读