python 爬蟲 如何用selenium抓取網頁內容
阿新 • • 發佈:2018-12-14
使用selenium爬取動態網頁資訊
Python selenium自動控制瀏覽器對網頁的資料進行抓取,其中包含按鈕點選、跳轉頁面、搜尋框的輸入、頁面的價值資料儲存、mongodb自動id標識等等等。 首先介紹一下 Python selenium —自動化測試工具,用來控制瀏覽器來對網頁的操作,在爬蟲中與BeautifulSoup結合那就是天衣無縫,除去國外的一些變態的驗證網頁,對於圖片驗證碼我有自己寫的破解圖片驗證碼的原始碼,成功率在85%。 使用conda管家安裝: 在cmd命令列輸入“conda install selenium”進行安裝 還需要安裝谷歌瀏覽器外掛Google Chrome Drive 設定環境變數 在cmd下輸入Chrome就會開啟google
通過selenium訪問百度
from selenium import webdriver
#開啟一個瀏覽器
browser = webdriver.Chrome()
#準備一個網址
url = 'http://www.baidu.com'
browser.get(url)
#獲取元素
login = browser.find_elements_by_class_name('lb')[0]
print(login)
獲取網易雲音樂
from selenium import webdriver #開啟瀏覽器 brower = webdriver.Chrome() url='https://music.163.com/#/discover/toplist' brower.get(url) #尋找logo文字 #logo = brower.find_elements_by_class_name('logo')[0] #print(logo.text) #一般情況下動態載入的內容都可以找到 #有一種情況就沒有 #就是網頁記憶體在網頁框架iframe #需要切換網頁的層級 #語法:brower.switch_to.frame(iframe的id或者你提前獲取這個物件,放入此處) #方法一:id #brower.switch_to.frame('g_iframe') #方法二:name #brower.switch_to.frame('contentFrame') #方法三:提前用變數存iframe iframe = brower.find_element_by_id('g_iframe') brower.switch_to.frame(iframe) #尋找大容器 toplist = brower.find_element_by_id('toplist') #尋找tbody 通過標籤名 tbody = toplist.find_elements_by_tag_name('tbody')[0] #尋找所有tr trs = tbody.find_elements_by_tag_name('tr') dataList = [] for each in trs: #排名 rank = each.find_elements_by_tag_name('td')[0].find_elements_by_class_name('num')[0].text musicName = each.find_elements_by_tag_name('td')[1].find_elements_by_class_name('txt')[0].\ find_element_by_tag_name('b').get_attribute('title') #print(musicName) singer = each.find_elements_by_tag_name('td')[3].find_elements_by_class_name('text')[0].\ get_attribute('title') #print(singer) dataList.append([rank,musicName,singer]) #print(dataList) from openpyxl import Workbook wb = Workbook() ws = wb.active ws.title = '雲音樂飆升榜' ws.append(['排名','歌名','歌手']) for data in dataList: ws.append(data) wb.save("雲音樂飆升榜.xlsx")