week04day04(爬虫)

一. 嵌套构造URL

下载所有英雄的皮肤图片:因为每个英雄图片的网址不同,但是有共同点,通过构建这个网址,再经过循环建立 所有链接
python 复制代码
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的基本使用

python 复制代码
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进阶 自动在京东网站的搜索框中查找笔记本电脑

python 复制代码
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再进阶 在百度中进行搜索, 增加功能:获取所有打开的页面,并且切换到最新打开的页面

python 复制代码
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获取元素

python 复制代码
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.爬取中国知网 数据挖掘第一篇论文的摘要

python 复制代码
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()
相关推荐
B站计算机毕业设计超人4 小时前
计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
爬虫·python·深度学习·算法·机器学习·自然语言处理·数据可视化
waterHBO6 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
bugtraq202120 小时前
闲鱼网页版开放,爬虫的难度指数级降低。
爬虫
Bigcrab__1 天前
Python3网络爬虫开发实战(15)Scrapy 框架的使用(第一版)
爬虫·python·scrapy
九月镇灵将1 天前
爬虫逆向学习(六):补环境过某数四代
爬虫·补环境·瑞数
kngines1 天前
【PLW004】基于Python网络爬虫与推荐算法的新闻推荐平台v1.0(Python+Django+NLP+Vue+MySQL前后端分离)
爬虫·python·nlp·推荐算法
walk walk2 天前
免费爬虫软件“HyperlinkCollector超链采集器v0.1”
爬虫
亿牛云爬虫专家2 天前
如何通过subprocess在数据采集中执行外部命令 —以微博为例
爬虫·python·数据采集·多线程·代理ip·subprocess·微博