閒聊
昨天我們嘗試讓爬蟲會繼續往下一頁前進,那麼今天就是要把我們前兩天的資料儲存起來。
預期
將爬取到的文章內容以JSON檔案格式儲存。
實作
第一步需要先定義一個等下讓我們放所有文章資料的list(串列)。
article_list = []
第二步,我們把每篇文章的資料都存成dict(字典),再把字典所存放的資訊放入串列中。
title = art.fin('div', class = 'title').getText().strip()
if not title.stratswith(('本文已被刪除')) :
link = 'https://www.ptt.cc' + \
art.find('div', class_='title').a['href'].strip()
author = art.find('div', class_='author').getText().strip()
artcle = {
'title':title,
'link:link',
'author':author
}
第三步,要將存放所有資料的串列存為JSON檔。
這邊會使用到的JSON是Python內建庫,記得要引入。
import json
with open('ptt-artcle.json','w',encoding = 'utf-8') as f :
json.dump(artcle_list,f, indent=2, sort_keys=True, ensure_ascii=False)
最後將存為JSON檔的程式碼加入爬蟲中就完成了!
import requests
import json
from bs4 import BeautifulSoup
article_list = []
url = 'https://www.ptt.cc/bbs/Gossiping/index.html'
def get_r(url):
cookies = {
'over18':1
}
r = requests.get(url, cookies=cookies)
if r.status_code != 200: #200網頁正常
return 'error'
else:
return r
def get_articles(r):
soup = BeautifulSoup(r.text, 'html5lib')
arts = soup.find_all('div', class_='r-ent')
for art in arts:
title = art.find('div', class_='title').getText().strip()
if not title.startswith('本文已被刪除') :
link = 'https://www.ptt.cc' + \
art.find('div', class_='title').a['href'].strip()
author = art.find('div', class_='author').getText().strip()
article = {
'title': title,
'link': link,
'author': author
}
article_list.append(article)
# 利用 Css Selector 定位下一頁網址
next_url = 'https://www.ptt.cc' + \
soup.select_one(
'#action-bar-container > div > div.btn-group.btn-group-paging > a:nth-child(2)')['href']
return next_url
# 當執行此程式時成立
if __name__ == '__main__':
# 第一個頁面網址
url = 'https://www.ptt.cc/bbs/Gossiping/index.html'
# 先讓爬蟲爬 10 頁
for now_page_number in range(10):
r = get_r(url)
if r != 'error':
url = get_articles(r)
print(f'======={now_page_number+1}/10=======')
#把所有文章資訊存為JSON檔
with open('ptt-article.json','w',encoding = 'utf-8') as f :
json.dump(article_list,f, indent=2, sort_keys=True, ensure_ascii=False)
結語
今天我們把資料用JSON檔的方式儲存起來,PTT的爬蟲也告一段落。
明天一起來看看這半個月以來學習了什麼!
明天!
【Day 17】半個月以來總結
參考資料
PTT八卦版https://www.ptt.cc/bbs/Gossiping/index.html
Json爬蟲實戰-24小時電商PChome爬蟲|雖然我不是個數學家但這聽起來很不錯吧https://marketingliveincode.com/?p=4555