Day 02

昨日回顧:
一 爬蟲基本原理
- 爬蟲全過程
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
- cookiels:
- login頁面的cookies
- data:
- from_data
今日內容:
一 request 請求庫爬取豆瓣電影信息
- 請求url
https://movie.douban.com/top250
- 請求方式
GET
- 請求頭
user-agent
cookies
二 selenium請求庫
一、什麼事selenium?
最初是一個自動化測試工具,原理是驅動瀏覽器執行一些必定好的操做。
爬蟲本質上就是模擬瀏覽器,因此能夠使用它來作爬蟲。
二、爲何要使用selenium?
優勢:
- 執行js代碼
- 不須要分析複雜的通訊流程
- 對瀏覽器作彈窗、下拉等操做
- 獲取動態數據 *****
- 破解登陸驗證 ***
缺點:
- 執行效率低
三、安裝與使用
1.安裝selen請求庫
pip3 install selenium
2.必須安裝瀏覽器
谷歌或者火狐
3.安裝瀏覽器驅動
http://npm.taobao.org/mirrors/chromedriver/2.38/

測試用例
01❤爬取豆瓣電影TOP250
 1 '''
 2 爬取豆瓣電影信息:  3  電影排名、電影名稱、電影url、電影導演  4  電影主演、電影年份/電影類型  5  電影評分、電影評論、電影簡介  6 一、分析全部主頁的url  7  第一頁:https://movie.douban.com/top250?start=0&filter=  8  第二頁:https://movie.douban.com/top250?start=25&filter=  9  第三頁:https://movie.douban.com/top250?start=50&filter= 10 '''
11 import requests 12 import re 13 # 爬蟲三部曲
14 # 1.發送請求
15 def get_page(url): 16     response = requests.get(url) 17     return response 18 # 2.解析數據
19 '''
20 <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> 21 '''
22 def parse_index(html): 23     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) 24     return movie_list 25 # 3.保存數據
26 def save_data(movie): 27     top, m_url, name, director, actor, year_type, point, commit, desc = movie 28     year_type = year_type.strip('\n') 29     year_type = year_type.replace(' ', '') 30     data = f'''' 31  ❀=========================== 影片信息 ============================❀ 32  電影排名:{top} 33  電影url:{m_url} 34  電影名稱:{name} 35  電影導演:{director} 36  電影主演:{actor} 37  年份類型:{year_type} 38  電影評分:{point} 39  電影評論:{commit} 40  電影簡介:{desc} 41  ❀======================= 影片信息加載完畢 ========================❀ 42         '''
43     print(data) 44 
45     with open('douban_top250.txt','a',encoding='utf-8') as f: 46  f.write(data) 47 
48 if __name__ == '__main__': 49     # 拼接全部主頁
50     num = 0 51     for line in range(10): 52         url = f'https://movie.douban.com/top250?start={num}&filter='
53         num += 25
54         print(url) 55 
56         # 1.往每一個主頁發送請求
57         index_res = get_page(url) 58 
59         # 2.解析主頁獲取電影信息
60         movie_list = parse_index(index_res.text) 61 
62         for movie in movie_list: 63             # 3.保存數據
64             save_data(movie)

 

02❤selenium基本使用
 1 from selenium import webdriver #web驅動
 2 from selenium.webdriver.common.by import By  # 按照什麼方式查找,By.ID,By.CSS_SELECTOR
 3 from selenium.webdriver.common.keys import Keys  # 鍵盤按鍵操做
 4 from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一塊兒用的
 5 from selenium.webdriver.support.wait import WebDriverWait  # 等待頁面加載某些元素
 6 import time  7 
 8 # 方式一:經過驅動打開瀏覽器
 9 driver = webdriver.Chrome(r'E:\Python驅動瀏覽器\chromedriver.exe') 10 # 方式二:把webdriver.exe驅動到 python 解釋器安裝目錄/Scripts文件夾中
11 # python解釋器安裝目錄/Scripts配置環境變量
12 # python解釋器安裝目錄 配置環境變量
13 # driver = webdriver.Chrome()
14 try: 15     # 往官網發送get請求
16     driver.get('https://www.jd.com/') 17     # 獲取等待對象,可等待某個元素10秒
18     wait = WebDriverWait(driver, 10) 19 
20     # 查找元素id爲key
21     input_tag = wait.until(EC.presence_of_element_located((By.ID, 'key'))) 22 
23     # 在輸入框內輸入商品名稱
24     input_tag.send_keys('劍網3') 25     # 按下鍵盤迴車鍵
26  input_tag.send_keys(Keys.ENTER) 27     time.sleep(5) 28 finally: 29     # 關閉瀏覽器釋放操做系統資源
30     driver.close()
 
03❤selenium選擇器
 1 ''''''
 2 from selenium import webdriver  # web驅動
 3 from selenium.webdriver.common.keys import Keys  # 鍵盤按鍵操做
 4 import time  5 
 6 import time  7 
 8 driver = webdriver.Chrome(r'E:\Python驅動瀏覽器\chromedriver.exe')  9 
10 try: 11 
12     # 隱式等待: 須要在get以前調用
13     # 等待任意元素加載10秒
14     driver.implicitly_wait(10) 15 
16     driver.get('https://www.baidu.com/') 17 
18     # 顯式等待: 須要在get以後調用
19     time.sleep(5) 20 
21     '''
22  ===============全部方法=================== 23  element是查找一個標籤 24  elements是查找全部標籤 25     '''
26     # 自動登陸百度 start
27     # 一、find_element_by_link_text # 經過連接文本去找
28     login_link = driver.find_element_by_link_text('登陸') 29     login_link.click()  # 點擊登陸
30 
31     time.sleep(1) 32 
33     # 二、find_element_by_id # 經過id去找
34     user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn') 35  user_login.click() 36 
37     time.sleep(1) 38 
39     # 三、find_element_by_class_name
40     user = driver.find_element_by_class_name('pass-text-input-userName') 41     user.send_keys('*****') 42 
43     # 四、find_element_by_name
44     pwd = driver.find_element_by_name('password') 45     pwd.send_keys('*****') 46 
47     submit = driver.find_element_by_id('TANGRAM__PSP_10__submit') 48  submit.click() 49     # end
50 
51     # 五、find_element_by_partial_link_text
52     # 局部連接文本查找
53     login_link = driver.find_element_by_partial_link_text('') 54  login_link.click() 55 
56     # 六、find_element_by_css_selector
57     # 根據屬性選擇器查找元素
58     # .: class
59     # #: id
60     login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin') 61  login2_link.click() 62 
63     # 七、find_element_by_tag_name
64     div = driver.find_elements_by_tag_name('div') 65     print(div) 66 
67 
68     time.sleep(20) 69 
70 finally: 71     # 關閉瀏覽器釋放操做系統資源
72     driver.close()
相關文章
相關標籤/搜索