zoukankan      html  css  js  c++  java
  • Day 02

    昨日回顾:
    一 爬虫基本原理
    - 爬虫全过程
    1.发送请求
    2.接受响应数据
    3.解析并提取有价值的数据
    4.保存数据
    二 Requests请求库
    - GET
    url
    headers
    cookies
    - POST
    url
    headers
    cookies
    data
    三 爬取校花网视频
    1.通过主页解析提取详情页
    2.通过详情页提取视频url
    3.获取视频的二进制流写进本地
    四 自动登录github
    1.分析请求头与请求体信息
    - 用户名
    - 密码
    - token
    - 杂七杂八
    2.token
    - 通过对login页面的解析提取
    3.对session_url发送请求
    - headers:
    - user_agent
    - cookiels:
    - login页面的cookies
    - data:
    - from_data
    今日内容:
    一 request 请求库爬取豆瓣电影信息
    - 请求url
    https://movie.douban.com/top250
    - 请求方式
    GET
    - 请求头
    user-agent
    cookies
    二 selenium请求库
    1、什么是selenium?
    最初是一个自动化测试工具,原理是驱动浏览器执行一些一定好的操作。
    爬虫本质上就是模拟浏览器,所以可以使用它来做爬虫。
    2、为什么要使用selenium?
    优点:
    - 执行js代码
    - 不需要分析复杂的通信流程
    - 对浏览器做弹窗、下拉等操作
    - 获取动态数据 *****
    - 破解登录验证 ***
    缺点:
    - 执行效率低
    3、安装与使用
    1.安装selen请求库
    pip3 install selenium
    2.必须安装浏览器
    谷歌或者火狐
    3.安装浏览器驱动
    http://npm.taobao.org/mirrors/chromedriver/2.38/

    测试用例
    01❤爬取豆瓣电影TOP250
     1 '''
     2 爬取豆瓣电影信息:
     3     电影排名、电影名称、电影url、电影导演
     4     电影主演、电影年份/电影类型
     5     电影评分、电影评论、电影简介
     6 1、分析所有主页的url
     7     第一页:https://movie.douban.com/top250?start=0&filter=
     8     第二页:https://movie.douban.com/top250?start=25&filter=
     9     第三页:https://movie.douban.com/top250?start=50&filter=
    10 '''
    11 import requests
    12 import re
    13 # 爬虫三部曲
    14 # 1.发送请求
    15 def get_page(url):
    16     response = requests.get(url)
    17     return response
    18 # 2.解析数据
    19 '''
    20 <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>
    21 '''
    22 def parse_index(html):
    23     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)
    24     return movie_list
    25 # 3.保存数据
    26 def save_data(movie):
    27     top, m_url, name, director, actor, year_type, point, commit, desc = movie
    28     year_type = year_type.strip('
    ')
    29     year_type = year_type.replace(' ', '')
    30     data = f''''
    31     ❀===========================  影片信息  ============================❀
    32     电影排名:{top}
    33     电影url:{m_url}
    34     电影名称:{name}
    35     电影导演:{director}
    36     电影主演:{actor}
    37     年份类型:{year_type}
    38     电影评分:{point}
    39     电影评论:{commit}
    40     电影简介:{desc}
    41     ❀=======================  影片信息加载完毕  ========================❀
    42         '''
    43     print(data)
    44 
    45     with open('douban_top250.txt','a',encoding='utf-8') as f:
    46         f.write(data)
    47 
    48 if __name__ == '__main__':
    49     # 拼接所有主页
    50     num = 0
    51     for line in range(10):
    52         url = f'https://movie.douban.com/top250?start={num}&filter='
    53         num += 25
    54         print(url)
    55 
    56         # 1.往每个主页发送请求
    57         index_res = get_page(url)
    58 
    59         # 2.解析主页获取电影信息
    60         movie_list = parse_index(index_res.text)
    61 
    62         for movie in movie_list:
    63             # 3.保存数据
    64             save_data(movie)

     02❤selenium基本使用

     1 from selenium import webdriver #web驱动
     2 from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
     3 from selenium.webdriver.common.keys import Keys  # 键盘按键操作
     4 from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一起用的
     5 from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素
     6 import time
     7 
     8 # 方式一:通过驱动打开浏览器
     9 driver = webdriver.Chrome(r'E:Python驱动浏览器chromedriver.exe')
    10 # 方式二:把webdriver.exe驱动到 python 解释器安装目录/Scripts文件夹中
    11 # python解释器安装目录/Scripts配置环境变量
    12 # python解释器安装目录 配置环境变量
    13 # driver = webdriver.Chrome()
    14 try:
    15     # 往官网发送get请求
    16     driver.get('https://www.jd.com/')
    17     # 获取等待对象,可等待某个元素10秒
    18     wait = WebDriverWait(driver, 10)
    19 
    20     # 查找元素id为key
    21     input_tag = wait.until(EC.presence_of_element_located((By.ID, 'key')))
    22 
    23     # 在输入框内输入商品名称
    24     input_tag.send_keys('剑网3')
    25     # 按下键盘回车键
    26     input_tag.send_keys(Keys.ENTER)
    27     time.sleep(5)
    28 finally:
    29     # 关闭浏览器释放操作系统资源
    30     driver.close()
     03❤selenium选择器
     1 ''''''
     2 from selenium import webdriver  # web驱动
     3 from selenium.webdriver.common.keys import Keys  # 键盘按键操作
     4 import time
     5 
     6 import time
     7 
     8 driver = webdriver.Chrome(r'E:Python驱动浏览器chromedriver.exe')
     9 
    10 try:
    11 
    12     # 隐式等待: 需要在get之前调用
    13     # 等待任意元素加载10秒
    14     driver.implicitly_wait(10)
    15 
    16     driver.get('https://www.baidu.com/')
    17 
    18     # 显式等待: 需要在get之后调用
    19     time.sleep(5)
    20 
    21     '''
    22     ===============所有方法===================
    23         element是查找一个标签
    24         elements是查找所有标签
    25     '''
    26     # 自动登录百度 start
    27     # 1、find_element_by_link_text # 通过链接文本去找
    28     login_link = driver.find_element_by_link_text('登录')
    29     login_link.click()  # 点击登录
    30 
    31     time.sleep(1)
    32 
    33     # 2、find_element_by_id # 通过id去找
    34     user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
    35     user_login.click()
    36 
    37     time.sleep(1)
    38 
    39     # 3、find_element_by_class_name
    40     user = driver.find_element_by_class_name('pass-text-input-userName')
    41     user.send_keys('*****')
    42 
    43     # 4、find_element_by_name
    44     pwd = driver.find_element_by_name('password')
    45     pwd.send_keys('*****')
    46 
    47     submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
    48     submit.click()
    49     # end
    50 
    51     # 5、find_element_by_partial_link_text
    52     # 局部链接文本查找
    53     login_link = driver.find_element_by_partial_link_text('')
    54     login_link.click()
    55 
    56     # 6、find_element_by_css_selector
    57     # 根据属性选择器查找元素
    58     # .: class
    59     # #: id
    60     login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin')
    61     login2_link.click()
    62 
    63     # 7、find_element_by_tag_name
    64     div = driver.find_elements_by_tag_name('div')
    65     print(div)
    66 
    67 
    68     time.sleep(20)
    69 
    70 finally:
    71     # 关闭浏览器释放操作系统资源
    72     driver.close()
    
    
    


  • 相关阅读:
    (转) 理解Angular中的$apply()以及$digest()
    Gulp 有用的地址
    AngularJS中Directive指令系列
    让博客园博客中的图片支持fancybox浏览
    Drupal7 实现like(点赞)功能
    Drupal7 针对特定条件才显示区块
    Windows server 2008 tomcat间歇性掉线关闭
    关于tomcat8在windows2008下高并发下有关问题的解决方案
    combotree 的简单使用2
    @responseBody 返回更多数据
  • 原文地址:https://www.cnblogs.com/DLYQY/p/11122497.html
Copyright © 2011-2022 走看看