用Python爬取用户虾米音乐的歌单

本篇博客介绍了如何使用Python的Scrapy框架爬取虾米音乐上的个人歌单。内容涵盖基本的爬虫设计、模拟登录、维持登录状态以及XPath的简单应用。通过创建项目、定义items和编写spider,实现了爬取网页标题、用户名和歌单名称,并将数据保存到本地JSON文件。
摘要由CSDN通过智能技术生成

Python的爬虫非常简单,现在又有成熟的爬虫框架scrapy。现在,我们来用scrapy爬取自己虾米歌单上的歌曲。
通过这篇博客,你将学到:

  1. 基本的爬虫设计
  2. 模拟登陆
  3. 维持登陆状态
  4. Xpath

(中的一点皮毛233)。本文默认读者已经通过scrapy官方文档中文版安装好了,并试过了测试用例。
然后第一步创建项目:scrapy startproject xiami命令会在当前路径下创建名为xiami的scrapy项目。

基本的爬虫设计

从需求的角度出发,先想好我们要爬取的内容,简单一点的话就爬取网页的标题、用户的名字、歌单的歌名。行文顺序参照scrapy官方文档的习惯。

items

  先来修改items.py文件。items是保存数据的容器,它是scrapy框架自己的数据结构,与字典类似,都是键-值对的形式保存数据。定义了items,我们就可以用scrapy的方式保存数据到各种数据库或者本地文件。将来我们要把爬取到的歌单保存到本地的json文件中。

打开item.py文件,默认代码如下:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
# ...

import scrapy


class XiamiItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass

添加变量初始化

class XiamiItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()  # 网页的标题
    name = scrapy.Field()  # 用户的名字
    song = scrapy.Field()  # 歌单的歌名
    pass

这里我们相当于只是创建了一个空的字典,然后定义了里面的键值。下面我们需要定义爬虫爬取数据,并把数据交付给items。

spider

当前项目下的spider文件夹下只有一个空的__init__.py文件。该文件夹负责容纳自定义的爬虫模块。在spider文件夹下创建一个py文件,就是一个爬虫模块,当然它现在还没有任何的功能。创建python file——xiami_spider.py,这就是我们用来爬取虾米歌单的爬虫了。然后定义它的基本元素

from scrapy.spiders import CrawlSpider, Rule

class XiamiSpider(CrawlSpider):
    name = "xiaoxia"  # 爬虫名:小虾
    allowed_domains = ["xiami.com"]
    start_urls = [
        "http://www.xiami.com"
    ]
    account_number = '9839****8@qq.com'  # 换上你的账号
    password = '123456'  # 换上你的密码

    # 重写了start_request方法,Spider类不会再自动调用该方法来为start_url中的url创建Request
    def start_requests(self):
        return [Request("https://login.xiami.com/member/login",
                        meta={
  'cookiejar': 1},
                        callback=self.post_login)]
  • 在这个新建的类中,我们继承的是CrawlSpider而不是普通的Spider,CrawlSpider是Spider的子类,所以它会有更多的功能,这样可以少些很多代码。
  • 定义了爬虫的名字,最后在运行程序的时候,需要用到这个名字。
  • 定义了爬取区域的大小。如果不讲范围限制在虾米网站的网页中,爬虫如果不停地最终网页中的新链接的话,可能会爬取到很多无关网站的无关内容
  • 定义了初始的URL,对spider来说,爬取的循环类似下文:
    • 调用默认start_requensts()函数,以初始的URL初始化Request并设置回调函数。 当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。spider中初始的request是通过调用 start_requests() 来获取的。 start_requests() 读取 start_urls 中的URL, 并以 parse 为回调函数生成 Request 。
    • 在回调函数内分析返回的(网页)内容返回 Item 对象或者 Request 或者一个包括二者
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值