• 21 - 数据接口与selenium的基本用法


    Day 21

    一、数据接口

    在网页数据面打开检查,利用精确定位标签对应网页源代码的位置,在点击network ,可以通过改按钮获取浏览器信息、cookie信息,并且找到数据接口
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • 实例:获取英雄联盟所有英雄姓名
    import requests
    
    response = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js')
    
    result = response.json()
    
    for x in result['hero']:
        print(x['name'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、selenium的基本用法

    1. 创建浏览器对象(浏览器对象如果是全局变量,浏览器不会自动关闭)

    from selenium.webdriver import Chrome
    b = Chrome()
    
    • 1
    • 2

    2. 打开网页(你需要爬的数据在哪个网页里面,就打开哪个网页)

    b.get('https://movie.douban.com/top250')
    
    • 1

    3. 获取网页源代码(获取到的一定是页面中加载出来的)

    print(b.page_source)
    
    • 1

    3. 获取网页源代码(获取到的一定是页面中加载出来的)

    b.close()
    
    • 1

    二、selenium控制浏览器的基本行为

    • 此处以某东作为示例
    b = Chrome()
    b.get('https://www.jd.com')
    
    • 1
    • 2

    1.输入框输入内容

    • 利用代码在目标网站进行伪人类操作,如在输入框输入想要搜索的内容
    • 1)找到输入框:需要自身对网页进行解析,找到输入框对应的标签,并且获取。
    input_tag = b.find_element_by_id('key')
    
    • 1
    • 2)输入框输入内容:在找到输入框对应的标签后,赋予变量,并使用 输入框.send_keys方法输入想要搜索的内容即可,注意需要在文本内容最后加\n,意思代表回车。
    input_tag.send_keys('电脑\n')
    print(b.page_source)
    
    • 1
    • 2
    • 点击标签
    • 在网页上实现点击功能,同上也需要找到需要点击按钮对应的标签,使用 按钮标签.click()方法实现点击命令。
    btn = b.find_element_by_css_selector('#navitems-group2 .b')
    btn.click()
    
    • 1
    • 2

    练习:利用输入框和点击完成对需要商品的搜索和点击下一页,并将这两页数据持久化

    from selenium.webdriver import Chrome
    from time import sleep
    from bs4 import BeautifulSoup
    import csv
    import lxml
    f = open('files/手机数据.csv', 'w', encoding='utf-8')
    writer = csv.writer(f)
    writer.writerow(['商品','价格'])
    
    
    def analysis_data(html: str):
        soup = BeautifulSoup(html,'lxml')
        all_iphone = soup.select('#J_goodsList>ul>li>div.gl-i-wrap')
        # print(all_iphone)
        phone = []
        for iphone in all_iphone:
            name = iphone.select_one('.p-name em').text
            price = iphone.select_one('.p-price i').text
            phone.append([name, price])
        writer.writerows(phone)
        return phone
    
    
    
    
    b = Chrome()
    # 1.输入框输入内容
    b.get('https://www.jd.com')
    
    # a.找到输入框标签
    input_tag = b.find_element_by_id('key')
    
    # b.在输入框输入内容
    input_tag.send_keys('手机\n')
    sleep(2)
    # c.第一页获取手机页面数据
    result = b.page_source
    analysis_data(result)
    
    sleep(2)
    # # 2.点击按钮
    # # 点击第二页
    btn = b.find_element_by_css_selector('#J_bottomPage>span>.pn-next')
    btn.click()
    
    # 获取第二页手机页面数据
    sleep(2)
    result1 = b.page_source
    analysis_data(result1)
    f.close()
    
    
    
    input('是否结束:')
    b.close()
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    三、切换选项卡

    • 在我们自行浏览网页时,会打开多个标签页,并且来回切换,怎么能使用代码做到呢?

    1.基本操作,创建浏览器饼打开网页,在输入框输入内容,获取需要点击的所有标签: 如果拿到标签后需要点击或者输入,必须通过浏览器获取标签

    from selenium.webdriver import Chrome
    from time import sleep
    from bs4 import BeautifulSoup
    
    # 1. 基本操作
    b = Chrome()                        # 创建浏览器
    b.get('https://www.cnki.net/')      # 打开中国*网
    search_tag = b.find_element_by_id('txt_SearchText')     # 获取输入框
    search_tag.send_keys('数据分析\n')      # 输入框输入'数据分析',然后按回车
    sleep(1)        # 切换界面最后做一个等待操作
    
    # 获取需要点击的所有标签: 如果拿到标签后需要点击或者输入,必须通过浏览器获取标签
    all_result = b.find_elements_by_css_selector('.result-table-list .name>a')
    # 点击第一个结果(这儿会打开一个新的选项卡)
    all_result[0].click()
    sleep(1)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2. 切换选项卡

    • 注意:selenium中,浏览器对象(b)默认指向一开始打开的选项卡,除非用代码切换,否则浏览器对象指向的选项卡不会变
    • 1)获取当前浏览器上所有的窗口(选项卡): 浏览器.window_handles
    • 2)切换选项卡
    # 跳转到窗口(获取所有窗口)
    b.switch_to.window(b.window_handles[-1])
    
    • 1
    • 2
    • 3)解析内容
    soup = BeautifulSoup(b.page_source, 'lxml')
    result = soup.select_one('#ChDivSummary').text
    print(result)
    
    b.close()           # 关闭当前指向的窗口(最后一个窗口),窗口关闭后,浏览器对象的指向不会发生改变
    
    
    # 回到第一个窗口,点击下一个搜索结果
    b.switch_to.window(b.window_handles[0])
    all_result[1].click()
    sleep(1)
    
    b.switch_to.window(b.window_handles[-1])
    
    soup = BeautifulSoup(b.page_source, 'lxml')
    result = soup.select_one('#ChDivSummary').text
    print(result)
    
    b.close()
    
    
    
    input('结束:')
    b.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    Java教程:二进制数组与十六进制字符串之间的相互转换
    升职加薪之SQL索引
    CentOS7用yum安装MySQL8.0 2209170054
    【教程】应用侧连接华为云IoT平台
    网络安全(黑客)自学
    服务器带宽与家用带宽的区别
    MySQL 的故事:一场 SQL 语句的戏剧演绎
    基于Python分析实现酒店评论的中文情感
    1-烷基-3-甲基咪唑六氟磷酸盐[CnMIm][PF6](其中n=4,6,8,10,12)齐岳离子液体
    在vmlogin浏览器中配置SpeechVoices/辅助功能介绍
  • 原文地址:https://blog.csdn.net/Mr_suyi/article/details/126353655