Python爬虫——使用Spider实现数据的爬取(一)

使用scrapy实现爬虫实例

一、Scrapy安装

使用命令:pip install scrapy
安装成功后验证是否成功,输入如下代码,执行:
import scrapy
print(scrapy.version_info)
我这里输出的是(1,6,0)版本,说明scrapy安装成功
在这里插入图片描述

二、第一个Scrapy网络爬虫

 1.创建scrapy框架——scrapy startproject name

注:name为项目名称
在这里插入图片描述
进入pycharm中开始我们的项目

 2.使用Spider实现数据的爬取

     2.1创建爬虫项目

在spiders中创建爬虫项目,这里是booksSpider.py

在这里插入图片描述
booksSpider.py 代码为:

from scrapy import Request
from scrapy.spider import Spider

class booksSpider(Spider):
    name = 'books'
    # 初始请求,获取起始的url
    def start_requests(self):
        url = 'http://books.toscrape.com/catalogue/category/books_1/index.html'
        yield Request(url)
    # 解析数据的函数
    def parse(self, response):
        print(response.text)
    2.2运行爬虫项目——start.py文件

          start.py文件就像一个公式一样,可以用于任何scrapy项目的运行,只需将项目名称改掉就行了,如下:
在这里插入图片描述
start.py 代码为:
注——单引号中的 book 是爬虫的名字

from scrapy import cmdline
cmdline.execute('scrapy crawl book'.split())

在start.py文件中运行后,便可得到网站代码
在这里插入图片描述

    2.3爬取网站信息

将2.1中booksSpider.py文件中的输出网页内容利用xpath()方法来爬取我们想要的数据,booksSpider.py 代码为:

from scrapy import Request
from scrapy.spiders import Spider

class booksSpider(Spider):
    name = 'books'  # 爬虫命名只能用name接收,不能换成其他的
    allBooks = []  #保存所有网页的内容
    # 初始请求,获取起始的url
    def start_requests(self):
        url = 'http://books.toscrape.com/catalogue/category/books_1/index.html'
        yield Request(url)
    # 解析数据的函数
    def parse(self, response):
        li_selector = response.xpath("//ol[@class='row']/li")
        for one_selector in li_selector:
            # 名称
            name = one_selector.xpath("article[@class='product_pod']/h3/a/@title").extract()[0]
            # 价格
            price = one_selector.xpath("article[@class='product_pod']/div[@class='product_price']/p[1]/text()").extract()[0]
            one_list = [name, price]
            self.allBooks.append(one_list)
        print(self.allBooks)

        # 下一页
        next_url = response.xpath('//li[@class="next"]/a/@href').extract()[0]
        if next_url:
            next_url = "http://books.toscrape.com/catalogue/category/books_1/" + next_url
            yield Request(next_url)

进而可以进入start.py文件来运行。

三、总结

        整个项目执行起来,首先会调用start_requests(self)方法,初始请求,用来获取起始的url,然后调用scrapy中的Request(url)向网站生成一个请求,并使用yield将请求返回(yield会将请求返回回去并继续执行该函数余下的部分,但return的用法就不会继续执行余下的部分,这就是二者的区别),请求发送完以后就会向目标网站爬取数据,所以自动调用parse(self,response)方法,服务器就会将数据的对象给response,故response是一个对象,该对象有一个方法自带xpath()方法用来解析数据
    本章讲了使用Spider爬取数据,下一章会记录使用Item实现数据的封装。

发布了27 篇原创文章 · 获赞 7 · 访问量 2128

猜你喜欢

转载自blog.csdn.net/lucky_shi/article/details/104838271
今日推荐