1. 程式人生 > >python 爬蟲 如何用selenium抓取網頁內容

python 爬蟲 如何用selenium抓取網頁內容

使用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")