程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-10(1)

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

发布于2020-03-15 18:34     阅读(703)     评论(0)     点赞(0)     收藏(1)


使用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实现数据的封装。



所属网站分类: 技术文章 > 博客

作者:坚持就是胜利

链接:https://www.pythonheidong.com/blog/article/260059/e82c5f5bc5ad26366cb3/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

0 0
收藏该文
已收藏

评论内容:(最多支持255个字符)