Web Crawler 爬蟲
第二堂
lecturer:溫室蔡、乘一
課前隨便講講時間
-
因為上次有好多人沒來(但今天可能也沒人就是了QAQ
-
課程內容:爬蟲、DCBot、人工智慧
-
有問題一定要舉手!!!
-
如果沒有學過Python,不用擔心,我們會幫助你~
明顯簡報是抄上次的
課前隨便複習時間
什麼是爬蟲?
-
自動搜尋全球資訊網(www)的機器人
-
可以對網站進行抓取
-
消耗目標網站資源
-
省時省力
-
提高效率
requests
把網頁的html抓取下來!!!
import requests #匯入requests模組
url='https://ckefgisc.github.io/' #這是你想要爬的網址
html=requests.get(url) #get函式返回一個response物件
print(html.text) #.text返回網頁原始碼
btw 這是我們(還沒架好)的社網
解析HTML
怎麼做呢?
import requests #匯入requests模組
from bs4 import BeautifulSoup #注意大小寫!!!
#匯入bs4模組中的BeautifulSoup
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
#要使用需要兩個參數,第一個是原始碼,第二個是解析方式
#把解析後的結果傳進soup
print(soup.prettify())#輸出排版後的HTML
解析HTML
尋找標籤
import requests
from bs4 import BeautifulSoup #注意大小寫!!!
url = 'https://ckefgisc.github.io/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.find('a'))#尋找<a>標籤
print(soup.find_all('a'))#尋找所有的<a>標籤
print(soup.find_all('p', limit=2))#尋找頭兩個<p>標籤
print(soup.find("div", class_="aboutsite_text"))
#尋找<div>標籤中的特定class的內容
動態網頁爬蟲
先下載個酷東西
來看個網頁
打開javascript和關起來會有甚麼差別?
網頁原始碼也會改變嗎?
爬爬看這個網頁...?
import requests
url = 'https://hipala.github.io/js-example/'
r = requests.get(url)
print(r.text)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>消失的文字</title>
</head>
<body>
<div id="word"></div>
<p>其實上面還有段文字<p>
<script type="text/javascript" src="example.js"></script>
</body>
</html>
怎麼讓消失的文字出現呢?
動態網頁爬蟲!
-
和靜態爬蟲差別在於有沒有加載網頁
-
客戶端:將javascript一起爬下來,在客戶端執行
-
伺服器端:使用selenium,模仿使用者操作加載後的網頁
Selenium
-
模擬使用者操作網頁
-
可以進行點擊按鍵、輸入內容等等動作
-
包含IDE、API、WebDriver
Selenium安裝
API
pip install selenium
WebDriver
Selenium安裝
Selenium安裝
Selenium安裝
記得要和你的py檔下載在同一個資料夾
Selenium!!!
基本操作
from selenium import webdriver
driver = webdriver.Chrome()
#如果你的檔案不是存在同一個資料夾:
#driver = webdriver.Chrome('檔案的絕對位址')
driver.get("https://hipala.github.io/js-example/") #前往指定網頁
driver.implicitly_wait(10)#給網頁下載的時間
print(driver.page_source)#顯示網頁原始碼
driver.close() #關閉網頁
Selenium!!!
搜尋標籤
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
#如果你的檔案不是存在同一個資料夾:
#driver = webdriver.Chrome('檔案的絕對位址')
driver.get("https://hipala.github.io/js-example/") #前往指定網頁
driver.implicitly_wait(10)#給網頁下載的時間
'''各種搜尋方法 這是舊方法
driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_xpath()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_css_selector()
'''
'''新的方法
driver.find_element(By.你要搜尋的方法, 搜尋的內容)
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
像是
driver.find_element(By.ID, 'id')
'''
driver.close() #關閉網頁
Selenium!!!
輸入文字
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
#如果你的檔案不是存在同一個資料夾:
#driver = webdriver.Chrome('檔案的絕對位址')
driver.get("https://www.google.com.tw/?hl=zh_TW") #前往指定網頁
driver.implicitly_wait(10)#給網頁下載的時間
element = driver.find_element(By.CLASS_NAME, 'gLFyf')
element.send_keys('selenium')#輸入文字
Selenium!!!
動作指令
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
#如果你的檔案不是存在同一個資料夾:
#driver = webdriver.Chrome('檔案的絕對位址')
driver.get("https://www.google.com.tw/?hl=zh_TW") #前往指定網頁
driver.implicitly_wait(10)#給網頁下載的時間
element = driver.find_element(By.CLASS_NAME, 'gLFyf')
element.send_keys('selenium')
element.send_keys(Keys.ENTER)#按下按鍵
實作時間!!!
恭喜各位上完
第二堂Py小社課!!!
反正我不放還是
會有人亂動我電腦
crawler-2
By times1-chang
crawler-2
- 191