python+selenium爬取蜻蜓FM有声小说链接

爬取蜻蜓FM有声小说链接

1 为什么说是链接而不是音频呢?

原因是我只是一个刚开始学习的小白,因为这个是动态加载的数据,我还不会提取这个Network中的链接,写这个只是为了记录学习过程,
由于是第一次,不足之处还望理解包涵,并希望能得到各位前辈的指导。

2 首先导包

因为是动态加载的,所以用selenium

import time
from selenium import webdriver

3 准备工作

url = 'https://www.qingting.fm/channels/225733/'
    
driver = webdriver.Chrome()

driver.get(url)
    

4 向目标发送请求后,这里就需要获取其动态数据了

由于目标当前共263章,而加载一次是30章,这儿需要做二个动作,一是下拉滚动条,二是点击加载更多

for i in range(10):
    
    driver.execute_script('window.scrollTo(0,document.body.scrollHgight)')
    
    button = driver.find_element_by_class_name('addMoresButtion')
    
    button.click()

5 上述动作之后,数据就可以加载完成,之后开始解析

这里采用xpath,感觉这个方便,注意是复数elements

data = driver.find_elements_by_xpath('//li/span[1]/a')

6 得到全部数据后遍历取得相应数据

链接和章节名称

for msg in data:
    
    link = msg.get_attribute('href')
    
    name = msg.get_attuibute('text')

7 保存数据

这里需要注意的是换行符的作用

with open('qingting.csv','a',encoding='utf-8') as f:
    
    f.write(name+link+'\n')
    
    f.close()

8 到这儿基本达到了所需,有二个问题需要注意

一是退出浏览器,防止占用资源,二是数据加载完后button消失造成的报错

完整代码给出答案
import time
from selenium import webdriver

class Qingting(object):
    #初始化基本数据
    def __init__(self):
        self.url='https://www.qingting.fm/channels/225733/'
        self.driver = webdriver.Chrome()
    def get_url(self):
        # 请求目标网址
        self.driver.get(self.url)
        # 隐士等待加载网页
        self.driver.implicitly_wait(3)

    # 加载目标网址动态数据
    def jz_url(self):
        # 因为数据加载完成后button会消失而报错
        try:
            # 向下拉滚动条9次,(当前页面数据为263,加载一次为30)
            for i in range(10):
                # 滚动条下拉到底部
                self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
                # 选择'加载更多按钮'后点击
                button = self.driver.find_element_by_class_name('addMoresButtion')
                button.click()
                #点击后暂停时间
                time.sleep(0.5)
        # 上边的try是处理动态加载,这里的except是处理加载完成后
        except:
            # 解析数据
            data = self.driver.find_elements_by_xpath('//li/span[1]/a')
            # 从列表中遍历取出相应数据
            for msg in data:
                link =msg.get_attribute('href')
                name = msg.get_attribute('text')
                print(name, link)
                #保存得到后的数据
                with open('qingting_lxf.csv', 'a', encoding='utf-8') as f:
                    #换行符在这里很重要
                    f.write(name + link + '\n')
                    # 写完后关闭
                    f.close()
        # 上述动作完成后退出浏览器
        self.driver.quit()
if __name__ == '__main__':
   a = Qingting()
   a.get_url()
   a.jz_url()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值