代码改变世界

day02:requests爬取豆瓣电影信息

2019-07-03 08:14  风度翩  阅读(326)  评论(0编辑  收藏  举报
一、requests爬取豆瓣电影信息
-请求url:
https://movie.douban.com/top250
-请求方式:
get
-请求头:
user-agent
cookies
二、selenium请求库
1、什么是selenium?
起初是一个自动化测试工具,原理是驱动浏览器执行一些一定好操作的操作。
爬虫本质是上就是模拟浏览器,所以可以使用它来做爬虫。
2、为什么要用selenium?
优点:
-执行js代码
-不需要分析复杂的通信流程
-可以对浏览器做弹窗,下拉等动作
-***** 可以获取动态数据
-*** 破解登录验证
缺点:
-执行效率低

3、安装与使用
1、安装selenium请求库:
pip3 install selenium
2、必须安装浏览器
谷歌或者火狐
3、安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
windows:
下载win32驱动
'''
爬取豆瓣TOP205电影信息:
    电影名称    电影url    电影导演
    电影主演    电影年份    电影类型
    电影评分    电影评论    电影简介

1、分析所有主页的url:
第一页:
https://movie.douban.com/top250
第二页:
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):
    respones = requests.get(url)
    # print(respones.text)
    return respones

# 2. 解析数据

'''
电影排名、、、
 <div class="item">.*?<em class="">(>*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>(.*?)2</p>.*?<span class="rating_num" .*?">(.*?)</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" .*?>(.*?)</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
        '''
    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  # web驱动
from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片
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'E:\phyon\driver\chromedriver.exe')

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


    wait = WebDriverWait(driver, 10)

    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(15)
finally:
    driver.close()