iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
影片教學

文組生的Python爬蟲之旅系列 第 29

Day 29 Google Play評論爬取

今天的影片內容為爬取Google Play網頁版應用程式的評論
並將前幾天爬取AJAX網頁(Dcard)的程式碼稍微進行改良
還有引入重要的try-except陳述句,即使程式跳出錯誤也能夠繼續執行下去
Check it out!/images/emoticon/emoticon81.gif

以下為影片中有使用到的程式碼

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import bs4, time


page = int(input("請輸入頁面向下捲動次數:"))
dirverPath = 'C:\\spider\\chromedriver.exe'
browser = webdriver.Chrome(executable_path = dirverPath)
url = 'https://play.google.com/store/apps/details?id=com.facebook.katana&showAllReviews=true'
browser.get(url)

number = 0
counter = 0
post_title = []

while page > counter:


    move = browser.find_element_by_tag_name('body')
    move.send_keys(Keys.PAGE_DOWN) 
    time.sleep(0.25)
     
     
    objsoup = bs4.BeautifulSoup(browser.page_source, 'lxml')
    articles = objsoup.find_all('div', jscontroller = 'H6eOGe')


    for article in articles:
        title = article.find('span', class_ = 'X43Kjb') #尋找留言暱稱
        rank = article.find('div', role = 'img') #尋找評價


        if title.text not in post_title:
            number += 1
            post_title.append(title.text)
            print("留言編號:", number)
            print("留言暱稱:", title.text)
            print("評價:", rank.get('aria-label')) #取得aria-label的屬性值
            print("="*100)
            
            
    counter += 1
    
print(post_title)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import bs4, time


def click_text(obj):
#尋找「顯示更多內容」的字串並點擊
    try:
        obj.find_element_by_xpath("//span[contains(text(),'顯示更多內容')]").click()       
    except:
        pass

    
page = int(input("請輸入頁面向下捲動次數:"))
dirverPath = 'C:\\spider\\chromedriver.exe'
browser = webdriver.Chrome(executable_path = dirverPath)
url = 'https://play.google.com/store/apps/details?id=com.facebook.katana&showAllReviews=true'
browser.get(url)

number = 0
counter = 0
post_title = []

while page > counter:

    move = browser.find_element_by_tag_name('body')
    move.send_keys(Keys.PAGE_DOWN)
    click_text(move)    
    time.sleep(0.5)
    
        
    objsoup = bs4.BeautifulSoup(browser.page_source, 'lxml')
    articles = objsoup.find_all('div', jscontroller = 'H6eOGe')


    for article in articles:
        title = article.find('span', class_ = 'X43Kjb') #尋找留言暱稱
        rank = article.find('div', role = 'img') #尋找評價

        
        if title.text not in post_title:
            number += 1
            post_title.append(title.text)
            print("留言編號:", number)
            print("留言暱稱:", title.text)
            print("評價:", rank.get('aria-label')) #取得aria-label的屬性值
            print("="*100)
            
            
    counter += 1
    
print(post_title)
#顯示錯誤
print(5 + "Hello")

print("列印成功!")
#引進try-except陳述句
try:
    print(5 + "Hello") #嘗試執行此程式
except:
    print("語法錯誤!") #若上述程式出現錯誤則執行此程式
    
print("列印成功!")

本篇影片及程式碼僅提供研究使用,請勿大量惡意地爬取資料造成對方網頁的負擔呦!
如果在影片中有說得不太清楚或錯誤的地方,歡迎留言告訴我,謝謝您的指教。


上一篇
Day 28 爛番茄影評網爬取
下一篇
Day 30 工作排程與打包
系列文
文組生的Python爬蟲之旅30

尚未有邦友留言

立即登入留言