python爬虫新闻_python爬虫,爬取一系列新闻
classGZCCNewsReptile(object):'''廣州商學院校園新聞獲取工具'''
def __init__(self):
self._news_type= "dict";
self._root_url= "http://news.gzcc.cn/html/xiaoyuanxinwen/";
self._url=self.page_url();
self._dom_tree=tranfrom_dom_tree(self._url);def page_url(self, page=1):'''將指定頁面解析數值解析對應url
:param page: 指定的一個新頁面'''
if page == 1:
self._now_page= "index";else:
self._now_page=page;return self._root_url+str(self._now_page)+".html";
@propertydefcount(self):''':return: 返回校園新聞總條數'''count= self._dom_tree.select(".a1")[0].text;return int(count[0:-1]);
@propertydefpage(self):''':return: 獲取校園新聞總頁數'''page= int(self.count) / 10;
int_page=int(page);if page >int_page:return ( int_page + 1);else:returnint_page;defget_news_from_news_page_size(self, start_page, end_page):'''設置爬取頁數范圍,
start_page 小于 1 拋出 異常
start_page 大于 end_page 拋出 異常
end_page 大于 總頁數 拋出 異常
:param start_page: 要爬取范圍的開始頁
:param end_page: 結束爬取范圍的頁面(不包括該頁面)'''
if start_page < 1:raise IndexError("start_page不在指定范圍內");if start_page >end_page:raise IndexError("start_page大于end_page");if end_page >self.page:raise IndexError("end_page不在指定范圍內");
news_list=[];
times= (index for index inrange(start_page, end_page));#爬取指定范圍數據
for index intimes:#news_page_list = self.get_news_from_page_url(self.page_url(index));
news_page_list = self.get_page_news(index); #較上句更利于封裝
news_list.append(news_page_list);
news_list=sum(news_list, []);returnnews_list;defget_page_news(self, page):'''獲取指定頁數
若指定的頁數在可爬取頁數的范圍之外,則拋出運行異常異常
:param pages: 指定的頁數
:return: 返回指定頁的新聞列表'''
if page < 1 or page >self.count:raise IndexError("page不在指定范圍內");else:print("\r當前正在%d頁" % page, end="");returnself.get_news_from_page_url(self.page_url(page));defget_news_from_page_url(self, url):'''獲取指定url的所有新聞列表
:param pages: 指定的頁面url
:return: news_page_list的列表'''dom_tree=tranfrom_dom_tree(url);
news_ui= dom_tree.select(".news-list li a");
news_page_list=[];for index in range(0, 10):try:
a_tag=news_ui[index];
href= a_tag.get("href");
news=News(href);
news.summary= a_tag.select(".news-list-description")[0].text;
news_page_list.append(eval("news.to_"+self.news_type+"()"));exceptException:
error_log= "此頁面不正常: %s"%href;print("此頁面不正常: %s"%href, end="");
with open("./logger.txt", "a", encoding="utf-8") as file:
now_time=time.time();
file.write(error_log+ "錯誤時間:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now_time)) );returnnews_page_list;
@propertydefnews_type(self):'''新聞默認類型設置
:return: 返回默認類型'''
returnself._news_type;
@news_type.setterdef news_type(self, type="dict"):'''新聞可選類型
:param type: 選擇的類型'''
if type == "dict":
self._news_type=type;else:raise Exception("未能匹配該類型");
總結
以上是生活随笔為你收集整理的python爬虫新闻_python爬虫,爬取一系列新闻的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何进入文件夹_python
- 下一篇: python 使用全局变量_如何在Pyt