#需求:獲取每乙個大分類下的每個子分類下的所有歌手名
#思路:
#1.獲取大分類的url,並請求
#2.獲取小分類的url,並請求
#3.獲取歌手名
import requests
from lxml import etree
#定義請求函式
defget_requests
(url)
: response = requests.get(url=url, headers=headers)
return etree.html(response.text)
defget_big_type
(url)
:#轉換成html元素物件
html = get_requests(url)
#獲取大分類的url
big_type_list = html.xpath(
'//div[@class="blk"]/ul/li'
)for big_type in big_type_list:
#獲取大標題鏈結
big_href = big_type.xpath(
'./a/@href')[
0]#獲取拼接完整的鏈結
big_href_full =
''+big_href
get_small_type(big_href_full)
#定義獲取小分類的url函式
defget_small_type
(big_href_full)
: html = get_requests(big_href_full)
#獲取每個小分類
small_li_list = html.xpath(
'//ul[@class="n-ltlst f-cb" and @id="initial-selector"]/li'
)for small_li in small_li_list:
#獲取小分類名字
small_name = small_li.xpath(
'./a/text()')[
0]#獲取小分類鏈結
small_herf = small_li.xpath(
'./a/@href')[
0]small_href_full =
''+ small_herf
get_singer(small_name, small_href_full)
defget_singer
(small_name, small_href_full)
: html = get_requests(small_href_full)
# 獲取歌手名
# 前五個://ul[@id="m-artist-box"]/li/p/a/text()
# 中間五個://ul[@id="m-artist-box"]/li[@class="line"]/p/a/text()
# 其它://ul[@id="m-artist-box"]/li[@class="sml"]/a/text()
# 最終得到:
# //ul[@id="m-artist-box"]/li//a/text()
singer = html.xpath(
'//ul[@id="m-artist-box"]/li//a/text()'
)#儲存資料
write_to_txt(small_name, singer)
defwrite_to_txt
(small_name, singer)
: dic =
dic[
"小標題"
]= small_name
dic[
"歌手"
]= singer
with
open
('網易雲歌手.txt'
,'a'
, encoding=
'utf_8'
)as f:
f.write(
str(dic)
+'\n'
)if __name__ ==
'__main__'
:#定義url:
base_url =
'discover/artist/'
# 定義請求頭
headers =
get_big_type(base_url)
python 爬網易雲歌手id和歌手姓名
成功爬網易雲的關鍵點在於獲取網易雲 的框架原始碼,開啟網易雲 然後右鍵檢視原始碼 發現歌手的id原始碼中找不到 觀察原始碼會發現有標籤iframe即網頁巢狀網頁,開啟開發者工具,輸入歌手id能夠定位到歌手的id位置,右擊檢視框架原始碼 會發現很多東 在框架原始碼裡,尋找框架原始碼的鏈結規律,依此遍歷...
爬取網易雲歌單
偶爾在微博上看到,要是歌單裡誰的歌超過30首,那肯定是真愛吧。我看了連忙開啟網易雲 我的歌單,結果1000多首歌。這讓我自己數得數到猴年馬月呀.於是萌生出了寫一段小爬蟲來統計的想法。剛開始想直接解析網頁元素,後發現很麻煩,很多資訊不能一次抓取到,於是找到網頁請求的介面,結果介面有加密引數,看了一下j...
爬取網易雲歌單標籤
import reimport urllib.request import urllib.error import urllib.parse import jieba defget all hotsong url headers request urllib.request.request url ...