在上一期,主要講解了:連接配接網站與解析 HTML
上一期隻是一個簡單的例子,擷取了網站的一小部分内容,本期開始講解需要擷取網站的所有文章清單。
在開始以前,還是要提醒大家:在網絡爬蟲的時候,你必須非常謹慎地考慮需要消耗多少網絡流量,還要盡力思考能不能讓采集目标的伺服器負載更低一點。
本次示例采集The ScrapingBee Blog部落格的文章。
在做資料采集以前,對網站經行分析,看看代碼結構。
需要采集的部分是一個個的小 card 組成,截圖如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5yNxEDNhJWN5YjM5cTOkJTO5IWY0EDZ5UWZmFGOzEmM28CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.jpg)
單個卡片的内容,就是我們需要的内容,整理完思路之後,開始完成代碼:
首先我們還是複用上一期網站連接配接的代碼:
def __init__(self):
self._target_url = 'https://www.scrapingbee.com/blog/'
self._init_connection = connection_util.ProcessConnection()
以上代碼定義了一個被采集的網址,同時複用上一期的網站連接配接代碼。
# 連接配接目标網站,擷取内容
get_content = self._init_connection.init_connection(self._target_url)
連接配接到上面定義的目标網站,并擷取網站的内容。
if get_content:
parent = get_content.findAll("section", {"class": "section-sm"})[0]
get_row = parent.findAll("div", {"class": "col-lg-12 mb-5 mb-lg-0"})[0]
如果存在内容,對網站内容的标簽經行查找,以上是擷取所有 card 的父标簽,擷取具體網站結構可以自己檢視網站的完整内容。
get_child_item = get_row.findAll("div", {"class": "col-md-4 mb-4"})
擷取所有小卡片。
for item in get_child_item:
# 擷取标題文字
get_title = item.find("a", {"class": "h5 d-block mb-3 post-title"}).get_text()
# 擷取釋出時間
get_release_date = item.find("div", {"class": "mb-3 mt-2"}).findAll("span")[1].get_text()
# 擷取文章描述
get_description = item.find("p", {"class": "card-text post-description"}).get_text()
之後對擷取的小卡片經行周遊,擷取每個卡片的文章的标題,釋出時間,文章描述。
以上從網站結構開始分析,到具體代碼實作,這是爬蟲抽取網站内容的一個基本思路。
每個網站不同,結構也會有所不同,是以要針對性的編寫代碼。
以上代碼已托管在 Github,位址:
https://github.com/sycct/Scrape_1_1/文章來源: 爬蟲識别 - 爬蟲系列:資料采集