week04day04(爬虫)

一. 嵌套构造URL

下载所有英雄的皮肤图片:因为每个英雄图片的网址不同,但是有共同点,通过构建这个网址,再经过循环建立 所有链接
import requests
import os# 1. 获取所有英雄的ID
def get_all_hero_id():url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'res = requests.get(url).json()return [x['heroId'] for x in res['hero']]# list1 = get_all_hero_id()
# print(list1)
# https://game.gtimg.cn/images/lol/act/img/js/hero/{897}.js# 2.定义函数获取指定英雄的皮肤信息
def get_one_hero_skins(hero_id:str):url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js'result = requests.get(url).json()# 创建英雄的文件夹hero_name = result['hero']['name']folder_path = f'所有英雄的皮肤/{hero_name}'if not os.path.exists(folder_path):os.mkdir(folder_path)# 下载这个英雄的皮肤的链接for skin in result['skins']:skin_name = skin['name'].replace('/','')skin_img = skin['mainImg']if not skin_img:skin_img = skin['chromaImg']# 下载皮肤图片res = requests.get(skin_img)if res.status_code == 200:file_path = f'{folder_path}/{skin_name}.jpg'with open(file_path,'wb') as f:f.write(res.content)print('下载成功!')if __name__ == '__main__':ids = get_all_hero_id()for x in ids:get_one_hero_skins(x)

二、selenium

  • 使用和浏览器相匹配的webdriver

  • chrome://version/ 查看版本

1.selenium的基本使用

from selenium.webdriver import Chrome# 1.创建浏览器对象
driver = Chrome()# 2.打开页面
driver.get('https://movie.douban.com/top250')# 3. 获取网页源代码
print(driver.page_source)# 4. 关闭浏览器窗口
driver.close()# 5.释放资源
driver.quit()

2. selenium进阶  自动在京东网站的搜索框中查找笔记本电脑

from selenium.webdriver import Chrome
from time import sleep
from  selenium.webdriver.common.by import By# 1. 创建对象
b = Chrome()# 2.打开网页
b.get('https://www.jd.com/')
# 强制等待5s
sleep(5)# 输入框输入内容
# a.找到输入框
# 通过id 找到输入框
input_tag = b.find_element(By.ID, 'key')# b. 输入东西
# send_keys 是自动输入
input_tag.send_keys('笔记本电脑\n') # \n是回车的意思
input('是否结束')# 3.结束
b.close()
b.quit()

3. selenium再进阶  在百度中进行搜索, 增加功能:获取所有打开的页面,并且切换到最新打开的页面

from selenium.webdriver import Chrome
from time import sleep
from selenium.webdriver.common.by import By# 1. 创建对象
b = Chrome()# 2.打开网页
b.get('https://www.baidu.com/')
sleep(5)# 输入框输入内容
# a.找到输入框
# 这里的value去网页看检查, 看输入框的id 是什么,这里百度的id 是kw
input_tag = b.find_element(By.ID, 'kw')# b. 输入东西
input_tag.send_keys('上海天气') # \n是回车的意思
# 百度一下那个按钮
btn = b.find_element(By.ID,'su')# 按下按钮
btn.click()
# 获取当前所有打开的窗口
all_window = b.window_handles
# 切换到最新打开的浏览器窗口,[-1]是最右边新的窗口
b.switch_to.window(all_window[-1])# 3.结束
b.close()
b.quit()

**4.selenium超进阶  获取lol 所有装备名字 加入等待。 显示等待、隐式等待以及睡眠等待, 且使用selenium获取元素 


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait# 1.浏览器的选项对象
options = webdriver.ChromeOptions()# 浏览器实例化
chrome = webdriver.Chrome()# 打开页面
chrome.get('https://lol.qq.com/data/info-item.shtml#Navi')# 1.隐式等待
# 设置全局元素等待超时时间20秒
#设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步,超出设置的时长20秒还没有定位到元素,则抛出异常。
# 缺点:程序会一直等待整个页面加载完成,直到超时,但有时候我需要的那个元素早就加载完成了,只是页面上有个别其他元素加载特别慢,我仍要等待页面全部加载完成才能执行下一步。
# 注意:对driver起作用,所以只要设置一次即可,没有必要到处设置
chrome.implicitly_wait(20)# 2.显式等待
# 最长等待时间
wait_obj = WebDriverWait(driver=chrome,timeout=10)
# 显示等待是明确提出要等什么, 在这里是等待#jSearchHeroDiv>li>a该标签的内容加载完毕
wait_obj.until(expected_conditions.element_to_be_clickable(chrome.find_element(By.CSS_SELECTOR,'#jSearchHeroDiv>li>a')))# 3.强制等待 from time import sleep
# 强制等待10秒再执行下一步。缺点:是不管资源是不是完成,都必须等待
sleep(10)# 使用selenium获取页面元素
items_tags_p = chrome.find_elements(By.CSS_SELECTOR,'#jSearchItemDiv>li>p')
for p in items_tags_p:print(p.text)chrome.close()
chrome.quit()

4.爬取中国知网 数据挖掘第一篇论文的摘要

from selenium.webdriver import Chrome
from time import sleep
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
# 1.实例化 打开网页
b = Chrome()
b.get('https://www.cnki.net/')
sleep(5)# 2. 获取输入框
search_tag =b.find_element(By.ID,'txt_SearchText') # 按id找
search_tag.send_keys('数据挖掘\n') #自动往输入框中输入数据挖掘 并按回车sleep(10)# 3.获取所有结果的链接标签
all_results =b.find_elements(By.CSS_SELECTOR,'.result-table-list .name>a') # CSS# 点击第一个
all_results[0].click()
sleep(10)# 获取当前所有打开的窗口
all_window = b.window_handles
# 切换到最新打开的浏览器窗口,[-1]是最右边新的窗口
b.switch_to.window(all_window[-1])#使用bs4解析内容
soup = BeautifulSoup(b.page_source,'lxml')
result = soup.select_one('#ChDivSummary').text
print(result)input('end?')
b.close()
b.quit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言特殊函数

静态函数 背景知识:普通函数都是跨文件可见的,即在文件 a.c 中定义的函数可以在 b.c 中使用。 静态函数:只能在定义的文件内可见的函数,称为静态函数。 语法 staitc void f(void) // 在函数头前面增加关键字 static &#xff…

读取7400MB/s!华为发布eKitStor Xtreme M.2闪存条

今日,华为举行数据存储新春新品发布会,不仅发布全新数据湖解决方案,华为还针对商业市场与分销市场发布了全闪存存储新品。 据介绍,面向游戏加速、影视编辑、户外作业等场景,华为发布eKitStor Xtreme系列高性能M.2闪存条…

Leetcode454四数相加II

参考链接&#xff1a;代码随想录&#xff1a;Leetcode454四数相加II 解法1&#xff1a;听了代码随想录之后自己YY出来的解法&#xff08;200ms&#xff09;&#xff0c;有点慢 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>&am…

常用的函数式接口(Supplier、Consumer、Predicate、Function)

目录 一.函数式接口作为方法的参数 二.函数式接口作为方法的返回值 三.常用的函数式接口 3.1生产型Supplier接口 3.2消费型Consumer接口 抽象方法&#xff1a;accept 默认方法&#xff1a;andThen 3.3判断型Predicate接口 抽象方法&#xff1a;test 默认方法&#xf…

力扣基础刷题---二分查找

704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 中心思想&#xff1a;找到中间值&#xff0c;跟中间值比…

vue3封装接口(自测可用)

注&#xff1a;别忘记安装axios 在实际的项目实战中如果我们不对接口加以管理&#xff0c;整篇看着就很乱&#xff0c;这个时候我们就要用到接口封装了。 废话不多说直接上代码&#xff01;&#xff01;&#xff01; 首先是request.js import axios from "axios";/…

Windows共享文件夹无法访问,返回错误:有多个连接...多个用户名...

文章目录 问题解决参考 问题 访问共享文件夹时&#xff0c;返回了类似有多个连接…多个用户名…之类的错误&#xff0c;进行了解决。具体是弹出错误窗口&#xff1a; Multiple connections to a server or shared resource by the same user, using more than one user name,…

设计模式--工厂模式

普通创建对象的方式&#xff0c;如&#xff1a; interface ICourse{public void record(); }class JavaCourse implements ICourse{Overridepublic void record() {System.out.println("Java 课程");} } public class Test {public static void main(String[] args)…

2024.2.23

1、消息队列代码 msgsnd.c #include<myhead.h> //定义一个消息类型 struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文 };//定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int …

Devc++ Easyx 实现 瓦片地图编辑数据导入游戏

导出的DLC 直接放入 exe 同文件夹下即可自动读取。 // 程序&#xff1a;DLC 自动读取加载框架示例 // 作者&#xff1a;民用级脑的研发记录 // 邮箱&#xff1a;1309602336qq.com // 编译环境&#xff1a;Devc/VC 2010/Visual Studio 2022&#xff0c;EasyX_20220901/Easyx_202…

Docker容器故障排查与解决方案

Docker是一种相对使用较简单的容器&#xff0c;我们可以通过以下几种方式获取信息&#xff1a; 1、通过docker run执行命令&#xff0c;或许返回信息 2、通过docker logs 去获取日志&#xff0c;做有针对性的筛选 3、通过systemctl status docker查看docker服务状态 4、通过…

转载:Linux全自动批量配置SSH免密

转载自 https://www.mr-mao.cn/archives/auto-configure-ssh-nopass-login.html 1、在主机的操作系统上安装expect 2、新建host_ip文件&#xff0c;内容格式如下 host_ip文件格式 172.16.1.100 password 172.16.1.101 password 172.16.1.102 password 172.16.1.103 pass…

[深度学习]图片相似度计算

理论铺垫&#xff1a;VGG16及其在图片对比中的应用 VGG16是一种深度学习模型&#xff0c;它属于卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff09;的一种&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;开发。这个…

数据安全治理实践路线(上)

基于以上数据安全治理实践理念&#xff0c;可以按照自顶向下和自底向上相结合的思路推进实践过程。一方面&#xff0c;组织自顶向下,以数据安全战略规划为指导,以规划、建设、运营、优化为主线&#xff0c;围绕构建数据安全治理体系这一核心&#xff0c;从组织架构、制度流程、…

React setState同步还是异步

React18 setState是同步还是异步&#xff1f;_react18 同步-CSDN博客 React18之前或者React18使用了ReactDOM.render&#xff0c;setState在React调度流程中是异步更新&#xff0c;在原生事件和setTimeout中是同步更新。React18使用ReactDOM.createRoot&#xff0c;那么默认都是…

“从根到叶:深入理解排序数据结构“

一.排序的概念及引用 1.1排序的概念 排序是指将一组数据按照一定的规则重新排列的过程。排序的目的是为了使数据具有有序性&#xff0c;便于查找、插入、删除等操作&#xff0c;提高数据的组织和管理效率。 稳定性是指如果序列中存在相等元素&#xff0c;在排序完成后&#…

LINUX中用C获得当前执行应用的全路径

之前有博文&#xff1a; LINUX中用C获得当前执行应用的所在路径_linux c语言 直接使用.\获取的路径是程序所在路径 还是命令执行路径-CSDN博客 这个代码也没问题。现实中有时取的路径并不对。比如说&#xff0c;我是../work/test&#xff0c;这个路径就不对了。简单的说&#…

nginx中的location

在 nginx 中&#xff0c;location 是用来匹配请求 URI 的指令&#xff0c;它告诉 NGINX 如何处理特定的请求。location 指令通常用于配置不同 URI 的访问规则&#xff0c;例如重定向、反向代理、设置缓存等。 以下是 location 指令的一般格式&#xff1a; location [ | ~ | …

网卡本质,网络发展(局域网,广域网概念)

目录 引入 网卡的本质 网络的发展 引入 早期 局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 注意 引入 前面我们已经学习了很多关于linux系统的知识,其中文件系统和线程尤为繁杂 而网络其实也算系统的一部…

Dart:谷歌的现代化编程语言之旅

内容概览 引言&#xff1a;一、Dart语言简介二、Dart的特点三、Dart在Flutter中的应用四、Dart的未来展望五 与JavaScript代码对比结语&#xff1a; 引言&#xff1a; 在Web和移动应用开发领域&#xff0c;JavaScript一直是最流行的编程语言之一。然而&#xff0c;随着技术的不…