1、環境搭建javascript
工欲善其事,必先利其器。在這裏,咱們採用selenium+webDriver+headless Chrome(固然,這裏使用FireFox、Safari瀏覽器均可以)來實現爬蟲。css
(一)工具html
1.selenium,一個用於Web應用程序測試的工具。其特色是直接運行在瀏覽器中,就像真正的用戶在操做同樣。新版本selenium2集成了 Selenium 1.0 以及 WebDriver。java
2.webDriver做用以下:執行代碼經過給Webdriver發送指令,讓Webdriver知道想要作的操做,Webdriver再根據這些操做在瀏覽器界面上進行控制,例如查找頁面元素、發送文本、實現事件點擊等等。python
3.Headless Chrome 是 Chrome 瀏覽器的無界面形態,能夠在不打開瀏覽器的前提下,使用全部 Chrome 支持的特性運行程序。從而更加方便測試 web 應用,得到網站的截圖,作爬蟲抓取信息等。web
(二)安裝chrome
1.安裝seleniumapi
首先,在安裝好python.exe或者anaconda集成環境的前提下,打開命令對話框cmd,瀏覽器
(1)輸入pip install selenuim進行安裝。網絡
若是老是報如下錯誤:Could not find a version that satisfies the requirement selenuim (from versions: ),No matching distribution found for selenuim選擇方法2
(2)本身下載selenium工具,下載地址:https://pypi.python.org/pypi/selenium。下載完成後,把安裝包拷貝到 pip3 同目錄下,使用管理員權限執行 cmd,
切換到 pip3 目錄(%python%\Scripts),執行命令行:pip3 install selenium-3.4.3-py2.py3-none-any.whl
若是使用pip3提示須要升級,則在對話框中進入到python.exe所在位置,輸入 python -m pip install --upgrade pip
安裝成功顯示以下:
2.安裝webDriver
注意保持兩個版本對應:1.瀏覽器類型與webDriver對應,ChromeBrowser-ChromeDriver;2.瀏覽器版本與webDriver版本對應。
在url輸入框鍵入:chrome://version可查看瀏覽器版本(chrome68要求driver2.42),相應版本的webDriver下載地址以下:https://chromedriver.storage.googleapis.com/index.html
下載完webDriver以後解壓放到chrome.exe的安裝目錄下,並添加系統變量,便可使用。
3.Headless Chrome
設置瀏覽器的無界面狀態可提升爬蟲速度,在代碼文件中進行設置便可。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
2、編寫代碼
from selenium import webdriver
import csv
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
url = 'http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0'
#準備好存儲歌單的csv文件
csv_file = open("playlist.csv",'w',newline='')
writer = csv.writer(csv_file)
writer.writerow(['標題','播放數','連接'])
#解析每一頁,直到‘下一頁’爲空
while url != 'javascript:void(0)':
#用webDriver加載頁面
driver.get(url)
#切換到內容的iframe
driver.switch_to.frame("contentFrame")
#定位歌單標籤
data = driver.find_element_by_id("m-pl-container").\
find_elements_by_tag_name("li")
#解析一頁中的全部歌單
for i in range(len(data)):
#獲取播放數
nb = data[i].find_element_by_class_name("nb").text
if '萬' in nb and int(nb.split("萬")[0]) > 500 :
msk = data[i].find_element_by_css_selector("a.msk")
writer.writerow([msk.get_attribute('title'),nb,msk.get_attribute('href')])
url = driver.find_element_by_css_selector("a.zbtn.znxt").\
get_attribute("href")
csv_file.close()
3、運行結果
4、補充
在安裝工具或者運行項目時常常遇到python版本不匹配的問題,這時咱們能夠進行版本切換,參考
關於在anaconda中切換不一樣的python版本
https://blog.csdn.net/my_kingdom/article/details/68957736
本文章參考了【爬蟲】手把手教你寫網絡爬蟲(1)