python爬虫No.1

您所在的位置:网站首页 lisa的所有歌曲名称 python爬虫No.1

python爬虫No.1

2024-07-12 17:43| 来源: 网络整理| 查看: 265

自学pythonのNo.5 引语知识总结RequestsXPath 案例 曾经有这样的梗黑网易云音乐

在这里插入图片描述

实际上网易云是很不错的音乐软件之一。这个梗挺让我不舒服的,挫折谁都有,矫情没必要但对矫情之人冷嘲热讽更没必要难道不是么。题外话就到这吧。

引语

记录学习路程,抛砖引玉。如有更好的算法或者出现错误,欢迎指点。

知识总结 使用Requests库访问页面使用XPath进行元素定位,爬取数据解析、保存数据 Requests

Requests是Python HTTP的客户端库,编写爬虫的时候都会用到,编写起来也很简单。它有两种访问方式:Get和Post。这两者最直观的区别就是:Get把参数包含在url中,而Post通过request body来传递参数。

r = requests.post('http://xxx.com', data = {'key':'value'}) # data是传递的表单参数,data的数据类型是字典 """ 访问网易云如下: """ r = requests.get('http://music.163.com') XPath

表达式含义node选取node节点的所有子节点/从根节点选取//选区所有当前节点,不考虑他们的位置.当前节点…父节点@属性选择|或,两个节点的合计text()当前路径下的文本内

表达式含义node选取node节点的所有子节点/从根节点选取//选区所有当前节点,不考虑他们的位置.当前节点…父节点@属性选择I或,两个节点的合计text()当前路径下的文本内容

例如:

xpath(‘node’) 选取了node节点的所有子节点xpath(’/div’) 从根节点上选取div节点xpath(’//div’) 选取所有的div节点xpath(’./div’) 选取当前节点下的div节点xpath(’…’) 回到上一个节点xpath(’//@id’) 选取所有的id属性xpath(’//book[@id]’) 选取所有拥有名为id的属性的book元素xpath(’//book[@id=“abc”]’) 选取所有book元素,且这些book元素拥有id= "abc"的属性xpath(’//book/title | //book/price’) 选取book元素的所有title和price元素

HTML页面中涉及到的元素如列表List缩写是li;nide,div也是html中的知识。爬取网页需要我们对网页的知识有一定的了解,学习起来也不难。对于HTML的知识不会涉及,如果需要使用以后我可以再搜索相关知识进行学习,主体是了解以及掌握基本的爬虫知识。假如想要定位到HTML中的所有列表项目,可以采用下面这段代码:

from lxml import etree html = etree.HTML(html) result = html.xpath('//li') 案例

强调:本案例仅限于学习分享。不用于任何商业用途。

# 爬取网易云音乐 歌手的前50首歌曲的ID和名称 import requests from lxml import etree headers = { 'Referer': 'http://music.163.com', 'Host': 'music.163.com', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'User-Agent': 'Chrome/10' } # 得到指定歌手 热门前50的歌曲ID,歌曲名 def get_songs(artist_id): page_url = 'https://music.163.com/artist?id=' + artist_id # 获取对应HTML res = requests.request('GET', page_url, headers=headers) # XPath解析 前50的热门歌曲 html = etree.HTML(res.text) href_xpath = "//*[@id='hotsong-list']//a/@href" name_xpath = "//*[@id='hotsong-list']//a/text()" hrefs = html.xpath(href_xpath) names = html.xpath(name_xpath) # 设置热门歌曲的ID,歌曲名称 song_ids = [] song_names = [] for href, name in zip(hrefs, names): song_ids.append(href[9:]) song_names.append(name) print(href, ' ', name) return song_ids, song_names # 设置歌手ID,陈奕迅为2116 artist_id = '2116' [song_ids, song_names] = get_songs(artist_id)

结果如下:

/song?id=65766 富士山下 /song?id=65538 好久不见 /song?id=65533 红玫瑰 /song?id=65536 爱情转移 /song?id=28563317 阴天快乐 /song?id=65800 最佳损友 /song?id=65528 淘汰 /song?id=551816010 我们 /song?id=66282 浮夸 /song?id=64561 单车(Live) /song?id=64634 一丝不挂 /song?id=1468192805 世界上不存在的歌 (2020重唱版) /song?id=35403523 陪你度过漫长岁月 /song?id=64093 孤独患者 /song?id=31877628 十年(Live) /song?id=28481103 你给我听好 /song?id=28481818 可以了 /song?id=65919 K歌之王 (Live) /song?id=64317 因为爱情 /song?id=1462659723 Shall We Talk (Tre Lune MMXIX) /song?id=65923 人来人往 (Live) /song?id=64293 苦瓜 /song?id=66285 葡萄成熟时 /song?id=27867449 倾城 /song?id=65761 白玫瑰 /song?id=64126 内疚 /song?id=64048 完 /song?id=65312 明年今日 (2007 Live) /song?id=64922 落花流水 /song?id=25730757 稳稳的幸福 /song?id=64443 约定(Live) /song?id=64797 于心有愧 /song?id=31426608 无条件 /song?id=65769 不如不见 /song?id=64833 沙龙 /song?id=65904 十面埋伏 (Live) /song?id=27483204 斯德哥尔摩情人 /song?id=66272 夕阳无限好 /song?id=64638 陀飞轮 /song?id=437802725 四季 /song?id=27483203 失忆蝴蝶 /song?id=64625 无人之境 /song?id=25638273 梦想天空分外蓝 /song?id=186331 最冷一天 /song?id=65758 裙下之臣 /song?id=27483202 任我行 /song?id=66265 阿牛 /song?id=64803 今天只做一件事 /song?id=33111726 喜欢一个人 /song?id=65900 防不胜防 (Live)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3