day02

昨日回顧:
一 爬蟲基本原理
- 爬蟲全過程
1.發送請求
2.接收響應數據
3.解析並提取有價值的數據
4.保存數據css

二 Requests請求庫
- get
url
headers
cookieshtml

- post
url
headers
cookies
data
三 爬取校花網視頻
1.經過主頁解析提取詳情頁
2.經過詳情頁提取視頻url
3.獲取視頻的二進制流寫入本地python

四 自動登陸github
1.分析請求頭與請求體信息
- 用戶名
- 密碼
- token
- 雜七雜八git

2.token
- 經過對login頁面的解析提取github

3.對session_url發送請求
- headers:
- user-agentweb

- cookies:
- login頁面的cookieschrome

- data:
- form_datanpm


今日內容:windows

一 requests請求庫爬取豆瓣電影信息
- 請求url
https://movie.douban.com/top250瀏覽器

- 請求方式
GET

- 請求頭
user-agent
cookies

二 selenium請求庫
一、什麼是selenium?
期初是一個自動化測試工具,原理是驅動
瀏覽器執行一些必定好的操做。爬蟲本質
上就是模擬瀏覽器,因此可使用它來作爬蟲。

二、爲何要使用selenium?
優勢:
- 執行js代碼
- 不須要分析複雜的通訊流程
- 對瀏覽器作彈窗、下拉等操做
- ***** 獲取動態數據
- *** 破解登陸驗證

缺點:
- 執行效率低

三、安裝與使用
1. 安裝selenium請求庫:
pip3 install selenium

2. 必須安裝瀏覽器
"谷歌"或者火狐

3.安裝瀏覽器驅動
http://npm.taobao.org/mirrors/chromedriver/2.38/
windows:
下載win32驅動

'''
項目一:爬取豆瓣電影信息:
電影排名、電影名稱、電影url、電影導演
電影主演、電影年份、電影類型
電影評分、電影評論、電影簡介

一、分析全部主頁的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
# 爬蟲三部曲
# 一、發送請求
def get_page(url):
    response = requests.get(url)
    # print(response.text)
    return response


# 二、解析數據
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>.*?導演: (.*?)主演: (.*?)<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

# 三、保存數據
def save_data(movie):
    # 電影排名、電影url、電影名稱、電影導演、電影主演
    # 電影年份 / 電影類型、電影評分、電影評論、電影簡介
    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)

        for movie in movie_list:
            # print(movie)

            # 3.保存數據
            save_data(movie)

 

項目二:02selenium基本使用

 

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
    # 一、find_element_by_link_text # 經過連接文本去找
    login_link = driver.find_element_by_link_text('登陸')
    login_link.click()  # 點擊登陸

    time.sleep(1)

    # 二、find_element_by_id # 經過id去找
    user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
    user_login.click()

    time.sleep(1)

    # 三、find_element_by_class_name
    user = driver.find_element_by_class_name('pass-text-input-userName')
    user.send_keys('*****')

    # 四、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

    # 五、find_element_by_partial_link_text
    # 局部連接文本查找
    login_link = driver.find_element_by_partial_link_text('')
    login_link.click()

    # 六、find_element_by_css_selector
    # 根據屬性選擇器查找元素
    # .: class
    # #: id
    login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin')
    login2_link.click()

    # 七、find_element_by_tag_name
    div = driver.find_elements_by_tag_name('div')
    print(div)


    time.sleep(20)

finally:
    # 關閉瀏覽器釋放操做系統資源
    driver.close()
相關文章
相關標籤/搜索