爬虫学习实战

news/2024/12/21 21:13:54/

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

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
import timeurl = '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.textrank = full_text.split('、')[0]  # 提取排名部分temp['rank'] = ranktemp['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 osfilename = '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.ppmy.cn/news/1536892.html

相关文章

【hot100-java】二叉树中的最大路径和

二叉树篇 easy. /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

Run the FPGA VI 选项的作用

Run the FPGA VI 选项的作用是决定当主机 VI 运行时&#xff0c;FPGA VI 是否会自动运行。 具体作用&#xff1a; 勾选 “Run the FPGA VI”&#xff1a; 当主机 VI 执行时&#xff0c;如果 FPGA VI 没有正在运行&#xff0c;系统将自动启动并运行该 FPGA VI。 这可以确保 FPG…

【unity游戏开发】彻底理解AnimatorStateInfo,获取真实动画长度

前言 前置知识&#xff1a;设置参数后&#xff0c;下一个循环才会切换对应动画&#xff0c;所以在下一个循环获取真实的动画长度 AnimatorStateInfo是结构体&#xff01;值类型&#xff0c;要不断重复获取才是最新的 主要是自动设置trigger切换的动画自动切回上一个动画&#x…

面试--java基础

Java基础 Java 中的几种基本数据类型了解么&#xff1f;基本类型和包装类型的区别&#xff1f;包装类型的缓存机制了解么&#xff1f;成员变量与局部变量的区别&#xff1f;静态变量有什么作用&#xff1f;静态方法为什么不能调用非静态成员?重载和重写有什么区别&#xff1f…

MQ 架构设计原理与消息中间件详解(二)

### 一、RabbitMQ 如何保证消息不丢失&#xff1f; 消息不丢失可以分为三个方面进行保障&#xff1a;**生产者投递消息**、**消费者消费消息** 和 **MQ 服务器持久化**。 #### 1.1 生产者角色的消息确认机制 RabbitMQ 提供了两种方式来确保生产者投递的消息能够被成功接收&am…

MAC端VSCode code-runner插件配置 c/c++编译后 文件生成路径

请注意该配置为MAC系统上的。 window系统可以参考此方法去设置 VS Code 版本: 1.94.0 Code Runner 版本: v0.12.2 在VS Code 配置文件(settings.json)中添加/修改以下配置项。 { ..."code-runner.executorMap": {"c": "cd $dir && mkdir -…

24.2.29蓝桥杯|单位换算--8道题

本篇或者本系列文章使用蓝桥云课平台&#xff0c;借助CSDN梳理思路&#xff0c;给自己做一个电子笔记 单位换算类题目注意事项&#xff1a; 在参加蓝桥杯等编程竞赛时&#xff0c;进行单位换算是一个常见的题目类型&#xff0c;特别是涉及到数据存储和传输的问题。在处理单位换…

List的实现类

1.ArrayList&#xff08;数组&#xff09; &#xff08;1&#xff09;代码 新建学生类&#xff1a; package com.collection;public class Student {private String name;private int age;//添加构造方法 都是使用altenter快捷键public Student() {this.name name;this.age…