• 爬虫数据提取有困难?使用好办法爬取歌曲排行榜


    需求分析

    今天,一个小伙伴发给我一个网站,我一看,哦,原来是一个歌曲排行榜。我说,这是怎么了。小伙伴说,他在爬取这个网站的时候呢,遇到了一些困难,主要是数据的提取非常的不方便。数据是一大段一大段的写在script标签中的,就算拿到了script标签,想要从中拿到自己所需要的一部分,也挺麻烦的,问我应该怎么办?

    我问他说,你是用什么方法提取数据的呢?小伙伴说,就是用beautifulsoup啊,自己学习的时候,老师就是这么教的。我问他,parsel更好用,你为什么不尝试使用一下parsel呢?小伙伴非常疑惑,parsel是一个什么东西呢?好吧,看来这个小伙伴没有好好看我以前的文章啊,不过不要紧,今天我们就来帮助小伙伴解决这个问题

    实现分析

    关于parsel的使用,以及parsel为什么这么好,我在往期的文章中已经写过了,如果你还不知道的话,可以查看parsel解析器的使用,简单的来说,像这样通过节点和标签不可以直接提取出来的数据,一般要么是使用正则表达式,要么是先使用xpath的提取,然后再使用正则表达式。像bs4虽然既可以使用xpath,又可以使用css选择器,非常的不错,但是如果你使用的是parsel的话,就可以直接使用正则表达式了

    在parsel中使用正则表达式,比起原始python中的re模块的使用,还要更简单一些。你只需要写出正则表达式,就可以立刻提取出数据了

    因此,我非常的建议,在爬虫的数据提取中可以多使用parsel,尤其是在需要使用正则表达式的情况下。当然,我也观察到现在使用parsel的用户并不是很多,这可能是之前lxml和bs4的使用非常广泛的缘故,不过如果你希望学习更简单,更好的方法,我要强烈的推荐parsel

    完整代码展示

    1. import requests
    2. import json
    3. import pandas as pd
    4. from parsel import Selector
    5. from base64 import b64decode
    6. headers = {"user-agent": "Mozilla/5.0"}
    7. url = b64decode("aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvdG9wbGlzdC82Mg==").decode()
    8. r = requests.get(url, headers=headers)
    9. s = Selector(r.text)
    10. t = s.re_first("rankList.*?(\[{.*?}\])")
    11. t = json.loads(t)
    12. l = list()
    13. for i in t:
    14. l.append([i["rank"], i["rankValue"], i["title"], i["singerName"]])
    15. data = pd.DataFrame(l, columns=["排名", "评分", "标题", "歌手名"])
    16. data.to_csv("yinyue.csv", index=False)

    程序的实际使用的效果展示如下

     存入csv文件以后,就可以像excel那样打开了,非常的方便


    可能有很多小伙伴在看完这个程序以后,非常的不理解啊。“其实你这个程序也没使用到xpath啊,也就只用了一个正则表达式,那直接使用re模块不就行了吗?为什么还非得用什么parsel呢?“

    对,当然这样说也没错,其实不管你用什么方式提取数据,只要最后能够顺利的提取出数据,而且你还不在意性能的话,都是没什么差别的,因此你喜欢使用哪个,就用哪个就好了。不一定非要争论谁比谁更好。但我个人的建议是,parsel的使用简单而且方便,我更喜欢这个,我也强烈建议你也可以试试 

  • 相关阅读:
    java-net-php-python-springboot床上用品销售系统计算机毕业设计程序
    【Keil】编译选项设置 Warning 为 error
    分享一个 asp.net core 多文件分块同时上传的组件
    linux 设置nginx开机自启
    腾讯发布 2022 年季度财报,员工月薪 85473 元,网友看完炸了...
    2022前端HTML5面试题
    最新SparkAI创作系统V2.6.2/ChatGPT网站系统H5源码+微信公众号版+AI绘画系统源码/支持GPT联网提问/支持Prompt应用
    某次 ctf Mobile 0x01 解题过程
    ZZNUOJ_C语言1081:n个数求和 (多实例测试)(完整代码)
    分类问题的评价指标
  • 原文地址:https://blog.csdn.net/sagegrass/article/details/126352146