美文网首页我爱编程
编写第一个scrapy爬虫

编写第一个scrapy爬虫

作者: python_菜鸟 | 来源:发表于2018-06-20 22:08 被阅读0次

    来吧!小伙伴们开始我们的第一个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文件中。

    如图获取的结果:

    相关文章

      网友评论

        本文标题:编写第一个scrapy爬虫

        本文链接:https://www.haomeiwen.com/subject/rvaxyftx.html