104學習精靈

系統分析師

Responsive image
不分產業
系統分析師
檢視符合度
企業所需技能
全部關注
關注教室,同業交流提升競爭力
TOP 1
Java
TOP 2
C#
TOP 3
MS SQL
TOP 4
ASP.NET
TOP 5
JavaScript
TOP 6
資料庫系統
TOP 7
程式開發
TOP 8
Oracle
TOP 9
SQL
TOP 10
Python
職業關鍵職能
全部關注
關注教室,加強軟實力吧!
分析思考
溝通協調
壓力承受
決策能力
認真負責
協商談判

系統分析師 學習推薦

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

Learn Code With Mike品牌創辦人

01/19 22:07

詳解Scrapy框架爬取分頁資料的實用技巧(下)
Q: Scrapy爬取多頁的網頁內容
在定位到INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai )的「下一頁」按鈕後,接下來就要判斷這個按鈕是否存在,如果存在的話代表後續還有分頁,需要繼續往下爬取,反之,則停止,如下範例:
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")
if next_page_url:
url = next_page_url.get() #取得下一頁的網址
yield scrapy.Request(url, callback=self.parse) #發送請求
def scrape(self, response):
...
其中,callback關鍵字參數(Keyword Argument)代表的意思,就是在Scrapy網頁爬蟲請求下一頁的網址後,再重新執行parse()方法(Method),也就會取得下一頁的回應結果(response),爬取網頁內容,並且定位「下一頁」按鈕,判斷如果存在的話,代表還有下一頁,則取得下一頁的網址,發送請求,以此類推,直到沒有下一頁為止。
以上就是將INSIDE硬塞的網路趨勢觀察網站-AI新聞的所有分頁資料爬取下來的實作方法。當然,有時候並不想爬取那麼多的資料,可能只需要特定頁數的內容,舉例來說前3頁,就可以在每一次請求下一頁的網址前,將執行次數(count)加1,判斷如果在3次內,就發送請求,否則停止,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
count = 1 # 執行次數
def parse(self, response):
yield from self.scrape(response) #爬取網頁內容
# 定位「下一頁」按鈕元素
next_page_url = response.xpath(
"//a[@class='pagination_item pagination_item-next']/@href")
if next_page_url:
url = next_page_url.get() #取得下一頁的網址
InsideSpider.count += 1
if InsideSpider.count <= 3:
yield scrapy.Request(url, callback=self.parse) #發送請求
def scrape(self, response):
...
最後,利用以下指令來執行Scrapy網頁爬蟲:
$ scrapy crawl inside
以上就是爬取INSIDE硬塞的網路趨勢觀察網站-AI新聞的前3頁內容,讀者可依自己的需求來進行頁數的調整。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/02/scraping-multiple-pages-with-scrapy.html
)網站觀看更多精彩內容。
拍手 0 留言 0 觀看 3 收藏 0
職涯診所

01/19 18:06

拍手 0 留言 4 觀看 62 收藏 0
職涯診所

01/19 17:26

拍手 1 留言 6 觀看 49 收藏 0
職涯診所

01/19 15:46

拍手 1 留言 5 觀看 48 收藏 0
職涯診所

01/19 15:17

拍手 1 留言 4 觀看 46 收藏 0

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
)網站觀看更多精彩內容。
拍手 1 留言 0 觀看 75 收藏 0
不知如何開始學習嗎? 先進行技能挑戰吧~
我要挑戰
一零四資訊科技股份有限公司 版權所有 © 2021 建議瀏覽器 Chrome / IE11.0 以上