Scrapy系列三:使用CSS表达式解析页面数据

说明:CSS表达式不能取代XPath,CSS表达式比XPath简洁,但是功能不如XPath,大多作为XPath的辅助

 

红色箭头为我们获取的目标

 

主要代码:

第一个css表达式  [class='book-mid-info']:选中所有class为book-mid-info的元素

第二个css表达式  h4>a::text:选中h4标签的子元素a的文本内容

第三个和第四个css表达式  .author>a::text:选中class的值为author下,子元素a标签的文本内容,区别不同就是一个extract()[0],一个extract()[1],从上图可知,.author下有两个a标签,下标为0的是获取第一个a标签,下标为1的是获取第二个a标签

注:第三第四个表达式可换为  .author a::text:选中class的值为author下,子孙元素a标签的文本内容

第五个css表达式 .author>span::text:选中class的值为author下,子元素span标签的文本内容

 

CSS表达式:

 

完整代码

from scrapy import Request
from scrapy.spiders import Spider

class HotSalesSpider(Spider):
    # 爬虫名称
    name = "hot"

    #设置用户代理为浏览器类型
    qidian_headers = {"User-Agent" : "Mozilla/***************************************************"}

    def start_requests(self):
        url = "https://www.qidian.com/rank/hotsales?style=1&page=1"
        yield Request(url, headers=self.qidian_headers, callback=self.qidian_css_parse)
        
    def qidian_css_parse(self, response):
        #使用css定位到小说内容的div元素
        list_selector =  response.css("[class='book-mid-info']")
        #读取每部小说的元素
        for one_selector in list_selector:
            #获取小说名称
            name = one_selector.css("h4>a::text").extract_first()
            #获取作者,第一个p标签的第一个a标签的内容
            author = one_selector.css(".author>a::text").extract()[0]
            #获取类型
            type = one_selector.css(".author>a::text").extract()[1]
            #获取形式
            form = one_selector.css(".author>span::text").extract_first()
            #把爬取的数据保存到字典
            hot_dict = {
                "name" : name,
                "author" : author,
                "type" : type,
                "form" : form
            }
            yield hot_dict

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值