zoukankan      html  css  js  c++  java
  • day02—selenium库

    昨日回顾:
    一、爬虫基本原理
    -爬虫全过程
    1.发送请求
    2.接收响应数据
    3.解析并提取有价值的数据
    4.保存数据
    二、Resquests请求库
    -get
    url
    header
    cookies
    -post
    url
    header
    cookies
    data
    三、爬取校花网
    1.通过主页解析提取详情页
    2.通过详情页提取视频url
    3.获取视频的二进制流写入本地
    四、自动登录github
    1.分析请求头与请求体信息
    -用户名
    -密码
    -token
    -杂七杂八
    2.token
    -通过对login页面的解析提取
    3.对session_url发送请求
    -header:
    user-agent

    -cookies:
    login页面的cookies

    -data:
    form-data
    今日内容:
    一、requests请求库爬取豆瓣电影信息
    —请求url
    https://movie.douban.com/top250

    —请求方式
    GET

    —请求头
    user-agent
    cookies
    二、selenium请求库
    1.什么是selenium
    起初是自动化测试工具,原理是驱动浏览器执行一些自定义好的操作。
    爬虫本质上就是模拟浏览器,所以可以使用他来做爬虫。
    2.为什么要使用selenium
    优点:
    -执行js代码
    -不需要分析复杂的通信流程
    -可以对浏览器做弹窗、下拉等操作
    -*****可以获取动态数据
    -***可以破解登录验证
    缺点;
    -执行效率低
    3.安装与使用
    1.安装selenium请求库:
    pip3 install selenium
    2.必须安装浏览器:
    谷歌、火狐
    http://npm.taobao.org/mirrors/chromedriver/2.38/
    3.安装浏览器驱动
    #爬取电影
    '''
    爬取豆瓣电影信息:
    电影名称、电影url
    电影导演、电影主演
    电影年份、电影类型
    电影评分、电影评论
    电影简介
    1.分析所有主页url
    第一页:
    https://movie.douban.com/top250?start=0&filter=
    第二页:
    https://movie.douban.com/top250?start=25&filter=
    '''
    import requests
    import re
    #爬虫三部曲
    # 1.发送请求
    def get_page(url):
    response=requests.get(url)
    #print(response.text)
    return response

    # 2.解析数据
    def parse_index(html):
    '''
    电影排名、电影url、电影名称、电影导演、电影主演、
    电影年份/类型、电影评分、电影评论、电影简介
    <div class="item">.*?<em class="">(.*?)</em>.*?<a href=".*?">.*?<span class="title">(.*?)</span>
    .*?导演: (.*?)主演: (.*?)<br>.*?</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>
    .*?<span class="inq">(.*?)</span>
    <div class="item">.*?<em class="">(.*?)</em>.*?<a href=".*?">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>.*?</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>
    '''
    movie_list=re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>(.*?)</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>',
    html,
    re.S)
    return movie_list

    # 3.保存数据
    def save_data(movie):
    # 电影排名、电影url、电影名称、电影导演、电影主演
    # 电影年份/类型、电影评分、电影评论、电影简介
    top,m_url,name,daoyan,actor,year_type,point,commit,desc=movie
    data=f'''
    ===========欢迎观赏==========
    电影排名:{top}
    电影url:{m_url}
    电影名称:{name}
    电影导演:{daoyan}
    电影主演:{actor}
    年份类型:{year_type}
    电影评分:{point}
    电影评论:{commit}
    电影简介:{desc}
    ==========欢迎下次再来=========
    '''
    print(data)

    with open('douban_top250.text','a',encoding='utf-8')as f:
    f.write(data)

    print(f'电影:{name}写入成功...')

    if __name__ == '__main__':
    num=0
    for line in range(10):
    url=f'https://movie.douban.com/top250?start={num}&filter='
    num+=25
    print(url)

    #1.往每个主页发送请求
    index_res=get_page(url)

    #2.解析主页获取电影信息
    movie_list=parse_index(index_res.text)

    for movie in movie_list:
    #print(movie)
    # 3.保持数据
    save_data(movie)

    #selenium库的基本使用
    from selenium import webdriver
    from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR
    from selenium.webdriver.common.keys import Keys # 键盘按键操作
    from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的
    from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素
    import time
    #方式一:通过驱动打开浏览器
    driver =webdriver.Chrome(r'chromedriver.exe所在的路径')

    #方式二:把webdriver.exe驱动放到python解释器安装目录/Scripts文件夹中
    #python解释器安装目录/Scripts配置环境变量
    #python解释器安装目录,配置环境变量
    try:
    driver.get('https://www.jd.com/')

    #获取显式等待对象10秒
    #可以等待某个标签加载10秒
    wait=WebDriverWait(driver,10)

    #查找元素id为key
    input_tag=wait.until(EC.presence_of_element_located(
    (By.ID,'key')
    ))
    time.sleep(5)

    #在输入框内输入商品名称
    input_tag.send_keys('公仔')

    #按下回车键
    input_tag.send_keys(Keys.ENTER)

    time.sleep(20)
    finally:
    driver.close()


    #选择器
    import time
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    driver = webdriver.Chrome(r'chromedriver.exe所在的路径')

    try:

    # 隐式等待: 需要在get之前调用
    # 等待任意元素加载10秒
    driver.implicitly_wait(10)

    driver.get('https://www.baidu.com/')

    # 显式等待: 需要在get之后调用
    time.sleep(5)

    '''
    ===============所有方法===================
    element是查找一个标签
    elements是查找所有标签
    '''
    # 自动登录百度 start
    # 1、find_element_by_link_text # 通过链接文本去找
    login_link = driver.find_element_by_link_text('登录')
    login_link.click() # 点击登录

    time.sleep(1)

    # 2、find_element_by_id # 通过id去找
    user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
    user_login.click()

    time.sleep(1)

    # 3、find_element_by_class_name
    user = driver.find_element_by_class_name('pass-text-input-userName')
    user.send_keys('*****')

    # 4、find_element_by_name
    pwd = driver.find_element_by_name('password')
    pwd.send_keys('*****')

    submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
    submit.click()
    # end

    # 5、find_element_by_partial_link_text
    # 局部链接文本查找
    login_link = driver.find_element_by_partial_link_text('登')
    login_link.click()

    # 6、find_element_by_css_selector
    # 根据属性选择器查找元素
    # .: class
    # #: id
    login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin')
    login2_link.click()

    # 7、find_element_by_tag_name
    div = driver.find_elements_by_tag_name('div')
    print(div)


    time.sleep(20)

    finally:
    # 关闭浏览器释放操作系统资源
    driver.close()


  • 相关阅读:
    基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体基础
    用SignalR和Layui搭建自己的web聊天网站
    MySQL查看、修改字符集及Collation
    ASP.NET MVC中有四种过滤器类型
    一个简单的大转盘抽奖程序(附.NetCore Demo源码)
    网站统计中的访问信息收集的前端实现
    微信小程序实现按首字母检索城市列表
    微信小程序异步处理
    微信小程序下拉框
    node.js上传文件
  • 原文地址:https://www.cnblogs.com/2328322824chx/p/11121314.html
Copyright © 2011-2022 走看看