作業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2894
給定一篇新聞的鏈接newsUrl,獲取該新聞的全部信息
標題、作者、發布單位、審核、來源
發布時間:轉換成datetime類型
點擊:
- newsUrl
- newsId(使用正則表達式re)
- clickUrl(str.format(newsId))
- requests.get(clickUrl)
- newClick(用字符串處理,或正則表達式)
- int()
整個過程包裝成一個簡單清晰的函數。
#coding = utf-8; import re; import requests; from datetime import datetime; from bs4 import BeautifulSoup; class News(object): ''' 廣商校園新聞 ''' def __init__(self, url): self.url = url; #新聞網頁地址 self._dom_tree = self._tranfrom_dom_tree(url); self._show_infos = self._dom_tree.select(".show-info")[0].text.split(); self._update_time = self._show_infos[0][5:] + " " + self._show_infos[1]; # 最后更新時間 def _tranfrom_dom_tree(self,url): ''' 將獲取的html文本轉化為dom樹 ''' response = requests.get(url); response.encoding = "utf-8"; return BeautifulSoup(response.text, "html.parser"); # 新聞標題 @property def title(self): return self._dom_tree.select(".show-title")[0].text; # 新聞作者 @property def auothor(self): return self._show_infos[2][3:]; # 新聞審核 @property def auditor(self): return self._show_infos[3][3:]; # 新聞發布單位 @property def origin(self): self._show_infos[4][3:]; # 新聞最后更新時間 @property def update_time(self): return self._update_time; @update_time.setter def update_time(self, time): self._update_time = time; # 點擊次數 @property def times(self): clickUrl = 'http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80'.format(self.news_id); res = requests.get(clickUrl) click = re.findall('(\d+)', res.text)[-1] return click # 新聞標識 @property def news_id(self): time = datetime.strptime(self._update_time, '%Y-%m-%d %H:%M:%S'); time = time.strftime("%m%d"); re.match('http://news.gzcc.cn/html/2019/.*/(\d+).html', self.url).group(1) if __name__ == "__main__": html_url = "http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0322/11047.html"; news = News(html_url);