xmly爬虫案例

Posted 987m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xmly爬虫案例相关的知识,希望对你有一定的参考价值。

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2020/3/25 19:09
 4 # @Author  : Meng
 5 # @File    : paxmly.py
 6 # @Software: PyCharm
 7 
 8 import requests  #模拟浏览器爬取页面 获取页面信息
 9 import parsel #解析网页的包
10 headers = { #伪装成浏览器的请求头  数据格式 是字典
11 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/80.0.3987.149 Safari/537.36
12 }
13 response = requests.get(url=https://www.ximalaya.com/youshengshu/34013148/p2/,headers=headers) #爬取指定页的播放列表
14 sel = parsel.Selector(response.text)  #解析网页
15 sound_list = sel.css(.sound-list ul li a) #获取某一页30条链接
16 list_all=[]  #存所有结果的列表
17 for sound in sound_list[0:30]: #切片
18     # print(sound)
19     media_url = sound.css(a::attr(href)).extract_first() #取出链接
20     # print(media_url)
21     media_url = media_url.split(/)[-1]  #取出音频id
22     # print(media_url)
23     media_name = sound.css("a::attr(title)").extract_first()  #取出音频的名字
24     # print(media_name)
25     list_all.append((media_url,media_name)) #追加到列表
26 # print(list_all)
27 #获取歌曲的真实链接  def定义函数  封装好的
28 def media_api(track_id):
29     api_url =fhttps://www.ximalaya.com/revision/play/v1/audio?id={track_id}&ptype=1;
30     response = requests.get(api_url,headers = headers)
31     #print(response.json())
32     #json返回字典类型  提取使用[]
33     data_json = response.json()
34     src = data_json[data][src]
35     return src
36 #下载器 用来下载mp4
37 def download_meida(media_url,media_name):
38     response = requests.get(media_url,headers = headers);
39     with open(f{media_name}.mp4,mode=wb) as f:  #下载文件 存为相应的文件名
40         f.write(response.content)
41 if __name__ == __main__:
42     for url in list_all:
43         print(url[1])
44         true_url= media_api(url[0])  #代表我们的音频id  ,唯一标识符
45         name = url[1]
46         download_meida(true_url,name)

 

 1 #能发送http请求的库
 2 import requests
 3 import parsel
 4 headers = {
 5 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
 6 }
 7 
 8 def download_meida(media_url,media_name):
 9     response = requests.get(media_url,headers = headers);
10     with open(f{media_name}.mp4,mode=wb) as f:
11         f.write(response.content)
12 
13 def media_api(track_id):
14     api_url =fhttps://www.ximalaya.com/revision/play/v1/audio?id={track_id}&ptype=1;
15     response = requests.get(api_url,headers = headers)
16     #print(response.json())
17     #json返回字典类型  提取使用[]
18     data_json = response.json()
19     src = data_json[data][src]
20     return src
21 
22 #print(media_api(98791745))
23 
24 def get_total_page(page_url):
25     #请求页面
26     response = requests.get(page_url,headers = headers)
27     #获取页面html的内容
28     sel = parsel.Selector(response.text)
29     #通过css选择器找到a标签   .sound-list代表 class属性为sound-list 然后下面的ul 下的li 下的a
30     sound_list = sel.css(.sound-list ul li a)
31     #只有前30个是页面链接 截取前30个
32     for sound in sound_list[:30]:
33         #extract_first()将对象中的文字提取出来
34         #获取a标签的href属性的内容
35         media_url = sound.css(a::attr(href)).extract_first()
36         #/youshengshu/16411402/98791745 --只去最后面的id
37         media_url = media_url.split(/)[-1]
38         # 获取a标签的title属性的内容
39         media_name = sound.css(a::attr(title)).extract_first()
40         #用yield将整个循环的内容返回
41         yield media_url,media_name
42 
43 if __name__ == __main__:
44     #循环页数下载 range代表下载的页数范围
45     for page in range(1,3):
46         meidas = get_total_page(fhttps://www.ximalaya.com/yinyue/23841180/p{page})
47         for media_id,media_name in meidas:
48             #print(media_url, media_name)
49             media_url = media_api(media_id)
50             print(media_url)
51             download_meida(media_url, media_name)

 

以上是关于xmly爬虫案例的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

《Python3网络爬虫实战案例(崔庆才著)》 中文版PDF下载,附源代码+视频教程

《Python3网络爬虫实战案例(崔庆才著)》 中文版PDF下载,附源代码+视频教程

爬虫案例之网易有道翻译JS代码复杂版

爬虫BeautifulSoup库基本使用,案例解析(附源代码)

爬虫案例之网易有道翻译Python代码改写