104學習精靈

Python

Python
關注
邀請朋友
邀請朋友

Line

Facebook

Twitter

複製連結

取消
Python是一種物件導向、直譯式電腦程式語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的作業系統中執行。 雖然 Python 可能被粗略地分類為「指令碼語言」(script language),但實際上一些大規模軟體開發計劃例如 Zope、Mnet 及 BitTorrent,Google 也廣泛地使用它。 Python 的支援者較喜歡稱它為一種高階動態編程語言,原因是「指令碼語言」泛指僅作簡單編程任務的語言,如 shell script、JavaScript 等只能處理簡單任務的編程語言,並不能與 Python 相提並論。 此外,由於 Python 對於 C 和其他語言的良好支援,很多人還把 Python 作為一種「膠水語言」(glue language)使用。 使用 Python 將其他語言編寫的程式進行整合和封裝。 在 Google 內部的很多專案使用 C++ 編寫性能要求極高的部分,然後用Python呼叫相應的模組。
關於教室
關注人數 80 人
104人力銀行從職缺中挑選出常見技能所成立的官方教室,提供大家進行共學互動。
學習主持人
持續分享知識,
有機會成為官方教室主持人
教室標籤
關於教室
關注人數 80 人
104人力銀行從職缺中挑選出常見技能所成立的官方教室,提供大家進行共學互動。
學習主持人
持續分享知識,
有機會成為官方教室主持人
教室標籤
Hi~ 歡迎分享學習資源,有學習問題可匿名向Giver發問!
我要分享
我要提問

Python 學習推薦

全部
影片
文章

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

技能挑戰:初級
目前等級:未達初級
2944 人已通過「初級」測驗,通過率82%,和學習精靈一起探索知識、增強能力!
我要挑戰
你可能感興趣的教室

Learn Code With Mike品牌創辦人

01/18 22:53

詳解Scrapy框架爬取分頁資料的實用技巧(上)
Q: Scrapy專案建立網頁內容爬取方法(Method)
首先,為了提升Scrapy網頁爬蟲(spiders/inside.py)的parse()方法(Method)爬取邏輯的重用性,本文將它獨立成一個新方法(Method),如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
yield from self.scrape(response) #爬取網頁內容
def scrape(self, response):
# 爬取文章標題
post_titles = response.xpath(
"//h3[@class='post_title']/a[@class='js-auto_break_title']/text()"
).getall()
# 爬取發佈日期
post_dates = response.xpath(
"//li[@class='post_date']/span/text()"
).getall()
# 爬取作者
post_authors = response.xpath(
"//span[@class='post_author']/a/text()"
).getall()
for data in zip(post_titles, post_dates, post_authors):
NewsScraperItem = {
"post_title": data[0],
"post_date": data[1],
"post_author": data[2]
}
yield NewsScraperItem
由於爬取邏輯被獨立為一個新方法(Method),這時候在parse()方法(Method)中,則需使用「yield from」關鍵字來進行呼叫,並且傳入網頁的回應結果(response),來執行網頁資料的爬取。
Q: Scrapy定位網頁的下一頁按鈕
如果想要利用Scrapy網頁爬蟲框架,繼續爬取第二頁的資料時,就需要取得下一頁的網址,通常都會位於「下一頁」按鈕的href屬性中。
在「下一頁」按鈕點擊右鍵,選擇「檢查」,可以看到它的HTML原始碼。接下來,回到Scrapy專案的spiders/inside.py檔案,在parse()方法(Method)中,即可利用Scrapy框架的xpath()方法(Method),傳入「下一頁」按鈕的樣式類別(class)來進行定位,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
yield from self.scrape(response)
# 定位「下一頁」按鈕元素
next_page_url = response.xpath(
"//a[@class='pagination_item pagination_item-next']/@href")
def scrape(self, response):
...
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/02/scraping-multiple-pages-with-scrapy.html
)網站觀看更多精彩內容。
拍手 0 留言 0 觀看 8 收藏 0

Learn Code With Mike品牌創辦人

01/18 21:20

掌握Scrapy框架重要的XPath定位元素方法(下)
XPath(XML Path Language)是一個使用類似檔案路徑的語法,來定位XML文件中特定節點(node)的語言,因為能夠有效的尋找節點(node)位置,所以也被廣泛的使用在Python網頁爬蟲的元素(Element)定位上。
本文就以INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai ),來帶大家來認識如何在Scrapy框架中,使用內建的xpath()方法(Method)來定位想要爬取的網頁內容。
Q: Scrapy如何利用XPath方法取得子元素值?
在開發Python網頁爬蟲時,有很常的機率會需要透過逐層的方式,往下定位所要爬取的子元素(Element),這時候Scrapy xpath()方法(Method)中,所傳入的XPath路徑則跟檔案目錄一樣,一層一層的往下串接。
假設我們想從<div>標籤,逐層往下定位到<a>標籤,XPath路徑就會像以下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.xpath(
"//div[@class='post_list_item_content']/h3[@class='post_title']/a/text()").getall()
for title in titles:
print(title)
Q: Scrapy如何利用XPath方法取得元素屬性值?
Python網頁爬蟲除了能夠爬取網頁上顯示的內容外,也可以取得網頁元素(Element)的屬性值,舉例來說,像是<img>圖片的src來源屬性值或<a>超連結的href網址屬性值等,這時候,就需要在Scrapy框架的xpath()方法(Method)最後,加上「@屬性名稱」,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.xpath(
"//a[@class='js-auto_break_title']/@href").getall()
for title in titles:
print(title)
以上範例,即是爬取所有樣式類別(class)為「js-auto_break_title」的<a>標籤href屬性值,也就是文章標題的網址。
本文簡單示範了Scrapy框架的另一個定位元素方法XPath,很明顯的可以感受到語法和檔案路徑非常相似,使用上也很直覺,重點摘要如下:
1.取得單一元素值呼叫get()方法(Method)
2.取得多個元素值呼叫getall()方法(Method)
3.取得文字內容,加上「/text()」關鍵字
4.取得屬性值則加上「@屬性名稱」關鍵字
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/01/scrapy-xpath-selectors.html
)網站觀看更多精彩內容。
拍手 0 留言 0 觀看 13 收藏 0

Learn Code With Mike品牌創辦人

01/18 21:13

掌握Scrapy框架重要的XPath定位元素方法(上)
本文就以INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai ),來帶大家來認識如何在Scrapy框架中,使用內建的xpath()方法(Method)來定位想要爬取的網頁內容。
Q: Scrapy如何利用XPath方法取得單一元素值?
首先,開啟INSIDE硬塞的網路趨勢觀察網站-AI新聞網頁( https://www.inside.com.tw/tag/ai ),在文章標題的地方按滑鼠右鍵,選擇「檢查」,可以看到HTML原始碼,如果想要以XPath語法定位這個<a>標籤的位置,語法就像檔案路徑一樣,如下範例:
//a[@class='js-auto_break_title']
意思就像是根目錄下的<a>標籤,並且利用「[@class='']」來指定它的樣式類別(class),如此就能夠定位到文章標題的<a>標籤。
接下來,在spiders / inside.py的parse()方法(Method)中,將網頁回應的結果(response),改為呼叫xpath()方法(Method),並且,貼上剛剛所得知的XPath路徑,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
title = response.xpath("//a[@class='js-auto_break_title']/text()").get()
print(title)
接著,利用以下指令執行inside網頁爬蟲:
$ scrapy crawl inside
以上範例,利用XPath路徑定位到所要爬取的<a>標籤後,由於要取得其中的網頁內容文字,所以在XPath路徑的最後需加上「/text()」關鍵字,並且,呼叫get()方法(Method)取得單一元素值。
Q: Scrapy如何利用XPath方法取得多個元素值?
如果想要利用Scrapy xpath()方法(Method)取得多個元素值,使用XPath路徑定位到所要爬取的網頁元素<a>標籤後,呼叫getall()方法(Method)即可,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.xpath("//a[@class='js-auto_break_title']/text()").getall()
print(titles)
從執行結果可以看到,getall()方法(Method)會回傳一個串列(List),包含所有樣式類別(class)為「js-auto_break_title」的<a>標籤標題文字,接下來,就需要透過迴圈來進行讀取,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.xpath("//a[@class='js-auto_break_title']/text()").getall()
for title in titles:
print(title)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/01/scrapy-xpath-selectors.html
)網站觀看更多精彩內容。
拍手 0 留言 0 觀看 6 收藏 0

Learn Code With Mike品牌創辦人

01/15 22:56

掌握Scrapy框架重要的CSS定位元素方法(下)
Q: Scrapy如何利用CSS方法取得子元素值?
在實務上利用Scrapy框架開發Python網頁爬蟲時,並不是每次想要爬取的網頁元素(Element)都會有CSS樣式類別可以定位,這時候,就會需要透過上層的父元素往下定位子元素。
假設INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai )的文章標題<a>標籤沒有「js-auto_break_title」CSS樣式類別,而想要爬取<a>標籤的文字內容,該如何達成呢?
這時候,就會需要在Scrapy框架中利用CSS樣式類別先定位到<h3>標籤,接著,再取得其下的子元素<a>標籤,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.css("h3.post_title a::text").getall()
for title in titles:
print(title)
在範例中,利用「post_title」CSS樣式類別定位到<h3>標籤後,接著一個空白,加上<a>標籤,意思就是取得<h3>標籤下的所有<a>標籤,由於要取得其中的文字,所以加上「::text」。
Q: Scrapy如何利用CSS方法取得元素屬性值?
此外,在開發Python網頁爬蟲時,也有機會爬取元素的屬性值(Attribute),舉例來說,最常見的就是<a>標籤的href屬性值(Attribute),也就是文章的連結網址,這時候只需要將「::text」關鍵字,修改為「::attr(屬性名稱)」即可,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
urls = response.css("a.js-auto_break_title::attr(href)").getall()
for url in urls:
print(url)
本文與掌握Scrapy框架重要的CSS定位元素方法(上)搭配實際的網站,示範Scrapy框架利用css()方法(Method)來定位網頁元素的基本用法,重點摘要如下:
1.取得單一元素值呼叫get()方法(Method)
2.取得多個元素值呼叫getall()方法(Method)
3.取得文字內容,加上「::text」關鍵字
4.取得屬性值則加上「::attr(屬性名稱)」關鍵字
希望對於想要學習Scrapy框架的朋友有所幫助。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2021/01/scrapy-css-selectors.html
)網站觀看更多精彩內容。
拍手 1 留言 0 觀看 212 收藏 1

Learn Code With Mike品牌創辦人

01/15 22:46

掌握Scrapy框架重要的CSS定位元素方法(上)
想要開發Python網頁爬蟲的朋友,都會知道定位元素(Element)是一個非常重要的動作,Scrapy框架本身就有提供自己的定位元素(Element)方法(Method),包含CSS與XPath兩種,本文就以INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai )為例,先來和大家分享在Scrapy框架中,如何利用CSS的定位元素(Element)方法(Method),爬取想要的網頁內容。
Q: Scrapy如何利用CSS方法取得單一元素值?
CSS(Cascading Style Sheets)階層樣式表相信大家都不陌生,可以自訂樣式的類別來裝飾網頁,像是字體顏色、粗體等,所以在利用Scrapy框架開發網頁爬蟲時,也就能夠利用CSS樣式類別,來定位想要爬取的網頁元素(Element)。
前往INSIDE硬塞的網路趨勢觀察網站-AI新聞,在文章標題的地方,點擊滑鼠右鍵,選擇檢查,可以看到它的CSS樣式類別。假設想要在Scrapy框架中,利用CSS樣式類別來取得網頁的單一元素值,也就是單一文章的標題,就可以在spiders/inside.py的parse()方法(Method)中,使用css()方法(Method)來定位單一元素(Element),如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
title = response.css("a.js-auto_break_title::text").get()
print(title)
接著,利用以下的指令執行inside網頁爬蟲:
$ scrapy crawl inside
以上範例,response就是Scrapy框架請求後的回應結果,接著,呼叫css()方法,傳入所要定位的HTML標籤<a>,點的後面加上它的CSS樣式類別,由於要取得元素(Element)的文字,所以在加上「::text」關鍵字,最後,呼get()方法(Method)取得單一元素(Element)。
Q: Scrapy如何利用CSS方法取得多個元素值?
而在Scrapy框架中,想要爬取網頁多個元素值,則呼叫getall()方法(Method)即可,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.css("a.js-auto_break_title::text").getall()
print(titles)
可以看到getall()方法(Method)回傳的是一個串列(List),包含了所有樣式類別為「js-auto_break_title」的<a>標籤文字,接下來,利用迴圈即可取得其中的文章標題,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.css("a.js-auto_break_title::text").getall()
for title in titles:
print(title)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2021/01/scrapy-css-selectors.html
)網站觀看更多精彩內容。
拍手 1 留言 0 觀看 67 收藏 1

Learn Code With Mike品牌創辦人

12/30 23:49

教你Scrapy框架匯出CSV檔案方法提升資料處理效率
Q:Scrapy CsvItemExporter(CSV資料模型匯出器)如何使用?
開啟「資料模型管道檔案(pipeline.py)」,由於本文想要將爬取到的資料匯出到CSV檔案中,所以就需要引用CsvItemExporter(CSV資料模型匯出器),如下範例:
from itemadapter import ItemAdapter
from scrapy.exporters import CsvItemExporter
接下來,新增一個CsvPipeline類別(Class),用來定義Scrapy網頁爬蟲取得的資料匯出到CSV檔案的流程,這個類別名稱可以自行命名,如下範例:
from itemadapter import ItemAdapter
from scrapy.exporters import CsvItemExporter
class CsvPipeline:
類別(Class)命名完成後,新增一個建構式(Constructor),用來定義初始化的動作,如下範例:
class CsvPipeline:
def __init__(self):
self.file = open('posts.csv', 'wb')
self.exporter = CsvItemExporter(self.file, encoding='big5')
self.exporter.start_exporting()
以上的初始化動作包含了:
1.建立或打開CSV檔案,設定寫入二進位碼模式(wb, write binary)。
2.建立Scrapy框架的CsvItemExporter(CSV資料模型匯出器)物件,傳入檔案物件及編碼方式,預設為utf-8,如果讀者在匯出CSV檔案後,想要使用Microsoft Excel軟體開啟的話,就需要設定為big5,否則會出現亂碼。
3.呼叫start_exporting()方法(Method)開始進行檔案匯出的動作。
接下來,資料處理的部分,就需要實作Scrapy框架內建的process_item()方法(Method),在其中把資料模型(items)所裝載的資料,透過export_item()方法(Method)傳入CsvItemExporter(CSV資料模型匯出器),如下範例:
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
將Scrapy網頁爬蟲取得的資料匯出到自訂的CSV檔案後,結束時所要進行的動作,就要實作內建的close_spider()方法(Method),如下範例:
def close_spider(self, spider):
self.exporter.finish_exporting()
self.file.close()
以上範例也就是在Scrapy網頁爬蟲結束時,呼叫finish_exporting()方法(Method)完成檔案匯出,並且將檔案物件關閉,釋放資源。
匯出CSV檔案的資料模型管道(pipeline)完成後,別忘了在settings.py檔案,將此資料模型管道(pipeline)加入到ITEM_PIPELINES設定中,如下範例:
ITEM_PIPELINES = {
'news_scraper.pipelines.CsvPipeline': 500,
}
最後,利用以下指令來執行Scrapy網頁爬蟲:
$ scrapy crawl inside
執行後會在Scrapy網頁爬蟲專案中,看到posts.csv檔案,利用Microsoft Excel軟體開啟即可。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/01/scrapy-export-csv-files.html
)網站觀看更多精彩內容。
拍手 2 留言 0 觀看 798 收藏 3
你可能感興趣的教室
一零四資訊科技股份有限公司 版權所有 © 2021 建議瀏覽器 Chrome / IE11.0 以上