Python爬虫框架Scrapy入门(二)第一个爬虫程序:使用xpath爬取起点中文网

一、需求分析

爬取起点中文网24小时热销榜的小说:https://www.qidian.com/rank/hotsales?style=1
在这里插入图片描述
作为第一个爬虫程序,我们只爬取第一页每本小说的名称、作者、类型、以及是否连载。

二、创建项目

打开命令行,切换到要保存工程的文件路径后,输入scrapy startproject qidian_hot创建一个名为qidian_hot的项目工程。在这里插入图片描述
打开该文件路径,可以看到生成了一个qidian_hot的文件夹,里面便保存着scrapy的相关文件。

三、分析页面

用谷歌浏览器或其他带有开发者工具的浏览器,打开起点中文网24小时热销榜的网址 https://www.qidian.com/rank/hotsales?style=1
然后打开开发者工具
在这里插入图片描述
点击刷新页面后,找到网页响应的html代码在这里插入图片描述
点击右上角的箭头,然后把鼠标移到小说的信息栏,单击,会看到右边的代码框会自动定位到该信息对应的代码。
在这里插入图片描述
我么可以看到在这个下面对应四个标签,分别对应这本小说的信息
在这里插入图片描述展开标签,可以看到里面的内容,接下来我们只需要创建爬虫得到响应,并从中提取我们想要的信息即可
在这里插入图片描述

四、实现爬虫

打开我们之前建立的爬虫工程,在spider目录下建立爬虫文件qidian_spider.py导入需要用到的库

from scrapy import Request
from scrapy.spiders import  Spider

创建一个继承自 Spider的爬虫类,其中包含爬虫名称、目标网页、解析方法

class HotSaleSpider(Spider):
    name = "hot" #爬虫名称
    start_urls = ["https://www.qidian.com/rank/hotsales?style=1"]#目标网站地址
    def parse(self, response):#用于数据解析
    	pass

注意到parse方法的参数是response,这是因为我们使用爬虫框架会自动帮我们得到网页的响应,不需要我们另外编写代码向网页发起request请求,在scrapy内部已经发起请求并直接返回响应了。

下图是scrapy框架的结构,我们需要做的就是完成spider的部分:得到网页响应后进行提取信息。在爬虫内部完成了1-6的工作。
在这里插入图片描述
所以我们重点编写parse方法。基于我们之前的网页分析,这里使用xpath方法提取信息。

首先我们定位到class="book-mid-info",每本小说的信息都保存在这个"book-mid-info"类之下。

list_selector = response.xpath("//div[@class='book-mid-info']")

然后遍历每一本小说,获取各项信息,定位的方法同样是查看信息所在的标签。小说名称“诡秘之主”保存在"book-mid-info"类中的h4标签下的a标签,小说作者“爱潜水的乌贼”保存在"book-mid-info"类中的p标签下的a标签。
在这里插入图片描述

for one_selector in list_selector:
    # 获取小说信息
    name = one_selector.xpath("h4/a/text()").extract()[0] #提取当前定位下的文字
    author = one_selector.xpath("p[1]/a[1]/text()").extract()[0]
    type = one_selector.xpath("p[1]/a[2]/text()").extract()[0]
    form = one_selector.xpath("p[1]/span/text()").extract()[0]

最后定义一个字典保存每本小说的各项信息并且通过生成器返回:

# 保存小说信息为字典
hot_dict = {
    "name":name,
    "author":author,
    "type":type,
    "form":form
}
yield hot_dict # 生成器返回每一本小说的信息

关于yield关键字的含义可以参看:Python关键字:yield生成器

完整代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@Time  : 2020/2/20 11:45
#@Author: bz
#@File  : qidian_spider.py

from scrapy import Request
from scrapy.spiders import  Spider

class HotSaleSpider(Spider):
    name = "hot" #爬虫名称
    start_urls = ["https://www.qidian.com/rank/hotsales?style=1"]#目标网站地址
    def parse(self, response):#用于数据解析
        #使用xpath定位
        list_selector = response.xpath("//div[@class='book-mid-info']")
        for one_selector in list_selector:
            # 获取小说信息
            name = one_selector.xpath("h4/a/text()").extract()[0] #提取当前定位下的文字
            author = one_selector.xpath("p[1]/a[1]/text()").extract()[0]
            type = one_selector.xpath("p[1]/a[2]/text()").extract()[0]
            form = one_selector.xpath("p[1]/span/text()").extract()[0]
            # 保存小说信息为字典
            hot_dict = {
                "name":name,
                "author":author,
                "type":type,
                "form":form
            }
            yield hot_dict # 生成器返回每一本小说的信息

五、运行爬虫

到你之前创建项目的文件夹下,输入scrapy crawl hot -o qidianhot.csv运行爬虫并将信息保存到该文件夹下的qidianhot.csv文件在这里插入图片描述
运行爬虫以后,打开qidianhot.csv,可以看到爬取的信息
在这里插入图片描述

发布了25 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43116606/article/details/104408390