照葫芦画瓢之python爬虫系列----(2)初次爬取简单的动态网页数据(网易、QQ音乐排行榜)
感谢提供素材的同学,无论好坏,高低,我都真心佩服你:参考文章地址: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音乐排行榜)相关推荐
- python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片
Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...
- Python爬虫实战:selenium爬取电商平台商品数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客挖掘机 PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- 第103篇Python:Python爬虫系列之书籍爬取,细节拉满
前言 大家好,我是辣条. 不知不觉写了有103篇博文了,辣条以后尽量给大家带上编号,这样方便大家后续查阅,毕竟很多人都是放在收藏里起灰,方便你们后续查找的话你们直接看编号就简单多了.这样你们也可以放心 ...
- python爬虫系列--小练爬取花田首页源码
import requests#step1 指定url url='https://love.163.com/' #step2 发送GET请求 response=requests.get(url=url ...
- Python爬虫——使用线程池爬取同程旅行景点数据并做数据可视化
大家好!我是霖hero 正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将 ...
- python爬虫案例分析:爬取肯德基门店地址数据导入csv文件并最终用excel文档呈现
1.用到的模块: requests pprint csv 2.找到肯德基门店网站进入门店位置页面后,打开抓包工具,找到response中包含所需信息的正确的url信息 3. 导入地址url 4.为防止 ...
- python爬虫系列:xpath爬取图片讲解(零基础向)
系列文章目录 python爬虫系列:BeautifulSoup爬取小说讲解(零基础向)(版权问题下架) python爬虫系列:requests下载酷我音乐讲解(零基础向)(版权问题下架) 文章目录 目 ...
- python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解
前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...
- Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)
专题系列导引 爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集 课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...
最新文章
- 漫画:程序员太难了!为什么 Java 中的 main 方法必须是它?
- AI靠语意理解把照片变抽象画,无需相应数据集,只画4笔也保留神韵,有毕加索内味儿了...
- 【Python】如何学好Python
- 【转】Direct3D顶点结构使用总结
- JVM思维导图、正则表达式符号图、企业内部开发流程图
- c#如何根据字符串长度获得宽度
- 如何在opengl用代码绘制英文_如何用AIPS直接绘制服装款式图(线稿)
- 重磅开源!《阿里巴巴Android开发手册》抢鲜下载!
- 【LeetCode】【字符串】题号:*537. 复数乘法
- 《iOS取证实战:调查、分析与移动安全》一3.6 iPhone操作系统
- Lingo软件的基本语法
- Dotween 动态path设置
- 计算机word简历制作教程,用word制作个人简历的方法
- pcr计算码率的过程
- PDF连接服务器信息,远程连接服务器.pdf
- Volatile能不能保证线程安全?
- linux卸载espeak,eSpeak:Linux下的“语音精灵”
- PERL 连接FTP实现文件上传下载
- Debezium系列之:Debezium UI部署详细步骤
- Disney Springs - 迪士尼之泉
热门文章
- 安能物流敲定上市发行价:取发售区间下限,工作态度有待改善
- 2019年度区块链安全复盘总结
- Origin pro更改语言灰色时的解决办法
- 致远a8-v5-6.0协同管理软件_Batteries for Mac(电池电量管理软件) v2.0
- [转载]巴塞罗那神圣家族教堂
- mysql+sql+子查询语句_SQL语句:子查询
- 具有对称性质的单参数混沌镜像系统的切换控制
- [60 量化交易] 对股票进行量化交易 买入最便宜的股票一年后再卖出看结果
- 再议事理图谱(首届事理图谱研讨会参后感)
- ElasticSearch学习(十)—— 增加身份认证