day02 requests请求库爬取豆瓣电影信息+selenium请求库

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

  — 请求url

    http://movie.douban.com/top250

  — 请求方式

    GET

  — 请求头

    user-agent

      cookies

老样子,通过谷歌浏览器在top250页面检查,找到我们要的信息。

通过三步,完成整个过程:

附上完整代码:

"""
爬取豆瓣电影信息:
"""

"""
第一页url:
https://movie.douban.com/top250?start=0&filter=
第二页url:
https://movie.douban.com/top250?start=25&filter=
"""
import requests
import re

# 1 发送请求
def get_page(url):
    response = requests.get(url)
    return response

# 2 解析数据
def parse_index(html):
    '''
    电影排名,电影url,电影名称,电影导演,电影主演,
    电影年份/类型,电影评分,电影评论,电影简介
    <div class="item">.*?<em class="">(.*?).*?<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):
    top, m_url, name, daoyan, actor, year_type, point,commit, desc = movie
    year_type = year_type.strip('\n')
    data = f'''
            ========== 欢迎尊敬的官人欣赏 ==========
            电影排名;{top}
            电影url:{m_url}
            电影名称:{name}
            电影导演:{daoyan}
            电影主演;{actor}
            电影类型:{year_type}
            电影评分:{point}
            电影评论:{commit}
            电影简介:{desc}
            ========== 记得下次再来么么哒 ==========
            \n
            \n
            '''
    print(data)

    with open('douban_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)
        print(movie_list)

        # 3 保存数据
        for movie in movie_list:
            save_data(movie)

 二、 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  # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素
import time

import time

# 方式一: 通过驱动打开浏览器
# driver = webdriver.Chrome(r'驱动的绝对路径/webdriver.exe')

# 方式二: 把webdriver.exe驱动放到 python解释器安装目录/Scripts文件夹中
# python解释器安装目录/Scripts配置环境变量
# python解释器安装目录 配置环境变量
driver = webdriver.Chrome()

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()

selenium选择器:

自动登录百度:

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

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

猜你喜欢

转载自www.cnblogs.com/yjg6/p/11118715.html