使用xpath爬取酷狗TOP500的歌曲信息, 将排名、歌手名、歌曲名、歌曲时长,提取的结果以文件形式保存下来。参考网址:http://www.kugou.com/yy/rank/home/1-8888.html

  大概步骤:谷歌F12打开开发者工具-->在Elements找到想爬取的信息-->右键Copy XPath(或是根据Network里Response的代码手动写出Xpath路径)-->对比这类信息的xpath,再定位并提取这类信息

  注意:我们获取的Network里Response的代码,Elements的html代码是经过渲染的,仅供参考

import time
import json
import requests
from lxml import etree def get_one_page(url):
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
response = requests.get(url, headers=headers)
response.encoding = response.apparent_encoding
if response.status_code == 200:
return response.text
else:
return None
return None
except RequestException:
return None def parse_one_page(text, id):
html = etree.HTML(text)
ranking = html.xpath('//*[@id="rankWrap"]/div[2]/ul/li/span[3]//text()')
#top3的text()文本信息在strong标签下,是span的子孙节点,所以用//
title = html.xpath('//*[@id="rankWrap"]/div[2]/ul/li/@title')
length = html.xpath('//*[@id="rankWrap"]/div[2]/ul/li/span[4]/span/text()')
if (id == 1):
ranking = [i for i in ranking if i.strip() != '']
#去除第一页提取到的空白信息
for i in range(len(length)):
yield {
'ranking': ranking[i].strip(),
'singer': title[i].split('-')[0].strip(),
#以-分割,取第0个,并去除首尾空白
'song': title[i].split('-')[1].strip(),
'length': length[i].strip()
} def write_to_file(content):
with open('kugou.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False) + '\n')
#ensure_ascii=False不为acsii码,为中文 def main(id):
url = "http://www.kugou.com/yy/rank/home/" + str(id) + "-8888.html"
text = get_one_page(url)
for item in parse_one_page(text, id):
print(item)
write_to_file(item) if __name__ == '__main__':
for id in range(1,24):
main(id)
time.sleep(1)

最新文章

  1. Mvc中域的添加和不同域之间的跳转
  2. 计时器js
  3. 奇怪的Js时间计算方法,跨多个月后出现1天的误差
  4. hadoop2.5.1搭建(二)
  5. 两个C++对象是否相等,要程序员自己下定义,通常是覆盖==操作符
  6. ☆RHEL6创建软raid的使用☆——经典之作
  7. Linux下安装firefox的flash插件
  8. WeUI首页、文档和下载 - 专为微信设计的 UI 库 - 开源中国社区
  9. XML 语法规则
  10. ThreadPool.QueueUserWorkItem的性能问题
  11. validform 一行代码完成所有验证
  12. Object-C 基础学习笔记(for,foreach,while,switch)
  13. 洛谷-统计数字-NOIP2007提高组复赛
  14. VisualStudio 合并代码文件
  15. Android UiAutomator 快速调试
  16. ab压力测试nginx
  17. JavaScript倒计时实现
  18. linux查看操作系统的版本
  19. grep 多行 正则匹配
  20. weblogic11G 修改密码

热门文章

  1. Linux 磁盘原理与管理 (分区 挂载)
  2. [Windows]远程管理服务WinRM远程管理Windows服务器 Invalid use of command line. Type "winrm -?" for help.
  3. PYTHON 学习笔记4 模块的使用、基本IO 写入读取、JSON序列化
  4. ElasticSearch相关概念与客户端操作
  5. 寒假答辩作品:Java小游戏
  6. codewars--js--Happy numbers++无穷大判断
  7. C# 一个帮您理解回调函数的例子(新手必看)
  8. Mac-MacOS降级(Mac系统降级,系统回退)
  9. 邓Laravel2020-01-28
  10. Angularjs集成于ASP.NET MVC数据绑定重构