day02

我的随笔三

昨日回顾:

     一 爬虫基本原理 - 爬虫全过程 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

    - cookies:
    - login页面的cookies

    - data:
    - form_data

今日内容:

  一、requests请求库爬取豆瓣电影信息

  二、selenium请求库

 

  一、requests请求库爬取豆瓣电影信息

    --请求url

    https://movie.douban.com/top250

    --请求方式

      get

    --请求头

      user-agent

      cookies

爬取豆瓣电影信息

电影排名、电影名称、电影url、电影导演、导演主演、电影年份、电影类型、电影评分、电影简介、电影评论

1、分析电影详情页

第一页

https://movie.douban.com/top250?start=0&filter=

第二页

https://movie.douban.com/top250?start=25&filter=

第三页

https://movie.douban.com/top250?start=50&filter=

代码:

#爬虫三部曲

#1、发送请求
import requests
import  re
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>.*?导演:
    '''
    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
                          )
    print(movie_list)
    return movie_list
#3、保存数据
def save_data(movie):
    top, m_url, name, daoyan, actor, year_type, \
    point, commit, desc = movie
    year_type=year_type.strip('\n')
    data=f'''
                =========欢迎观赏===========
                    电影排名:{top}
                    电影名称:{name}
                    电影url:{m_url}
                    电影导演:{daoyan}
                    导演主演:{actor}
                    电影类型:{year_type}
                    电影评分:{point}
                    电影简介:{commit}
                    电影评论:{desc}
                =========欢迎再来===========   
                \n
                \n
                '''
    print(data)
    with open('daoyan_top250.txt','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)

结果:

day02

二selenium请求库

1、什么是selenium

期初是一个自动化测试工具,原理是驱动浏览器执行一些一定好的操作。爬虫本质上就是模拟浏览器,所以可以使用它来做爬虫。

2、为什么要使用selenium

优点:

--执行js代码

--不需要分析复杂的通信流程

--对浏览器做弹窗、下拉等操作

--*** 获取动态数据

--*** 破解登录验证

缺点:

--执行效率低

3、安装与使用

1、安装selenium请求库

pip3 install selenium

2、必须安装浏览器

“谷歌”或“火狐”

3、安装浏览器驱动

下载win32驱动

百度搜索动画关键字代码:

from selenium import webdriver
# import time
#
# driver=webdriver.Chrome()
# try:
#     time.sleep(10)
#
# finally:
#     driver.close()
from  selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import  time
driver=webdriver.Chrome()
try:
    driver.get('https://www.baidu.com/')
    wait=WebDriverWait(driver,10)
    input_tag = wait.until(EC.presence_of_element_located(
        (By.ID, 'kw')
    ))

    time.sleep(5)
    input_tag.send_keys('动画')
    input_tag.send_keys(Keys.ENTER)
    time.sleep(20)
finally:
    driver.close()

百度自动登录代码:

''''''
from selenium import  webdriver# web驱动
from selenium.webdriver.common.keys import  Keys# 键盘按键操作
import time

driver= webdriver.Chrome()
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('TANG_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
    pw=driver.find_element_by_name('password')
    pw.send_keys('***')

    submit=driver.find_element_by_class_name('pass-button-submit')
    submit.click()
    
    time.sleep(20)
    # end
    finally:
    # 关闭浏览器释放操作系统资源
    driver.close()

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

#通过class类查找
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)

day02

上一篇:豌豆荚


下一篇:python爬虫Day 02