Python爬虫 |
您所在的位置:网站首页 › 来一首酷狗音乐的说说句子简短 › Python爬虫 |
一、爬取的页面思路分析
1.首先我们在浏览器中打开的链接
https://www.kugou.com/yy/rank/home/1-8888.html?from=rank
2.点击F12键或者鼠标右键检查键,我们会看到如下的界面:
5.1 lxml(xpath) :小编的观点为选择获取信息的路径 / :如果在最前面代表从给根节点开始选取,否则为某个节点的子节点 // :从全局节点随机选择节点 @ :选取某个节点的属性 [] :标签里面的信息 text() :标签下的文本信息 #歌曲信息获取 //div/ul/li/a[@class="pc_temp_songname"]/text()5.2 BeautifulSoup(findall):小编的观点为在获取到的源代码中查找关键信息 .findall('获取的标签名称',‘属性(属性加属性值)’) 歌曲信息获取如下: .find_all('a', class_="pc_temp_songname")5.3 re:定义为文本的高级匹配模式,提供搜索,替换等功能。其本质是由一系列字符和特殊符号构成的字串,这个字串即正则表达式 #re库涉及到许多的知识点,在这里小编仅仅分析下面的正则表达式 r'.*?(.*?)' r'' 表示原生字符串 . 匹配除换行外的任意一个字符 * 匹配前面的字符出现0次或多次 ? 为了让匹配重复的元字符尽可能少的向后匹配内容,在匹配重复元字符后加 ‘?’ 号即可 二、代码 lxml库和xpath import requests from lxml import etree from fake_useragent import UserAgent #引入酷狗音乐的排行榜的url url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank" #构造伪装的头部而不必使用自己电脑的User-Agent headers = { "User-Agent":UserAgent().random } #使用requsets库发送请求并返回response对象 response = requests.get(url,headers=headers) #指定编码为‘utf-8’ response.encoding='utf-8' #调用HTML类对HTML文本进行初始化,构造XPath解析对象trees trees = etree.HTML(response.text) #使用xpath方法获取里面的排名,歌曲信息和时长 ranks = trees.xpath("//div/ul/li/@data-index") songnames = trees.xpath('//div/ul/li/a[@class="pc_temp_songname"]/text()') songtimes = trees.xpath('//div/ul/li/span/span[@class="pc_temp_time"]/text()') #定义一个列表 list = [] #zip函数以可迭代对象为输入参数,将可迭代对象里元素分别取出再组合成一个个元组,返回一个列表 for i in zip(ranks,songnames,songtimes): rank,songname,songtime = i data = { "排行":int(rank)+1,#源代码中因为排名前三被加粗,直接调用了一个属性值但是它是从零开始 "歌曲": songname, "播放时长": songtime.replace("\t","").replace("\n","") } list.append(data) print(list)#####bs4库和BeautifulSoup import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank" headers = { "User-Agent":UserAgent().random } response = requests.get(url, headers=headers) #获取到的响应解码为“utf-8” text = response.content.decode('utf-8') #创建一个soup对象(使用的解析器为lxml) soup = BeautifulSoup(text, 'lxml') #使用find_all方法来查询节点 songnames = soup.find_all('a', class_="pc_temp_songname") songtimes = soup.find_all('span',class_='pc_temp_time') #定义一个列表 list = [] #排名 count = 0 for i in zip(songnames,songtimes): songname,songtime = i count +=1 data = { "排行":count, "歌曲": songname.string, "播放时长": songtime.string.replace("\t","").replace("\n","") } list.append(data) print(list)#####re库 import requests from fake_useragent import UserAgent import re url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank" headers = { "User-Agent": UserAgent().random } response = requests.get(url, headers=headers) response.content.decode("utf-8") text = response.text #使用re.findall匹配字符串 songnames = re.findall(r'.*?(.*?)', text, re.S) songtimes = re.findall(r'(.*?)', text, re.S) #定义一个列表 list = [] #排名 count = 0 for i in zip(songnames,songtimes): songname,songtime = i count +=1 data = { "排行":count, "歌曲": songname, "播放时长": songtime.replace("\t","").replace("\n","") } list.append(data) print(list) 三、运行结果
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |