長期兼職線上訪問程式設計助理-Web survey programming assistant|尼爾森行銷研究顧問股份有限公司

學歷: 科系不拘,高中、專科、大學
需加強技能-企業要求 點擊標籤,查看學習內容
PythonExcelPowerPointWord中文打字50~75Ghost軟體程式設計網路程式設計電子試算表軟體操作英文
需加強技能-相關
邏輯能力語言能力教育訓練協助工程程式開發數據分析市場分析資料彙整網頁前端設計
符合度
?

履歷符合度:登入計算

適合度
?

性格適合度:登入計算

Python
Python是一種物件導向、直譯式電腦程式語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的作業系統中執行。 雖然 Python 可能被粗略地分類為「指令碼語言」(script language),但實際上一些大規模軟體開發計劃例如 Zope、Mnet 及 BitTorrent,Google 也廣泛地使用它。 Python 的支援者較喜歡稱它為一種高階動態編程語言,原因是「指令碼語言」泛指僅作簡單編程任務的語言,如 shell script、JavaScript 等只能處理簡單任務的編程語言,並不能與 Python 相提並論。 此外,由於 Python 對於 C 和其他語言的良好支援,很多人還把 Python 作為一種「膠水語言」(glue language)使用。 使用 Python 將其他語言編寫的程式進行整合和封裝。 在 Google 內部的很多專案使用 C++ 編寫性能要求極高的部分,然後用Python呼叫相應的模組。

不知如何開始嗎? 先進行技能挑戰吧~

技能挑戰:初級
目前等級:未達初級
2588 人已通過「初級」測驗,通過率83%,和求職精靈一起探索知識、增強能力!
我要挑戰
Hi~ 分享你的學習心得來幫助後輩或向前輩提問吧!
我要分享
我要提問

動態

全部
影片
文章

Learn Code With Mike品牌創辦人

10/19 21:53

淺談Python類別(Class)

Q:什麼是類別(Class)?
簡單來說,就是物件(Object)的藍圖(blueprint)。就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能,類別(Class)就類似設計圖,會定義未來產生物件(Object)時所擁有的屬性(Attribute)及方法(Method)。而定義類別的語法如下:
class classname:
  statement
首先會有class關鍵字,接著自定類別名稱,最後加上冒號。類別名稱的命名原則習慣上使用Pascal命名法,也就是每個單字字首大寫,不得使用空白或底線分隔單字,如下範例:
class MyCars:
Q:什麼是物件(Object)?
就是透過類別(Class)實際建立的實體,就像實際生產出來的汽車(例如:Mazda)。類別(Class)與物件(Object)的關係就像汽車設計圖與汽車實體。而建立物件(Object)的語法如下:
object_name = classname()
範例:
mazda = Cars()
Q:什麼是屬性(Attribute)?
負責存放物件(Object)的資料。設定物件(Object)的屬性值語法如下:
object_name.attribute_name = value
範例:
mazda = Cars() # 建立Cars類別的物件
mazda.color = "blue" #顏色屬性
建立物件(Object)後,才可進行屬性值(Attribute)的設定。會建議使用建構式(Constructor)來進行屬性值(Attribute)的設定。而存取物件的屬性值則透過以下語法:
object_name.attribute_name
範例:
print(mazda.color) # 執行結果:blue
Q:什麼是建構式(Constructor)?
於建立物件(Object)的同時,會自動執行的方法(Method)。所以通常我們會在建構式(Constructor)中初始化物件(Object)的屬性值(Attribute)。至少要有一個self參數,之後利用逗號區隔其他屬性,語法如下:
def __init__(self, color, seat):
  self.color = color # 顏色屬性
  self.seat = seat # 座位屬性
而這個self是什麼意思呢?它代表了實體物件的參考,也就是目前的物件(Object)。這個self就是告訴類別(Class)目前是在設定哪一個物件的屬性(Attribute)。所以範例中的意思就是此物件的color屬性等於傳入的color屬性值,此物件的seat屬性等於傳入的seat屬性值,而傳入屬性值的方式就是在建立物件的時候,如下範例:
class Cars:
def __init__(self, color, seat):
self.color = color # 顏色屬性
self.seat = seat # 座位屬性
mazda = Cars("blue", 4)
範例中於建立mazda物件(Object)的同時,生成其屬性並且初始化屬性值(color和seat)。
Q:什麼是方法(Method)?
可以想像是物件(Object)的行為。定義方法(Method)和函式(Function)的語法很像,都是def關鍵字開頭,接著自訂名稱,但是方法(Method)和建構式(Constructor)一樣至少要有一個self參數,語法如下:
def method_name(self):
  statement
範例:
class Cars:
def __init__(self, color, seat):
self.color = color # 顏色屬性
self.seat = seat # 座位屬性
# 方法(Method)
def drive(self):
print(f"My car is {self.color} and has {self.seat} seats.")
mazda = Cars("blue", 4)
mazda.drive() #執行結果:My car is blue and has 4 seats.
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/01/python-class.html )網站觀看更多精彩內容。
  • OOP
  • Python
拍手 0 留言 0 觀看 0 收藏 0

Learn Code With Mike品牌創辦人

10/19 21:27

7個降低Python網頁爬蟲被偵測封鎖的實用方法(下)

本文將延續「7個降低Python網頁爬蟲被偵測封鎖的實用方法(上)」,接續分享降低Python網頁爬蟲被偵測封鎖的方法。
Q:如何設定參照位址(Referer)
請求表頭(Request Headers)中另一個重要的欄位就是參照位址(Referer),用來告訴網站這個請求(Request)是來自於哪一個網站,如下範例:
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-TW,zh;q=0.9",
"Host": "example.com",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36",
"Referer": "https://www.google.com/" #參照位址
}
response = requests.get(url="https://example.com", headers=headers)
這時候可以使用像SEMRush( https://www.semrush.com/ )的工具,來顯示目標網頁的反向連結,也就是能夠到達目標網頁的其它連結,就可以在Python網頁爬蟲的每一次請求(Request)前,將不同的反向連結設定到參照位址(Referrer)中,讓每一次的來源網站都不相同,降低被網頁偵測到的風險。
Q:如何設定隨機的延遲時間?
在每一次請求(Request)之間,最好設定隨機的延遲時間(Delay),這樣除了防止每一次的請求(Request)間隔時間不同之外,也沒有固定的請求模式,可以參考以下的範例:
delay_choices = [8, 5, 10, 6, 20, 11]
delay = random.choice(delay_choices)
time.sleep(delay) #延遲
Q:使用無頭瀏覽器(Headless Browser)的方法?
無頭瀏覽器(Headless Browser)和一般瀏覽器不一樣的地方是,它沒有圖形化的使用者介面,通常會使用指令的方式來執行,知名的Selenium套件就可以讓開發人員利用程式碼,自動化控制瀏覽器的執行,模擬人類的操作,降低被偵測到的風險,使用的方式可以參考[Python爬蟲教學]整合Python Selenium及BeautifulSoup實現動態網頁爬蟲文章( https://www.learncodewithmike.com/2020/05/python-selenium-scraper.html )。
Q:如何避免掉入網頁蜜罐陷阱(Honeypot Traps)
網頁蜜罐陷阱(Honeypot Traps)就是許多網頁會在HTML原始碼中埋入只有網頁爬蟲會讀取到的隱藏連結或屬性,如果在開發Python網頁爬蟲沒有注意或避開時,很容易就會被偵測到而被封鎖,舉例來說,有個隱藏的連結帶有「display:none」或「visibility: hidden」的CSS屬性等,這是正常的使用者看不到,而網頁爬蟲所能讀取到的。
要避免掉入網頁蜜罐陷阱(Honeypot Traps),除了要注意網頁的HTML原始碼之外,另一個方法就是在開發Python網頁爬蟲時,可以參考該網頁的網站地圖(Sitemap),其中會列出公開給使用者存取的網頁網址,在開發的過程中,就盡量挑選裡面的公開網址來進行爬取。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/09/7-tips-to-avoid-getting-blocked-while-scraping.html )網站觀看更多精彩內容
  • 網頁資料擷取與分析 Python
  • Python
  • 網頁爬蟲
拍手 0 留言 0 觀看 0 收藏 0

Learn Code With Mike品牌創辦人

10/18 23:04

7個降低Python網頁爬蟲被偵測封鎖的實用方法(上)

Q:有哪些降低Python網頁爬蟲被偵測封鎖的方法?
現在的網頁五花八門,其中充滿了許多有價值的資料,因此有許多的使用者都會使用Python網頁爬蟲的技術來進行取得,而這也衍生了可能因為過量的請求(Request),導致網站的伺服器過載,而產生問題。
所以,越來越多的網站開始偵測網頁爬蟲,將其封鎖,這時候,在開發Python網頁爬蟲時,該如何降低被偵測到的風險呢?
後續將分為上下兩篇來分享以下7個方法給讀者進行參考:
1..輪流切換IP位址
2.設定請求表頭(Request Headers)
3.設定使用者代理(User-Agent)
4.設定參照位址(Referer)
5.設定隨機的延遲時間
6.使用無頭瀏覽器(Headless Browser)
7.避免掉入網頁蜜罐陷阱(Honeypot Traps)
Q:如何輪流切換IP位址
如果固定的使用同一組IP位址,在固定的時間內大量的請求(Request)網站,毫無疑問有很大的機率會被認為是網頁爬蟲,進而被封鎖請求(Request)。
因此,要利用Python網頁爬蟲爬取網站時,會建議需要擁有多組的IP位址,在每一次的請求(Request)時,輪流切換使用,來降低被偵測到的機會,可以參考使用Proxy切換服務,像是Scrapingdog( https://www.scrapingdog.com/ )等,或是IP切換服務,像是ScraperAPI( https://www.scraperapi.com/ )等,讓Python網頁爬蟲進行請求(Request)時,能夠使用不同的IP位址。
Q:如何設定請求表頭(Request Headers)
為了讓Python網頁爬蟲在發送請求(Request)時,能夠像真實的瀏覽器一樣,最好要設定請求表頭(Request Headers)資訊,如果沒有設定,很明顯就會被認為是Python網頁爬蟲而被封鎖。
除了能夠在Chrome瀏覽器開發者模式得知自己的請求表頭(Request Headers)外,也可以利用此網站(https://httpbin.org/anything )來查看,在Python網頁爬蟲的專案中,只要複製其中的headers欄位來使用即可。
Q:如何設定使用者代理(User-Agent)?
舉例來說,在Python網頁爬蟲的專案中,可以使用fake_useragent套件,在每一次的請求(Request)前,隨機產生一個使用者代理(User-Agent),並且加入到請求表頭(Request Headers)中,如下範例:
import requests
from fake_useragent import UserAgent
user_agent = UserAgent()
response = requests.get(url="https://example.com", headers={ 'user-agent': user_agent.random })
這樣就能夠避免Python網頁爬蟲的每一次請求(Request)皆使用相同的使用者代理(User-Agent),而被偵測到。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/09/7-tips-to-avoid-getting-blocked-while-scraping.html )網站觀看更多精彩內容。
  • 網頁資料擷取與分析 Python
  • Python
  • 網頁爬蟲
拍手 1 留言 0 觀看 3 收藏 0

Learn Code With Mike品牌創辦人

10/15 22:22

Python使用Selenium開發動態網頁爬蟲的技巧

Q: Python的Selenium套件有什麼功能?
Selenium套件被設計於自動化測試,來模擬使用者的動作,進行登入後爬取資料或滾動卷軸,並且能夠執行JavaScript程式碼,這些就是Selenium與BeautifulSoup套件最大不同的地方。對於開發Python動態爬蟲來說,就可以結合Selenium套件以上的特點,讓網頁動態載入資料後,再利用BeautifulSoup套件簡潔的方法(Method),將所需的資料爬取下來。
Q: 要怎麼開始使用Selenium套件?
Python的Selenium套件安裝指令如下:
$ pip install selenium
除此之外,要讓Selenium套件能夠自動開啟瀏覽器,就需要安裝對應的Webdriver(驅動程式),本文將以Chrome瀏覽器來做示範。前往Python套件儲存庫PyPI(Python Package Index),輸入Selenium進行查詢,並且手動安裝相對應版本的瀏覽器驅動程式。
Q: Selenium套件如何請求網頁?
首先,建立webdriver物件,傳入所下載的「瀏覽器驅動程式路徑」,就可以透過get()方法,前往要爬取的網頁網址。如下範例:
from selenium import webdriver
chrome = webdriver.Chrome('./chromedriver')
Q: Selenium套件如何定位網頁上的資料元素?
Selenium套件的定位元素方法非常多,可以參考Selenium套件的官方文件( https://selenium-python.readthedocs.io/locating-elements.html ),這邊以常使用的find_element_by_id()方法(Method)為例,如下:
email = chrome.find_element_by_id("email")
password = chrome.find_element_by_id("pass")
Q:Selenium套件如何模擬使用者輸入資料?
透過Selenium套件的send_keys()方法,就可以模擬使用者輸入資料,如下範例:
email = chrome.find_element_by_id("email")
password = chrome.find_element_by_id("pass")
email.send_keys('example@gmail.com')
password.send_keys('*****')
password.submit()
Q: Selenium套件如何執行JavaScript程式碼?
本文以滾動捲軸這個動作,來分享如何利用Selenium套件的execute_script()方法,來執行JavaScript程式碼,如下範例:
chrome = webdriver.Chrome('./chromedriver', chrome_options=options)
email = chrome.find_element_by_id("email")
password = chrome.find_element_by_id("pass")
email.send_keys('example@gmail.com')
password.send_keys('*****')
password.submit()
time.sleep(3)
for x in range(1, 4):
chrome.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(5)
範例中,使用Python的迴圈,執行滾動捲軸3次,每滾動一次就暫停執行程式碼5秒,讓Facebook載入更多的文章。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/05/python-selenium-scraper.html )網站觀看更多精彩內容。
  • Python網路爬蟲
  • 網路爬蟲
  • Python
  • 網頁資料擷取與分析 Python
拍手 1 留言 0 觀看 4 收藏 0

Learn Code With Mike品牌創辦人

10/15 21:55

Python使用BS4開發網頁爬蟲的技巧(下)

在實務上開發專案時,很多時候會利用其他網站的資料來進行分析或運用,而取得的方式除了透過網站所提供的API(Application Programming Interface)外,也可以利用Python來開發爬蟲程式,將網頁的HTML內容下載下來,接著利用BeautifulSoup套件(Package),擷取所需的資訊。
本文就來接續「Python使用BS4開發網頁爬蟲的技巧(上)」文章,來和大家繼續分享Python使用BS4開發網頁爬蟲的更多技巧。
Q:如何利用Python的BeautifulSoup套件搜尋前、後節點?
在同一層級的節點,想要搜尋前一個節點,可以使用BeautifulSoup套件(Package)的find_previous_siblings()方法,如下範例:
result = soup.find("h3", itemprop="headline").find_previous_siblings("a")
相反的,在同一層級的節點,想要搜尋後一個節點,則使用find_next_siblings()方法(Method),如下範例:
result = soup.find("h3", itemprop="headline").find_next_siblings("p")
Q:Python的BeautifulSoup套件的取得屬性值方法?
在前面範例中,皆為取得所需之HTML節點,而如果想要取得某一個節點中的屬性值,則可以利用BeautifulSoup套件(Package)的get()方法(Method)。
假設,想要爬取「ETtoday的旅遊雲」桃園景點首頁( https://travel.ettoday.net/category/%E6%A1%83%E5%9C%92/ )的標題連結。首先,利用find_all()方法搜尋網頁中所有<h3>標籤且itemprop屬性值為headline的節點,接著,透過for迴圈讀取串列(List)中的節點,由於<h3>標籤底下只有一個<a>標籤,所以可以利用BeautifulSoup套件的select_one()方法進行選取,如下範例:
titles = soup.find_all("h3", itemprop="headline")
for title in titles:
print(title.select_one("a"))
最後,利用get()方法(Method)取得href屬性值中的網址,如下範例:
titles = soup.find_all("h3", itemprop="headline")
for title in titles:
print(title.select_one("a").get("href"))
Q:Python的BeautifulSoup套件如何爬取超連結的文字
要取得<a>標籤的連結文字,可以利用BeautifulSoup套件(Package)的getText()方法(Method),如下範例:
titles = soup.find_all("h3", itemprop="headline")
for title in titles:
print(title.select_one("a").getText())
Q: find/find_all與select_one/select這兩種方法的差別和適合的使用時機是?
1.兩者的定位元素語法不同,select_one/select使用CSS的語法來進行元素定位。
2.find = select_one,皆是取得單一元素
find_all = select,皆是取得多個元素
3.find/find_all與select_one/select最大的差別就是語法不同,所以取決於您習慣哪一種語法來進行元素定位,如果要嚴格區分使用時機的話,通常select_one/select會使用在以class樣式類別來進行元素定位,或是定位元素的層級較多的情況,其餘會使用find/find_all。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/02/python-beautifulsoup-web-scraper.html )網站觀看更多精彩內容。
  • Python
  • 網頁爬蟲
  • 網頁資料擷取與分析 Python
拍手 0 留言 0 觀看 3 收藏 0

Learn Code With Mike品牌創辦人

10/18 22:27

Python使用GRequests開發非同步網頁爬蟲

Q:什麼是同步及非同步處理?
網頁相信是許多人取得訊息的主要來源,為了追蹤、分析或取得想要的資訊,Python網頁爬蟲技術被廣泛的使用,而如果所要爬取的資料量非常大時,效能就會變得非常的重要,而非同步(Asynchronous)處理則是用來提升效率的常用方法。
簡單來說,同步(Synchronous)就是接到一個任務後,需要等到它完成,才能繼續執行下一個任務。就像到了中午買午餐時,想要買一個炒飯和7-11的飲料,同步(Synchronous)處理就是需要等到炒飯做完了,才能去7-11買飲料,導致花費較多的執行時間。
而非同步(Asynchronous)則是能夠平行處理,無需等待第一個任務完成,即可執行其它的任務,只要第一個任務完成了,再回來處理。以上面的例子來說,非同步(Asynchronous)處理就是在叫完炒飯的同時,就可以去7-11買飲料,達到同時處理多個任務,提升執行效率。
Q:GRequests套件擁有什麼功能?
一般的情況下,使用Python開發網頁爬蟲時,所使用的requests套件,就是同步(Synchronous)處理,在發送一個請求(request)後,在還沒有收到回應前,不會執行其它的任務。
而grequests套件則是封裝了requests及gevent(協程)的套件,只要建置網址請求清單,就能夠平行發送多個請求(request),達到非同步(Asynchronous)處理,提升Python網頁爬蟲的執行效率。
Q:如何開發Python非同步網頁爬蟲?
利用以下的指令來安裝GRequests套件:
$ pip install grequests
要使用GRequests模組(Module)來平行發送請求(request),需先建立請求網址清單,如下範例:
start_time = time.time() #開始時間
links = list() #請求網址清單(1-10頁的網址)
for page in range(1, 11):
links.append("https://www.104.com.tw/jobs/search/?keyword=python&order=1&page=" + str(page) + "&jobsource=2018indexpoc&ro=0")
有了請求網址清單後,就可以利用GRequests模組(Module)建立請求清單集合,並且透過imap()方法(Method)平行發送請求,如下範例:
reqs = (grequests.get(link) for link in links) # 建立請求集合
response = grequests.imap(reqs, grequests.Pool(10)) # 平行發送請求
其中,Pool為處理池,由於有十個網頁,所以設定為10。有了十個網頁的回應結果後,就可以透過迴圈來進行職缺爬取的動作,如下範例:
for r in response:
soup = BeautifulSoup(r.content, "lxml") # 解析HTML原始碼
blocks = soup.find_all("div", {"class": "b-block__left"}) # 職缺區塊
for block in blocks:
job = block.find("a", {"class": "js-job-link"}) # 職缺名稱
if job is None:
continue
company = block.find_all("li")[1] # 公司名稱
salary = block.find("span", {"class": "b-tag--default"}) # 待遇
print((job.getText(),) + (company.getText().strip(),) + (salary.getText(),))
print("花費:" + str(time.time() - start_time) + "秒")
從執行結果可以看到,Python非同步網頁爬蟲所花費的時間較同步網頁爬蟲快了近3秒的時間,當所要爬取的資料量越大時,相差的執行時間就會更加明顯。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/10/python-web-scraping.html )網站觀看更多精彩內容。
  • 網頁爬蟲
  • 網頁資料擷取與分析 Python
  • Python
拍手 1 留言 0 觀看 3 收藏 0

104求職精靈x聯成

聯成

10/07 00:00

  • Photoshop
  • HTML5
  • CSS
  • jQuery
  • AutoCAD
  • 3ds Max
  • Python
  • scikit-learn
  • OpenCV
  • Creo Parametric
  • Illustrator
  • After Effects
  • Premiere
  • Cinema 4D
  • C#
  • Unity3D
  • RHCE
  • Red Hat Certified Engineer
  • CCNA
  • OpenStack
觀看 67 收藏 0

104求職精靈x電腦技能基金會

電腦技能基金會 精選線上課程

02/01 00:00

  • 程式語言 (C/Python)
  • Python
  • 程式語言
  • Python程式設計
觀看 338 收藏 2

104求職精靈xHahow好學校

Hahow好學校 精選線上課程

09/29 11:56

  • SQL
  • Machine Learning
  • 人工智慧
  • 資料庫
  • Python
觀看 434 收藏 23

104求職精靈xCupoy

01/29 15:40

  • Python
  • Google Analytics
  • Weka
  • Flink
  • Firebase
  • 深度學習
  • Machine Learning
  • NLP
  • 演算法開發
  • R
觀看 133 收藏 12

104求職精靈x商業發展研究院

商業發展研究院 精選線上課程

08/13 00:00

  • Python
  • 演算法
  • 資料科學
觀看 60 收藏 7

Learn Code With Mike品牌創辦人

10/17 18:24

Python網頁爬蟲動態翻頁的實作技巧

Q:Python網頁爬蟲動態翻頁是什麼?
在眾多的網頁中,當要載入的資料量非常龐大時,為了不影響執行效能的情況下,除了會使用滾動捲軸來動態載入更多的資料外,另一種最常見的方式就是利用分頁,來分別顯示特定筆數的資料。而Python網頁爬蟲遇到分頁的網站時,該如何翻頁爬取內容,就是本文要來分享的主題。
Q:頁碼使用GET的方式,Python網頁爬蟲如何動態翻頁?
大部分的網站分頁,都是使用GET方法來處理,從網址就可以知道目的地網址及傳至伺服器端的頁碼參數(page),當變換page參數的值時,就可以前往對應的頁碼網頁。
利用BeautifulSoup套件就可以使用Python迴圈,透過變換網址頁碼參數(page)的方式,翻頁爬取網頁內容了,如下範例:
for page in range(1, 4): # 執行1~3頁
response = requests.get("https://www.inside.com.tw/tag/AI?page=" + str(page))
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.find_all("h3", {"class": "post_title"})
print(f"====================第{str(page)}頁====================")
for title in titles:
print(title.select_one("a").getText())
Q:頁碼使用POST的方式,Python網頁爬蟲如何動態翻頁?
另一個網站頁碼切換的方式會採用POST方法,就像信件一樣,知道寄送的地址(網址),卻不會知道信封中的內容(送往伺服器的頁碼參數)。
由於是使用POST方法來撈取網頁資料,所以當切換到第二頁時,會發現網址並不會像使用GET的頁碼一樣,會出現頁碼的參數,而是和第一頁的網址一模一樣,都沒有動靜。這時候,就需要結合Selenium套件,透過模擬使用者點擊下一頁按鈕,來進行換頁的動作。如下範例:
browser = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)
area = browser.find_element_by_id("area-box-close")
area.click() # 取消「選擇縣市」的div視窗
for page in range(1, 3): # 執行1~2頁
soup = BeautifulSoup(browser.page_source, "html.parser")
# 取得所有class為pull-left infoContent的<li>標籤
elements = soup.find_all("li", {"class": "pull-left infoContent"})
print(f"==========第{str(page)}頁==========")
for element in elements:
# 取得<li>標籤下的<h3>標籤,再取得<h3>標籤下的<a>標籤文字,並且去掉空白
title = element.find("h3").find("a").getText().strip()
print(title)
page_next = browser.find_element_by_class_name("pageNext")
page_next.click() # 點擊下一頁按鈕
time.sleep(10) # 暫停10秒
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/06/how-to-scrape-different-pages-using-python-scraper.html )網站觀看更多精彩內容。
  • 網頁爬蟲
  • 網頁資料擷取與分析 Python
  • Python
拍手 2 留言 0 觀看 6 收藏 0
工作機會

Python Web Developer

StreetVoice _街聲股份有限公司

台北市松山區 1年以上 大學

月薪 40,000~60,000元

Python Engineer

Big Go_樂方股份有限公司

高雄市鼓山區 經歷不拘 大學

月薪 30,000~60,000元
我要應徵