1. Html網頁結構介紹-網頁到底如何傳送資料?爬蟲必學
2. 資料傳遞:Get與Post差異,網路封包傳送的差異
3. Html爬蟲Get教學-抓下Yahoo股票資訊,程式交易的第一步
4. Html爬蟲Get實戰-全台最大美食平台FoodPanda爬蟲,把熊貓抓回家
5. 資料分析實戰,熊貓FoodPanda熱門美食系列|看出地區最火料理種類
6. Json爬蟲教學-Google趨勢搜尋|掌握最火關鍵字
7. Json爬蟲實戰-24小時電商PChome爬蟲|雖然我不是個數學家但這聽起來很不錯吧
8. Html爬蟲Post教學-台灣股市資訊|網韭菜們的救星
9. Html爬蟲Post實戰-全球美食平台UberEat爬蟲
10. Pandas爬蟲教學-Yahoo股市爬蟲|不想再盯盤
11. Pandas爬蟲實戰-爬下全台各地區氣象預報歷史資料
12. 資料分析實戰-天氣預報圖像化|一張圖巧妙躲過雨季
å·²ç¶è¦å好æ¨çIGåçäºåï¼éæ²å°±è¶å¿«çãIGåçè¦åã
å¿ é è¼¸å ¥æ¨ç帳èå¯ç¢¼ï¼ä»¥æ¹ä¾¿èªåç»å ¥ãtagsåæ¯è¼¸å ¥æ³è¦å°åªåtagæè®ï¼å æ¤éäºtagé常è¦èåçææç¸éã
IGID = 'æ¨çIG帳è'
IGpassword = 'æ¨çIGå¯ç¢¼'
è¨å®è«æ±æéçè³è¨ï¼å æ¤å¯ä»¥å¨21è¡ï¼ä¿®æ¹æèªå·±çUser-Agentï¼ä½è¥ç¨å¼å¯ä»¥å·è¡ï¼åå°±ä¸éè¦ç¹å¥ä¿®æ¹ï¼å æ¤å¯ä»¥å å·è¡éå»ï¼è¥æåºç¾bugï¼ååä¾æª¢æ¥å³å¯ã
User-Agentæ¯å°å å¨å³éæï¼å¿ è¦çè³è¨ï¼å æ¤è£¡é¢å¯ä»¥çå°è©²ä½¿ç¨è çç覽å¨ãä½æ¥ç³»çµ±çè³è¨ãå¨ç¬è²çæåï¼æäºç¶²ç«æ檢æ¥User-Agentæ¯å¦æ£ç¢ºï¼ä½å¨IGä¸ä¸ç¨ã
# è¨å®åºæ¬åæ¸
desired_capabilities = DesiredCapabilities.PHANTOMJS.copy()
#æ¤èå¿
é ææèªå·±é»è
¦çUser-Agent
desired_capabilities['phantomjs.page.customHeaders.User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
# PhantomJS driver è·¯å¾ ä¼¼ä¹åªè½çµå°è·¯å¾
driver = webdriver.PhantomJS(executable_path = 'phantomjs', desired_capabilities=desired_capabilities)
å·è¡ä»¥ä¸ç¨å¼ç¢¼ï¼å°±æå½åºä¸å空ç½çchromeãç¨å¼ç¢¼ä¸æä¸è¡è¨»è§£ï¼è¥ç¨å¼å·²ç¶ç©©å®ï¼ä¸éè¦è·³åºchromeäºï¼å°±å°éä¸è¡ç註解æ¿æå³å¯ã
# éééç¥æé
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs",prefs)
# 以ä¸ä¸å註解æéï¼ç覽å¨å°±ä¸æéå
# chrome_options.add_argument('--headless')
# chrome_options.add_argument('--no-sandbox')
# chrome_options.add_argument('--disable-dev-shm-usage')
# éåç覽å¨
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
driver.getå³å¯æ§å¶chromeå°ä»»ä½æ¨æ³è¦ç網åãéåé段ï¼æäºå¸³èæè¨å®å ©é段é©èï¼çè³æ¯ç¨FBç»å ¥ï¼éå¯è½æé æç»å ¥ç¡æ³èªååï¼å æ¤éå¡ä¹å¯ä»¥ç´æ¥ç¨æåçæ¹å¼è¼¸å ¥ã
####### éå§æä½ è¼¸å
¥å¸³èå¯ç¢¼ç»å
¥ å°IGé¦é #######
driver.get("https://www.instagram.com/")
time.sleep(1)
assert "Instagram" in driver.title
time.sleep(3)
driver.find_element_by_xpath('//*[@name="username"]').send_keys(IGID) #輸å
¥ç»å
¥å¸³è
time.sleep(1)
driver.find_element_by_xpath('//*[@name="password"]').send_keys(IGpassword) # 輸å
¥ç»å
¥å¯ç¢¼
time.sleep(3)
driver.find_element_by_xpath('//*[@type="submit"]').click()
time.sleep(3)
# è¥ç覽å¨æåæ¯å¦å²åï¼é£éå以ä¸å
©è¡è¨»è§£
# driver.find_elements_by_xpath('//*[@type="button"]')[1].click() #æ¯å¦å²åç覽å¨è³æï¼ãç¨å¾å說ã
# time.sleep(3)
é裡å°éå§ä¾ç §æ¨æè¨å®çtagï¼é²å»æ¯å¼µç §çææå¿ãææå¿æ¯å¾ãææ°ãéå§æï¼èä¸æ¯ãæç±éãï¼å çºãæç±éãé常é½æ¯åçãç¶²ç´ ï¼ä»å並ä¸æ追蹤æ¨çåçã
56è¡çè¿´åï¼æ±ºå®æå¨éåtagæå¹¾å¼µç §çæå¿ãé裡é½ä»¥äºæ¸çæ¹å¼æ±ºå®ï¼ç®çå¨æ¼ç¡éç模仿ç人ï¼ä»¥é²è¾è¦ç¶ççåçï¼è¢«å°éã
####### éå§æä½ å°ä¸åçtagå»ç¼æ #######
for tag in tags:
driver.get("https://www.instagram.com/explore/tags/" + tag) #åæå°è©²tag
time.sleep(random.randint(2,5))
driver.find_elements_by_class_name('_9AhH0')[9].click() #é»é¸åç(é¸æææ°ç¼ç)
for i in range(random.randint(20,40)):
if i % 10 == 1:
time.sleep(random.randint(5,20))
# 檢æ¥ææ²ææéè®
if len(driver.find_elements_by_xpath('//*[@aria-label="æ¶åè®"]')) != 0:
print('æéäº')
else:
time.sleep(random.randint(1,3))
try:
driver.find_element_by_xpath('//*[@aria-label="è®"]').click()
except:
try:
driver.find_elements_by_xpath('//*[@aria-label="è®"]')[1].click()
except:
print('åçæ²è·åºä¾ï¼ç´æ¥ä¸ä¸é ')
driver.find_elements_by_class_name('coreSpriteRightPaginationArrow')[0].click()
time.sleep(random.randint(1,5))
print(tag +' æå®äº')
time.sleep(random.randint(7,15)) # æå®ä¸åtagç¨å¾®ä¼æ¯ä¸ä¸ï¼ç¡é模仿ç人
注æï¼ ç¶é實測ï¼IGä¸å¤©ææå¿çæ¸éï¼å¤§ç´æ¯400次ï¼è¥è¶ é該帳èæ被å°éä¸å¤©ä¸è½ææå¿ï¼è¥æå¤æ¬¡é樣çç´éï¼çè³æå°é3天ãä¸ææï¼ä»¥æ¤é¡æ¨ï¼å æ¤è«é©åº¦ç使ç¨selenium就好ï¼éé»éæ¯å¨æ¼åçæä¾çµ¦æ¶è²»è çå¹å¼ã
æ以èªå·±ç帳è實é©ï¼å°å人åä»çå½±çä¸å³ï¼ä¸¦å°ææé¢¨æ ¼ç¶éæ´çãæ¯ä¸å¤©ä½¿ç¨ä¸æ¬¡æ©å¨äººææå¿ï¼ä¸åæ大ç´å¢å 200ç²çµ²ãä½éä¸å ©å禮æï¼å°±æ許å¤äººé追蹤äºï¼å æ¤æ²ææçºçç¶çï¼éè¦æ¼«ç¡ç®ççæå ï¼ææä¹ä¸å¼µã
作者:楊超霆 行銷搬進大程式 創辦人