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(" 当前正在%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("未能匹配该类型");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值