網路爬蟲
作者資料
初探網路爬蟲
聽說上學期你們有碰過
先簡介一下什麼是網路爬蟲
試想看看有想大量下載圖片
但你又很懶
那該怎麼辦呢?
去睡覺吧!
夢裡甚麼都有
呸呸呸!!
簡單來說就是讓你當慣老闆
使用網路爬蟲來替你工作
可以做些甚麼呢?
幫你下載美女的照片、爬文、搶Black pink的票等等
基本上就是讓爬蟲偽裝成瀏覽器去爬取你要的資料
或下達指令給爬蟲執行
爬蟲之前必須知道的事
- 會需要先認識網站架構,Ex. HTML
- 要當個有道德的爬蟲(!?
Selenium
前置作業
名琮的修復環境筆記
For Linux
- 安裝python 環境
sudo apt install python3.9
apt install pipenv
sudo apt-get install python3-pip
這裡順便提一下pipenv
請使用下列程式碼嘗試安裝 selenium
pip3 install pipenv
pipenv install selenium
pip install selenium
可以先確認是否安裝成功
下載Chrome Driver
Chrome -> Setting -> About Chrome -> Chrome Version
記得對照版本下載
解壓縮到桌面
語法教學
環境設定
from selenium import webdriver
from selenium.webdriver.support.ui import Select,WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import io
import time
起手式
PATH = " " //Chrome Driver的位置
driver = webdriver.Chrome //所需使用的瀏覽器
driver.get(" ") //Chrome Driver要開啟的網頁
Mac的部分可以把Chrome Driver加入到bin的環境變數中
/usr/local/bin
Example
Path = "/usr/local/bin/chromedriver.exe"#chromedriver path
driver = webdriver.Chrome()#open browser
driver.get("https://www.dcard.tw/f")
==>開啟Dcard首頁
必備知識
標籤種類
常用的會像是name,class,id...
普通操作
print(driver.title) //網頁名稱
search = driver.find_element(HTML標籤, "標籤名稱" )
search.clear() //清除預設文字
search.send_keys("搜尋名稱")
time.sleep(秒數) //使爬蟲停等時間
search.send_keys(Keys.RETURN) //按下Enter
Example
print(driver.title)
search = driver.find_element(By.NAME, "query" )
search.clear()
search.send_keys("比特幣")
time.sleep(3)
search.send_keys(Keys.RETURN)
==>出現有關比特幣的搜尋結果
取得文章標題
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "atm_26_loj7t9"))
) //等到讀到指定標籤,在執行下面的程式
titles = driver.find_elements(By.CLASS_NAME, "atm_cs_1urozh")
for title in titles :
print(title.text) //迴圈
來做個好玩東西!
警告,及免責聲明
以下遊戲內容可能引起部分人們不適
若您對於性別議題 或 性 相關議題有較為強烈的主張,
請在此打住。
此遊戲內容涵意
為一款政治及社會諷刺遊戲
請勿認真對待
來玩個網頁小遊戲
若有雷同存屬巧合
先建構環境跟要開的網頁
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select,WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import io
PATH = "/usr/local/bin/chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://tsj.tw/")
點擊按鈕位置
次數
blow = driver.find_element(By.ID,'click')
blow_count = driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[2]/h4[2]')
tags: 記得最外層要把"蓋成'
等等? XPath?
簡單來說就是物件在HTML中的絕對位置
若要找的東西標籤重複,就可以用來指定位置~
讀取商品按鈕
items = []
items.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[4]/td[5]/button[1]'))
items.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[3]/td[5]/button[1]'))
items.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[2]/td[5]/button[1]'))
讀取商品價格
prices = []
prices.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[4]/td[4]'))
prices.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[3]/td[4]'))
prices.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[2]/td[4]'))
前置點擊器
actions = ActionChains(driver)#操作滑鼠
for n in range(10):
actions.click(blow)
自動購買道具
for i in range(10000):
actions.perform() #動作執行
count = int(blow_count.text.replace("您目前擁有", "").replace("技術點", "")) #替換掉字串為空字串只留數字
for j in range(3): #跑三次去比價
price = int(prices[j].text.replace("技術點", ""))
if count >= price: #購買
upgrade_actions = ActionChains(driver)
upgrade_actions.move_to_element(items[j])
upgrade_actions.click()
upgrade_actions.perform() #動作執行
break
全部程式碼
提醒
本程式碼可能無法在部分電腦環境上面正常執行
# Action Chains 自動玩網頁小遊戲
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select,WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import io
PATH = "/usr/local/bin/chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://tsj.tw/%22)
blow = driver.find_element(By.ID,'click')
blow_count = driver.find_element(By.XPATH, '//[@id="app"]/div[2]/div[4]/div[2]/h4[2]')
items = []
items.append(driver.find_element(By.XPATH, '//[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[4]/td[5]/button[1]'))
items.append(driver.find_element(By.XPATH, '//[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[3]/td[5]/button[1]'))
items.append(driver.find_element(By.XPATH, '//[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[2]/td[5]/button[1]'))
prices = []
prices.append(driver.find_element(By.XPATH, '//[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[4]/td[4]'))
prices.append(driver.find_element(By.XPATH, '//[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[3]/td[4]'))
prices.append(driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[4]/div[4]/table/tbody/tr[2]/td[4]'))
actions = ActionChains(driver)
for n in range(10):
# actions.perform()
actions.click(blow)
for i in range(10000):
actions.click(blow)
actions.perform()
count = int(blow_count.text.replace("您目前擁有", "").replace("技術點", ""))
for j in range(3):
price = int(prices[j].text.replace("技術點", ""))
if count >= price:
upgrade_actions = ActionChains(driver)
upgrade_actions.move_to_element(items[j])
upgrade_actions.click()
upgrade_actions.perform()
break