感谢提供素材的同学,无论好坏,高低,我都真心佩服你:参考文章地址:https://mp.weixin.qq.com/s/AXr8BjR_tU-E9YBo-mLVlg

爬取网易云音乐榜单

在上一篇的文章中,总结了爬虫的四个步骤,之后的爬虫也大都会按照这四个步骤去分析。因为这样分析更有利于我们去看清问题所在,看看我们爬虫所面对的难点是在那个步骤上,然后我们也可以做到心里有数,让我们去学习更加有目标。

在这里定下一个小目标:爬取网易云播放数大于500万的歌单

我们第一步可能会去尝试着去使用前面的urllib去获取网页源代码,在这里我们先尝试一下:获取的东西是什么?

代码:

html = urlopen('http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0')
print(html)

结果:

<http.client.HTTPResponse object at 0x000001ADFBE16198>

很明显,我们按照这种方法是没有办法拿到源代码的,

现在的问题就是:我们获取不到源代码。我们也发现问题是:网站的HTML页面没有运行javaScript,那我们的问题是让我们爬取的html页面运行javaScript即可。

文章中的解决方法是 Selenium + PhantomJS (因为时代的变迁,PhantomJS已经不被selenium所支持)

我的解决方法是:Selenium + ChromeDriver

selenium是一款十分神奇的工具--------作者(我)这样觉得

使用selenium需要自己去下载,如果是基于pycharm开发,那么可以使用File-->settings

来添加selenium.

ChromeDriver是要自己去下载的,下载的地址是:https://chromedriver.storage.googleapis.com/index.html

下载之前你得先看看chrome的版本,然后根据版本来下载对应的版本。版本查看地址:https://blog.csdn.net/huilan_same/article/details/51896672

下载好之后放到chrome.exe同级目录下即可。

csv的文件如果使用pycharm打开会乱码,因为是他的编码是gbk,你的是utf-8

因为代码中有注释,所以就直接上代码了

总结的代码如下:

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

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import csvurl = 'http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0'

# 用PhantomJS接口创建一个selemium的webDriver
# driver = webdriver.PhantomJS(executable_path="D:\phantomjs\phantomjs-2.1.1-windows\bin\phantomjs.exe")
chrome_options = Options()
chrome_options.add_argument('--headless')   #使用headless模式
chrome_options.add_argument('--disable-gpu') #不使用GPU加速
driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe', chrome_options=chrome_options)# 准备好存储歌单的csv文件
csv_file = open("playlist.csv", "w", newline='', encoding='gb18030')
writer = csv.writer(csv_file)
writer.writerow(['标题', '播放数', '链接'])# browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
# browser.get('http://www.baidu.com/')

# 解析每一页直到下一页为空
while url != 'javascript:void(0)':driver.get(url)driver.switch_to.frame("contentFrame")data = driver.find_element_by_id("m-pl-container").find_elements_by_tag_name("li")for i in range(len(data)):nb = data[i].find_element_by_class_name("nb").textif '万' in nb and int(nb.split("万")[0]) > 500:msk = data[i].find_element_by_css_selector("a.msk")writer.writerow([msk.get_attribute("title"), nb, msk.get_attribute("href")])url = driver.find_element_by_css_selector("a.zbtn.znxt").get_attribute('href')
csv_file.close()

爬取QQ音乐榜单

在写完爬取网易云的歌单后,有些心痒痒的,于是决定爬取一下QQ音乐的榜单。

心里os:好像只有一个网址变化了,其他的好像没有多少变化,于是心里莫名激动,两三下就改完了。一运行结果就报错了。

总结一下:1.数量的标签中含有中文,解决方法:使用字符串替换,替换掉多余的中文字符

2. 翻页的时候没有具体的url,解决方法:使用标签内的属性来拼接url,在访问即可。

总的步骤和思想跟爬取网易音乐差不多。

代码如下:

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

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import csv
import timeurl = 'https://y.qq.com/portal/playlist.html#t3='

# 用PhantomJS接口创建一个selemium的webDriver
# driver = webdriver.PhantomJS(executable_path="D:\phantomjs\phantomjs-2.1.1-windows\bin\phantomjs.exe")
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe', chrome_options=chrome_options)# 准备好存储歌单的csv文件
csv_file = open("QQplaylist.csv", "w", newline='', encoding='gb18030')
writer = csv.writer(csv_file)
writer.writerow(['标题', '播放数', '链接'])# browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
# browser.get('http://www.baidu.com/')

# 解析每一页直到下一页为空
count = 1
max_num = 0
while url != 'javascript:void(0)':try:url = 'https://y.qq.com/portal/playlist.html#t3='
        url = url + str(count) + '&'
        print(url)driver.get(url)# driver.switch_to.frame("contentFrame")
        time.sleep(1)data = driver.find_element_by_id("playlist_box").find_elements_by_tag_name("li")if max_num == 0 :index_data = driver.find_elements_by_class_name("js_pageindex")max_num = int(index_data[3].get_attribute("data-index"))for i in range(len(data)):nb = data[i].find_element_by_class_name("playlist__other").text.replace('播放量:', '').replace(' ', '')print(nb)if '万' in nb and float(nb.split("万")[0]) > 500:msk = data[i].find_element_by_css_selector("a.js_playlist")writer.writerow([msk.get_attribute("title"), nb, msk.get_attribute("href")])if max_num != 0 and count < max_num:count += 1

        else:url = 'javascript:void(0)'
    except Exception:print('Error')
csv_file.close()

如果觉得本文对你有所帮助,我深感开心。

照葫芦画瓢之python爬虫系列----(2)初次爬取简单的动态网页数据(网易、QQ音乐排行榜)相关推荐

  1. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  2. Python爬虫实战:selenium爬取电商平台商品数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客挖掘机 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  3. 第103篇Python:Python爬虫系列之书籍爬取,细节拉满

    前言 大家好,我是辣条. 不知不觉写了有103篇博文了,辣条以后尽量给大家带上编号,这样方便大家后续查阅,毕竟很多人都是放在收藏里起灰,方便你们后续查找的话你们直接看编号就简单多了.这样你们也可以放心 ...

  4. python爬虫系列--小练爬取花田首页源码

    import requests#step1 指定url url='https://love.163.com/' #step2 发送GET请求 response=requests.get(url=url ...

  5. Python爬虫——使用线程池爬取同程旅行景点数据并做数据可视化

    大家好!我是霖hero 正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将 ...

  6. python爬虫案例分析:爬取肯德基门店地址数据导入csv文件并最终用excel文档呈现

    1.用到的模块: requests pprint csv 2.找到肯德基门店网站进入门店位置页面后,打开抓包工具,找到response中包含所需信息的正确的url信息 3. 导入地址url 4.为防止 ...

  7. python爬虫系列:xpath爬取图片讲解(零基础向)

    系列文章目录 python爬虫系列:BeautifulSoup爬取小说讲解(零基础向)(版权问题下架) python爬虫系列:requests下载酷我音乐讲解(零基础向)(版权问题下架) 文章目录 目 ...

  8. python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  9. Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

最新文章

  1. 漫画:程序员太难了!为什么 Java 中的 main 方法必须是它?
  2. AI靠语意理解把照片变抽象画,无需相应数据集,只画4笔也保留神韵,有毕加索内味儿了...
  3. 【Python】如何学好Python
  4. 【转】Direct3D顶点结构使用总结
  5. JVM思维导图、正则表达式符号图、企业内部开发流程图
  6. c#如何根据字符串长度获得宽度
  7. 如何在opengl用代码绘制英文_如何用AIPS直接绘制服装款式图(线稿)
  8. 重磅开源!《阿里巴巴Android开发手册》抢鲜下载!
  9. 【LeetCode】【字符串】题号:*537. 复数乘法
  10. 《iOS取证实战:调查、分析与移动安全》一3.6 iPhone操作系统
  11. Lingo软件的基本语法
  12. Dotween 动态path设置
  13. 计算机word简历制作教程,用word制作个人简历的方法
  14. pcr计算码率的过程
  15. PDF连接服务器信息,远程连接服务器.pdf
  16. Volatile能不能保证线程安全?
  17. linux卸载espeak,eSpeak:Linux下的“语音精灵”
  18. PERL 连接FTP实现文件上传下载
  19. Debezium系列之:Debezium UI部署详细步骤
  20. Disney Springs - 迪士尼之泉

热门文章

  1. 安能物流敲定上市发行价:取发售区间下限,工作态度有待改善
  2. 2019年度区块链安全复盘总结
  3. Origin pro更改语言灰色时的解决办法
  4. 致远a8-v5-6.0协同管理软件_Batteries for Mac(电池电量管理软件) v2.0
  5. [转载]巴塞罗那神圣家族教堂
  6. mysql+sql+子查询语句_SQL语句:子查询
  7. 具有对称性质的单参数混沌镜像系统的切换控制
  8. [60 量化交易] 对股票进行量化交易 买入最便宜的股票一年后再卖出看结果
  9. 再议事理图谱(首届事理图谱研讨会参后感)
  10. ElasticSearch学习(十)—— 增加身份认证