• 数据接口(json)和selenium的使用


    创建文件

    import os
    # os.mkdiv(文件名)
    os.mkdiv('test')
    #创建名为test的文件夹
    # os.path.exists(文件名)   判断文件是否存在 返回布尔值
    
    • 1
    • 2
    • 3
    • 4
    • 5

    数据接口

    有些文件会以接口的形式传入,找到接口之后提取源代码就行。

    例如:英雄联盟的的英雄大部分都是接口的形式

    url = https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js
    
    • 1

    将这个获取到的requests.get(url) 将JSON数据转为python的数据源。(大部分是字典)

    然后用字典操作数据比较简单

    最后写入文件中

    selenium的基本步骤

    需要下载浏览器驱动

    查看自己的浏览器版本:chrome://version/

    下载驱动版本和自己浏览器最近的版本号:(国内镜像文件)https://registry.npmmirror.com/binary.html?path=chromedriver/

    注意:如果没有自己浏览器的版本号,找与之对应最接近的一个版本号的文件夹,下载对应的系统就行,放在安装python的主环境中。

    1.创建浏览器对象(浏览器对象如果是全局变量,浏览器不会自动关闭)
    from selenium.webdriver import Chrome
    b = Chrome()
    
    • 1
    • 2
    2.打开网页(你需要爬的数据在哪个网页里面,就打开哪个网页)
    b.get('https://movie.douban.com/top250')
    
    • 1
    3.获取网页源代码(获取到一定是页面中加载出来的)

    有时候网比较卡的时候可以调用time模块中的sleep函数

    浏览器对象.page_source

    print(b.page_source)
    
    • 1
    4.关闭浏览器
    b.close()
    
    • 1

    selenium的使用方法

    1.输入框输入内容

    1)找到输入框

    网页对象.find_element_by_id() 虽然是id属性的值,但是不用加#,class属性也不加. 直接写标签名

    网页对象.find_element_by_css_selector() 后面接CSS选择器 找到下面的第一个标签

    如果element是复数加了s就代表是许多,返回列表

    2)输入框输入内容

    节点对象.send_keys(输入字符串)(末尾加一个\n可以代表按了一个回车。换行嘛)

    2.点击按钮

    1)找到需要点击的标签

    节点对象.click()

    3.切换选项卡
    获取需要点击的所有标签:如果拿到标签后需要点击或者输入,必须通过浏览器获取标签

    有时候点击一个链接会打开一个新的选项卡

    这时候就要切换选项卡

    就算点开了新的链接,只要不在原来的网页重新覆盖,创建的浏览器对象就依然是最开始的b= chrome()

    切换对象的方法:浏览器对象.switch_to.window(选项卡名)
    网页名查找方法:浏览器对象.window_handles 这个数据一般返回一个列表。直接取-1的下标,就是最新打开的选项卡名。 (打印出来不是中文名字,只是一个地址,但是理解成选项卡名会更好理解一点)

    此时浏览器对象就换成新打开的,可以对这些进行操作。

    最后还是要换回初始浏览器对象在操作其他的链接。

    步骤1:关闭新的浏览器对象

    步骤2:切换选项卡。 (一般把下标写成0。)

    一般selenium的思路步骤:
    就和我们人去打开浏览器操作是一样的

    打开浏览器(创建浏览器对象)-浏览器输入网页(浏览器对象.get()操作)-选中点击获取输入的标签-send_keys或者选中标签点击click

    如果有选项卡,需要切换选项卡 - 浏览器对象.switch_to.window(选项卡名) {选项卡名字,浏览器对象.window_handles[-1]} 返回列表 (此时就切换了浏览器对象在新网页上)

    操作完新浏览器对象操作之后,需要关闭浏览器,关闭之后浏览器对象不会发生改变,也要切换回来

    selenium操作页面滚动

    浏览器对象.execute_script(window.srcollBy(x方向偏移量,y方向偏移量))

    滚动之后过几秒在获取数据

    cookie的设置

    requests:直接在网页需要登录之后,找到对应网页的request Hearders 的cookie的值,复制在Hearder里面

    selenium:需要先在浏览器对象里面登录一次,在刷新网页,然后获取cookie值(返回一个列表),result = 浏览器对象.get_cookies() . 将result写入txt文件,(一般将此数据转成json文件写入txt,下次提取就很方便了)

    下次打开网页,在将写入的txt文件的cookie读出来(json数据格式的文件),在转为python格式文件。遍历这个列表中每个元素依次加入网页的cookie里面。浏览器对象.add_cookie(‘列表中的各个元素’)

    with open('testCookies.txt', encoding='utf-8') as f:
        cookies = f.read()
        mycookies = json.loads(cookies)
    
    for i in mycookies:
        b.add_cookie(i)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代理IP

    requests的代理方法
    proxies = {
        'http': 'http://221.10.105.215:4531',
        'https': 'http://221.10.105.215:4531'
    }
    respones = requests.get('https://www.douban.com',headers=hearders,proxies=proxies)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    221.10.105.215:4531 这个就是我找到的代理ip值。

    这样就完成了requests的更换代理ip值

  • 相关阅读:
    HashMap 源码解读(JDK1.8)
    【架构师视角系列】QConfig配置中心系列之架构设计(一)
    风控策略精准运维的制胜点,一个重要却容易被轻视的内容
    Tomcat 源码分析 (Digester类的使用) (十)
    Minitab Express for Mac(数据分析软件)附破解补丁 v1.5.0 支持M1
    聊聊SQL注入
    10.30 训练周记
    函数 RFC 函数 BAPI
    20221108 今天的世界发生了什么
    NC5 二叉树根节点到叶子节点的所有路径和
  • 原文地址:https://blog.csdn.net/ZiXiaoAo/article/details/126450275