天天看點

python爬取網易雲歌曲名字

之前都是按部就班的往下寫, 終于嘗試在爬蟲裡寫函數了

網址:https://music.163.com/#/artist?id=9272,爬取這50首歌的名字。分析網址:網易雲首頁是https://music.163.com,是以可以知道對于不同的歌手都有一個對應的id,像這樣就需要将參數傳入url中 ,另外浏覽器辨別headers是不變的header(寫爬蟲最關鍵的便是與反爬蟲之間的鬥争,因而我們要養成良好的習慣,學會構造頭部)。

import requests
import re

url='https://music.163.com/artist'

def get_html(url):

    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.63 Safari/537.36'
               }
    params = {
        'id': '9272'
             }

    #通過Request()方法構造一個請求對象
    response = requests.get(url, headers=headers,params=params)
    html=response.text
    print(type(html))   #str
    return html

def parse_html(html):

    #<a href="/song?id=287035" target="_blank" rel="external nofollow" >遇見</a>
    pattern=re.compile('<a href="/song\?id=\d+" target="_blank" rel="external nofollow" >(.*?)</a>')
    names=re.findall(pattern,html)
    print(len(names))
    for name in names:
         print(name)

if __name__ == '__main__':
    html=get_html(url)
    f = open("out.txt","w",encoding='utf-8') #添加encoding='utf-8'可以解決'gbk' codec can't encode character '\xa9'
    f.write(html)      #将html寫入txt檔案
    parse_html(html)
           

注意谷歌浏覽器喜歡在同一标簽頁積累網頁,是以打開的網頁源代碼可能是之前網頁的,是以最好将爬取的網頁建立一個标簽頁(這個問題在這次爬蟲困擾了自己很久)。

python爬取網易雲歌曲名字