Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
261 views
in Technique[技术] by (71.8m points)

自學python小白提問:突然出現 SyntaxError: invalid syntax ,但之前運行成功一直都沒報錯

是這樣的,剛剛接觸程式語言不久,是個完全的萌新
因為好奇下,就寫了一個可以自動爬取FB的PYTHON

運作是這樣的:
使用selenium的webdriver,登陸自己的FB帳號,再跳轉到目標FB專頁,然後向下跳轉,自動爬取FB專頁貼文的東西,再儲存到一個EXCEL檔案之中

問題:
在儲存檔案時,(約130行),出現SyntaxError: invalid syntax。

個人的看法是:(130行)的指令應是與(第46行)配對的, 不應該出現「不正確的語法」

以下是程式碼,請各位大大指教萌新,感謝各位!!

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options 
    from bs4 import BeautifulSoup
    import time
    from openpyxl import Workbook
    
    #今日日期變成文字形式的DDMMYYYY
    import datetime
    today = datetime.datetime.now()
    todays = today.strftime("%Y" + "%m" + "%d")
    m = today.strftime("%m")
    d = today.strftime("%d")
    hour = today.strftime("%H"+ ":" +"%M")
    
    #程式開始時間
    start = datetime.datetime.now()
    
    #阻攔錯誤
    chrome_options = Options()
    chrome_options.add_argument("--disable-popup-blocking")
    chrome_options.add_argument('--disable-infobars')
    chrome_options.add_argument('--disable-gpu')
    prefs = {
        'profile.default_content_setting_values':
            {
                'notifications': 2
            }
    }
    chrome_options.add_experimental_option('prefs', prefs)
    
    #登入
    driver = webdriver.Chrome(chrome_options=chrome_options)
    driver.get('https://facebook.com/')
    time.sleep(3)
    driver.find_element_by_id("email").send_keys("EMAIL") #將USERNAME改為你的臉書登入帳號
    driver.find_element_by_id("pass").send_keys("PASSWORD") #將PASSWORD改為你的臉書密碼
    driver.find_element_by_id("u_0_b").click()
    
    #創建一個空白活頁簿物件
    wb = Workbook()
    #======================
    #WEBSITE
    url = [
        " #隨便一個/一堆FB專頁的網址 "
      ] 
    for urls in url:
        time.sleep(5)
        driver.get(urls)
        for i in range(2): # 捲動20次
            time.sleep(5) # 等待5秒鐘讓頁面讀取
            driver.execute_script("window.scrollTo(0, {})".format(3000 * (i + 1))) #每次捲動6000的單位(原設定為3000)
        try:
            soup = BeautifulSoup(driver.page_source,"lxml")
            data = soup.find_all("div",class_="du4w35lb k4urcfbm l9j0dhe7 sjgh65i0")
            name = soup.find("span",class_="d2edcug0 hpfvmrgz qv66sw1b c1et5uql rrkovp55 a8c37x1j keod5gw0 nxhoafnm aigsh9s9 embtmqzv fe6kdd0r mau55g9w c8b282yb hrzyx87i m6dqt4wy h7mekvxk hnhda86s oo9gr5id hzawbc8m").text
        except Exception:
            pass
        finally:
            # 建立工作表
            ws = wb.create_sheet(name)
            # 選取正在工作中的表單
            # ws = wb.active
            # 向下新增一列並連續插入值
            ws.append([name]) 
            ws.append(["發出日期",today,"最後更新",hour]) 
            ws.append(["發出時間","內容","like數","留言數","分享數"])
            # 調整ABCD行欄寬
            ws.column_dimensions['A'].width = 15.0
            ws.column_dimensions['B'].width = 30.0
            ws.column_dimensions['C'].width = 15.0
            ws.column_dimensions['D'].width = 15.0
            ws.column_dimensions['E'].width = 15.0
            time.sleep(3)
        for datas in data:
            try:
                date = datas.find("b", class_="b6zbclly myohyog2 l9j0dhe7 aenfhxwr l94mrbxd ihxqhq3m nc684nl6 t5a262vz sdhka5h4").text.replace("=","")
                sub = datas.find("div",class_="ecm0bbzt hv4rvrfc ihqw7lf3 dati1w0a").text
                like = datas.find("span", class_="pcp91wgn").text
                comsha = datas.find("div", class_="bp9cbjyn j83agx80 pfnyh3mw p1ueia1e").text
                comsha2 = comsha.split("個回應")
                comment = comsha2[0]
                share = comsha2[1].replace("次分享","")
            except Exception:
                pass
            finally:
                ws.append([date,sub,like,comment,share])
                #print()
                #print(date)
                #print(sub)
                #print("Like數:"+like)
                #print("留言數:"+comment)
                #print("分享數:"+share)
                #print()
                print(name+"FACEBOOK 爬取資料完成"
                
    #儲存成 *.xlsx 檔案
    myfilename = todays+" facebook.xlsx"            ###############報錯的位置###############
    wb.save("d:/Python/5/"+todays+" facebook.xlsx") 
    wb.save("z:/database/"+todays+" facebook.xlsx")
    
    #報時
    print (">>>> ALL DONE!! <<<<")
    print ("開始時間:")
    print (start)
    print ("完成時間:")
    print (datetime.datetime.now())
    driver.close() 

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

报错的上一行print(name+"FACEBOOK 爬取资料完成" 缺了右边的括号


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...