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

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.lryc.cn/news/304825.html

相关文章:

  • 【数据结构初阶 6】二叉树:堆的基本操作 + 堆排序的实现
  • IDEA Debug框的 show execution point按钮没了
  • 突破编程_C++_面试(类(1))
  • vue项目使用vue2-org-tree
  • Vue30 自定义指令 函数式 对象式
  • JAVA高并发——单例模式和不变模式
  • RabbitMQ(一):消息队列MQ
  • HarmonyOS—使用预览器查看应用/服务效果
  • 大项目中,某个cpp文件读取所在包路径的方法
  • gem5学习(25):用于异构SoC的片上网络模型——Garnet2.0
  • 康威生命游戏
  • vscode与vue环境配置
  • Linux的ACL权限以及特殊位和隐藏属性
  • 使用openai-whisper实现语音转文字
  • C++模板为什么不能声明和定义分离
  • 啊丢的刷题记录手册
  • 用nginx正向代理https网站
  • 面向对象设计模式
  • 人工智能_CPU微调ChatGLM大模型_使用P-Tuning v2进行大模型微调_007_微调_002---人工智能工作笔记0102
  • Android自编译Pixel3内核加入KernelSU
  • Go 数据库编程精粹:database/sql 实用技巧解析
  • AI-Gateway:一款整合了OpenAI、Anthropic、LLama2等大语言模型的统一API接口
  • Android 广播的基本概念
  • 【Docker实操】部署php项目
  • 多线程-初阶
  • Object和Function是函数,函数都有一个prototype属性
  • stm32利用CubeMX按键控制数码管加减数
  • 前端页面生成条形码,借助layui打印标签
  • 第1~8章 综合复习
  • 转运机器人,AGV底盘小车:打造高效、精准的汽车电子生产线