当前位置: 首页 > article >正文

爬虫学习实战

1.大学排名爬取(简单)

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

url = 'https://daxue.911cha.com/'
driver = webdriver.Chrome()
# 设置隐式等待,等待页面加载完成
driver.implicitly_wait(10)
driver.get(url)
time.sleep(5)
el_list = driver.find_elements(By.XPATH, '/html/body/div[2]/div[1]/div/div[4]/ul/li/a')
print(len(el_list))

data_list = []
for el in el_list:
    temp = {}
    # 获取父元素
    parent_el = el.find_element(By.XPATH, '..')
    # 为获取父元素排名
    full_text = parent_el.text
    rank = full_text.split('、')[0]  # 提取排名部分
    temp['rank'] = rank
    temp['title'] = el.text  # 获取链接文本
    temp['link'] = el.get_attribute('href')  # 获取链接地址
    print(temp)
    data_list.append(temp)

driver.quit()

2.云歌曲爬取 

 注意点:

1.只能爬取免费歌曲

2.正则表达式上一篇博客有,因为含有内部frame框架,所以xpath路径无法获取,只能选择正则表达式,或者尝试selenium实现。

3.https://music.163.com/song/media/outer/url?id=.mp3 这个是以前的某云外链地址,长期有效,现在只是还能用。

# -*- coding: utf-8 -*-
# document.charset 查看源码编码格式
import requests
import time
import re
import os

filename = 'musics\\'
# 如果没有则创建文件夹,os与操作系统实现交互功能(创建文件夹和目录)
if not os.path.exists(filename):
    os.makedirs(filename)

url = 'https://music.163.com/discover/toplist?id=3778678'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'}

response = requests.get(url, headers=headers)
time.sleep(5)
# re.findall
# 这个函数用于在字符串中查找所有与正则表达式模式匹配的部分,并返回一个包含所有匹配项的列表
# r 前缀表示这是一个原始字符串,其中的反斜杠不会被解释为转义字符
# (\d+): 捕获组,匹配一个或多个数字
# (.*?): 捕获组,非贪婪匹配任何字符(包括空字符),直到遇到 </a>
# print(response.text)
html_data = re.findall(r'<li><a href="/song\?id=(\d+)">(.*?)</a>', response.text)

for num_id, title in html_data:
    #  f-string 直接嵌入表达式
    music_download = f'https://music.163.com/song/media/outer/url?id={num_id}.mp3'
    music_content = requests.get(music_download, headers=headers)
    with open('musics\\' + title + '.mp3', 'wb') as f:
        f.write(music_content.content)
        print(num_id, title)

http://www.kler.cn/news/340588.html

相关文章:

  • Git分支-团队协作以及GitHub操作
  • Leetcode—200. 岛屿数量【中等】
  • QT系统学习篇(5)-信号与槽
  • Python Kivy 样式与设计教程
  • pytest的基础入门
  • 1-Lipschitz函数
  • IDEA下“File is read-only”可能原因及“找不到或无法加载主类”问题的解决
  • ROS2入门篇——ROS2第一个节点
  • Chromium 如何定义一个chrome.settingsPrivate接口给前端调用c++
  • BUU刷题-Pwn-shanghai2018_baby_arm(ARM_ROP_csu_init,ARM架构入门)
  • React常见优化问题
  • 如何编写测试用例
  • python 实现algorithm topo卡恩拓扑算法
  • C/C++复习(一)
  • 深入了解 TypeScript 现代 JavaScript 的超集
  • sqli-labs less-14post报错注入updatexml
  • gbase8s数据库实现黑白名单的几种方案
  • 网络受限情况下安装openpyxl模块提示缺少Jdcal,et_xmlfile
  • 2-110 基于matlab的双字典交叉稀疏表示的SAR图像变化检测
  • 运行CtsVerifier.apk报错