python利用selenium爬取网易云入驻歌手id、歌手主页id、歌手姓名、歌手粉丝数量

首先需要访问入驻歌手页,可以看到两个a结点中的链接,其中第一个链接为歌手主页,后面的数字是其主页id;第二个链接为歌手的信息主页,后面的数字为歌手id,通过第二个链接的访问可以查看歌手的粉丝数量

python利用selenium爬取网易云入驻歌手id、歌手主页id、歌手姓名、歌手粉丝数量_第1张图片

 成功查看粉丝数量

python利用selenium爬取网易云入驻歌手id、歌手主页id、歌手姓名、歌手粉丝数量_第2张图片

 

注意事项:

1.网页源代码中使用了框架,所以需要使用selenium的switch_to_frame("g_iframe")功能查看框架源代码

2. 入驻歌手界面需要一直往下滑动滑动条,滑动到底部,才能获取所有的入驻歌手信息

代码如下:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote
from pyquery import PyQuery as pq
import time
import requests
import csv
browser = webdriver.Chrome()
browser1 = webdriver.Chrome()

def get_singers():
    html = browser.page_source
    doc = pq(html)
    items = doc('.m-sgerlist li').items()
    
    for item in items:
        get_singer(item)
    


def get_singer(item):
    url=item.find('.icn').attr('href')
    url1='https://music.163.com/#'+url
    print(url1)
    try:
        
        browser1.get(url1)
        browser1.switch_to_frame("g_iframe")
        time.sleep(2)
        doc=pq(browser1.page_source)
        print(url1+"爬取成功")
        get_fans(doc,url)
    except requests.ConnectionError:
        print(url1+"爬取失败")
    

def get_fans(doc,url):
    fannum=[]
    singerid=url[14:]
    fannum.append(singerid)
    items = doc('#head-box').items()
    for item in items:
        indexid=item.find('.u-btn2').attr('href')
        indexid=indexid[11:]
        fannum.append(indexid)
    items = doc('#j-name-wrap').items()
    for item in items:
        name=item.find('.tit').text()
        fannum.append(name)
    items = doc('#tab-box').items()
    for item in items:
        num=item.find('#fan_count').text()
        fannum.append(num)
    
    if len(fannum)==0:
        print("None")
    else:
        with open('singer.csv','a',encoding='utf-8-sig',newline='') as f:
            w = csv.writer(f)
            w.writerow(fannum)
        print(fannum)
        
if __name__=='__main__':
    url = 'https://music.163.com/#/discover/artist/signed/' 
    browser.get(url)
    time.sleep(3)
    browser.switch_to_frame("g_iframe")
    for i in range(1, 10):
        js = "window.scrollBy(0, 10000)"
        browser.execute_script(js)
        time.sleep(2)
    get_singers()
    



 

你可能感兴趣的:(爬虫)