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请求库爬取豆瓣电影信息
    - 请求url
        https://movie.douban.com/top250

    - 请求方式
        GET

    - 请求头
        user-agent
        cookies

一、爬取豆瓣电影

豆瓣电影信息:
电影排名、电影名称、电影url、电影导演、电影主演
电影年份、电影类型、电影评分、电影评论、电影简介
1.分析所有主页的url
第一页:
https://movie.douban.com/top250?start=0&filter=
第二页:
https://movie.douban.com/top250?start=25&filter=
第三页:
https://movie.douban.com/top250?start=50&filter=
。。。。
import requests
import re
爬虫三部曲
1.发送请求
def get_page(url):
    response=requests.get(url)
    #print(response.text)
    return response
2.解析数据
电影排名、电影url、电影名称、电影导演、电影主演、电影年份、电影类型、电影评分、电影评论、电影简介
<div class="item">.*?<em class="">(.*?)
</em>.*?<a href="(.*?)">.*?
<span class="title">(.*?)
</span>.*?导演: (.*?)主演:(.*?)<br>(.*?)
</p>.*?<span class="rating_num" property="v:average">
(.*?)</span>.*?<span>(.*?)人评价
</span>.*?<span class="inq">(.*?)</span>
def parse_index(html):
    movie_list=re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演:(.*?)<br>(.*?)</p>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>',html,re.S)
    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}
            电影名称:{m_url}
            电影url:{name}
            电影导演:{daoyan}
            电影主演:{actor}
            年份类型:{year_type}
            电影评分:{point}
            电影评论:{commit}
            电影简介:{desc}
    ========= 十分感谢观赏 ===========
    \n
    \n
         '''
    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:
            #3.保存数据
            save_data(movie)

输出样式:(仅供参考)

========= 欢迎观看电影 ===========
电影排名:1
电影名称:https://movie.douban.com/subject/1292052/
电影url:肖申克的救赎
电影导演:弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;
电影主演: 蒂姆·罗宾斯 Tim Robbins /...
年份类型: 1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情

电影评分:9.6
电影评论:1469489
电影简介:希望让人自由。
========= 十分感谢观赏 ===========

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

    2、为什么要使用selenium?
        优点:
            - 执行js代码
            - 不需要分析复杂的通信流程
            - 对浏览器做弹窗、下拉等操作
            - ***** 获取动态数据
            - *** 破解登录验证

        缺点:
            - 执行效率低

    3、安装与使用
        1. 安装selenium请求库:
            pip3 install selenium

        2. 必须安装浏览器
            "谷歌"或者火狐

        3.安装浏览器驱动
            http://npm.taobao.org/mirrors/chromedriver/2.38/
            windows:
                下载win32驱动

二、selenium的基本使用

from selenium import webdriver #web驱动
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#和下面WebDriveWait一起用的
from selenium.webdriver.support.wait import WebDriverWait#等待页面加载某些元素
import time
import time
通过驱动打开浏览器
driver =webdriver.Chrome()
try:
    driver.get('http://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()
三、selenium选择器
from selenium import webdriver  # web驱动
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
import time

import time


river =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('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()
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()

猜你喜欢

转载自www.cnblogs.com/sde12138/p/11123376.html