使用Python爬取扇貝每日一句並儲存
阿新 • • 發佈:2021-01-17
技術標籤:Python小工具python爬蟲經驗分享windows xprequest
更進一步
上一篇文章,在 windows xp 上使用 Python 獲取扇貝單詞每日一句
中通過修改博Livathan`利維坦 獲取愛詞霸每日一句的python檔案,成功輸出了扇貝APP的啟動封面的每日名句。
這裡要感謝xde.io這篇部落格中提供的扇貝單詞每日一句API。經過簡單修改,實現了儲存指定兩個日期間隔之間的扇貝每日一句並儲存為任意文字檔案的功能,刪減了原python程式碼中的不必要的功能,在解決問題中學習,頗有其樂。
程式碼如下
# coding:utf-8
import pandas as pd
import datetime,time
import json
from urllib import request,response
import requests
from bs4 import BeautifulSoup
# 目標URL
url_address = ""
class My_Shanbay_Saver:
# Class Attribute -- Object
obj_request = None
obj_response = None
obj_html = None
# -- Variable
headers = ""
string_url = ""
def __init__(self, str_url=""):
# 目標URL
self.string_url = str_url
# 自定義【header】 防止【反爬蟲】
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36' }
# 初始化【爬取網頁】所需要的物件
if str_url != "" and str_url != None:
# 響應返回的資料
self.obj_request = request.Request(url=self.string_url,headers=self.headers)
request.urlopen(self.obj_request)
self.obj_html = self.obj_response.read()
# 【WEB】編碼解析器
self.obj_bs = BeautifulSoup(self.obj_html, "html.parser")
else:
print()
def __del__(self): pass
def set_date(self,start_date,end_date):
if start_date <= end_date:
print("開始下載並儲存檔案。")
else:
print("開始時間必須早於結束時間,請重新輸入!")
start_date=input("起始日期: ")
end_date=input("結束日期: ")
# 將URL轉換成可以直接操作的物件
def obj_url(self,resource_url):
obj_resp = request.urlopen(url=resource_url)
obj_url = obj_resp.read()
return obj_url
# 獲取【扇貝指定日期每日一句】
def get_shanbay_daily(self,str_date=""):
# 系統當前時間
str_date_current = time.strftime("%Y-%m-%d", time.localtime())
# 基準時間
date_base = None
date_base_formatted = None
if str_date == "":
date_base = time.strptime(str_date_current,"%Y-%m-%d")
date_base_formatted = str_date_current
else:
date_base = time.strptime(str_date, "%Y-%m-%d")
date_base_formatted = str_date
str_url = "https://apiv3.shanbay.com/weapps/dailyquote/quote/?date=" + date_base_formatted
# 響應返回的資料(單獨的請求物件的建立,與類初始化的時候的請求物件沒關係)
obj_resp = requests.get(str_url)
obj_resp_data = obj_resp.text
# JSON
data_html_json = json.loads(obj_resp_data)
# 資料
data_content_author = dict(data_html_json).get('author')
data_content_en = dict(data_html_json).get('content')
data_content_zh = dict(data_html_json).get('translation')
#寫入檔案
sb_file = open(file_name, 'a+', encoding='utf-8')
sb_file.write("--------\n\n日期:【" + str_date + "】"+"\n作者:【" + data_content_author + "】\n英文:【"+ data_content_en +"】\n中文:【" + data_content_zh + "】\n\n")
sb_file.close()
# 獲取【扇貝每日一句】
def get_shanbay_daily_by_DateRange(self,start_date,end_date):
# Variable
date_array = pd.date_range(start_date,end_date)
# Display
for date_item in date_array:
# Variable
date_item_formatted = time.strftime("%Y-%m-%d",time.strptime(str(date_item), "%Y-%m-%d %H:%M:%S"))
# Do
self.get_shanbay_daily(str_date=date_item_formatted)
# Section: main()
if __name__ == "__main__":
print("獲取扇貝網每日一句")
file_name = input("要儲存的檔名: xxx.txt\n")
start_date = input("開始日期:如2020-1-1\n ")
end_date = input("結束日期:如2020-1-2\n")
obj_My_Shanbay_Saver = My_Shanbay_Saver()
obj_My_Shanbay_Saver.set_date(start_date,end_date)
obj_My_Shanbay_Saver.get_shanbay_daily_by_DateRange(start_date,end_date)
# Section: End Finished
執行效果如下:
>>>
獲取扇貝網每日一句
要儲存的檔名: xxx.txt
20210116.txt
開始日期:如2020-1-1
2021-1-16
結束日期:如2020-1-2
2021-1-16
開始下載並儲存檔案。