-爬蟲全過程css
1.發送請求html
2.接受相應數據java
3.解析並提取有價值的消息python
4.保存數據git
-getgithub
urlweb
headers正則表達式
cookieschrome
-post瀏覽器
url
headers
cookies
data
1.經過主頁解析提取詳情頁
2.經過詳情頁提取視頻url
3.獲取視頻的二進制流寫入本地
1.分析請求體信息
-用戶名
-密碼
-token
-雜七雜八
2.token
經過對login頁面的解析提取
3.對session頁面發送請求
-headers:
-User-Agent
-cookies
-login頁面的cookie
-data
-form data
-url:https://movie.douban.com/top250
-請求方式:get
-請求頭:
user-agent
cookies
電影名稱、電影url、電影導演、電影主演、電影年份、
電影類型、電影評分、電影評價、電影簡介
第一頁:
<https://movie.douban.com/top250?start=0&filter=>
第二頁:
https://movie.douban.com/top250?start=25&filter=
...
能夠看出規律
num = 0 for line in range(10): url = f'https://movie.douban.com/top250?start={num}&filter=' num += 25
def get_page(url): response=requests.get(url) print(response.text) return response
<div class="item"> <div class="pic"> <em class="">1</em> <a href="https://movie.douban.com/subject/1292052/"> <img width="100" alt="肖申克的救贖" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class=""> </a> </div> <div class="info"> <div class="hd"> <a href="https://movie.douban.com/subject/1292052/" class=""> <span class="title">肖申克的救贖</span> <span class="title"> / The Shawshank Redemption</span> <span class="other"> / 月黑高飛(港) / 刺激1995(臺)</span> <span class="playable">[可播放]</span> </div> <div class="bd"> <p class=""> 導演: 弗蘭克·德拉邦特 Frank Darabont 主演: 蒂姆·羅賓斯 Tim Robbins /...<br> 1994 / 美國 / 犯罪 劇情 </p> <div class="star"> <span class="rating5-t"></span> <span class="rating_num" property="v:average">9.6</span> <span property="v:best" content="10.0"></span> <span>1468896人評價</span> </div> <p class="quote"> <span class="inq">但願讓人自由。</span> </p> </div> </div> </div>
<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>
def pare_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
# 三、保存數據 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} 寫入成功...')
selenium最初是一個自動化測試工具,而爬蟲中使用它主要是爲了解決requests沒法執行javaScript代碼的問題。原理是驅動瀏覽器執行一些必定好的操做。爬蟲本質上就是模擬瀏覽器,因此能夠用它來作爬蟲
優勢:
-執行js代碼
-不須要分析複雜的通訊流程
-對瀏覽器作彈窗、下拉操做
-******獲取動態數據
-*****破解登錄驗證
缺點:
-執行效率低
3.1安裝selenium請求庫
pip3 install selenium
3.2必須安裝chrome瀏覽器
3.3安裝瀏覽器驅動
3.4示例:搜索京東商品
from selenium import webdriver 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'C:\Program Files (x86)\chromedriver.exe') # 方式二:把webdriver.exe驅動放到python解釋器安裝目錄/Scripts文件夾中 #python解釋器安裝目錄/Scripts配置環境變量 #python解釋器安裝目錄 配置環境變量 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()
3.5示例二:自動登入百度
'''''' from selenium import webdriver # web驅動 from selenium.webdriver.common.keys import Keys # 鍵盤按鍵操做 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()