声明:本文只用于技术交流和学习使用,如果侵害到您的合法权利,请发邮件到daokun66@163.com告知删除。
抓取的内容为osc的最新推荐博客列表,分析出博客的链接、标题、内容简介、作者和发布时间。
上图为ocs最新推荐的文章列表的html结构,由图可知所有的文章列表都在ul标签里面且ul的class="BlogList",每一篇文章的基本信息都在ul下的li标签里,每一个li下的h3下的a的href即为博客内容链接,a的内容即为博客标题,li下的p标签的内容即为博客简介,li下的div标签且class="date"的内容即为作者和发布时间。
#------------------------------------------------------------------------------- # coding: utf-8 # Version: python3.2 # Purpose:抓取测试 pageCrawl,抓取osc的最新推荐博客列表 #分析出博客链接、标题、内容简介、作者和发布时间 # #声明:本例只供技术交流和练习使用,如侵害了您的权利,请发邮件给daokun66@163.com通知删除 # Author: zdk # Created: 07/03/2013 #------------------------------------------------------------------------------- import httplib2 from html.parser import HTMLParser def getPageContent(url): ''' 使用httplib2用编程的方式根据url获取网页内容 将bytes形式的内容转换成utf-8的字符串 ''' #使用ie9的user-agent,如果不设置user-agent将会得到403禁止访问 headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'} if url: response,content = httplib2.Http().request(url,headers=headers) if response.status == 200 : return str(content,'utf-8') class MyHtmlParser(HTMLParser): ''' 根据html内容解析出相应的标签,获取标签的属性或相应的数据并输出 ''' def __init__(self): HTMLParser.__init__(self) self.href = [] #存放博客链接 self.title = [] #存放博客标题 self.summary = [] #存放博客内容简介 self.author = [] #存放作者和发布时间 self.ul = None #是否进入到了ul标签 self.ul_li = None #是否进入到了ul里的li标签 self.ul_li_h3 = None #是否进入到了ul里的li里的h3标签 self.ul_li_h3_a = None #是否进入到了ul里的li里的h3里的a标签 self.ul_li_p = None #是否进入到了ul里的li里的p标签 self.ul_li_div = None #是否进入到了ul里的li里的div标签 def handle_starttag(self, tag, attrs): if tag == 'ul' : for name,value in attrs: if name == 'class' and value =='BlogList': self.ul = 1 #进入到了ul标签 break elif self.ul and tag == 'li': self.ul_li = 1 #进入到了ul里的li标签 elif self.ul and self.ul_li and tag == 'h3': self.ul_li_h3 = 1 #进入到了ul里的li里的h3标签 elif self.ul and self.ul_li and self.ul_li_h3 and tag== 'a': self.ul_li_h3_a = 1 #进入到了ul里的li里的h3里的a标签 for name,value in attrs: if name == 'href': self.href.append(value) #取博客链接 print("博客链接:"+value) #输出博客链接 elif self.ul and self.ul_li and tag == 'p': self.ul_li_p = 1 #进入到了ul里的li里的p标签 elif self.ul and self.ul_li and tag == 'div': for name,value in attrs: if name == 'class' and value =='date': self.ul_li_div = 1 #进入到了ul里的li里的class='date'的div标签 break def handle_data(self, text): if self.ul and self.ul_li and self.ul_li_h3 and self.ul_li_h3_a : self.title.append(text) #链接里面的数据即为标题 print("博客标题:"+text) elif self.ul and self.ul_li and self.ul_li_p : self.summary.append(text) #ul里的li里的p标签的内容为博客内容简介 print("博客简介:"+text) elif self.ul and self.ul_li and self.ul_li_div : self.author.append(text) #ul里的li里的div标签的内容为作者和更新时间 print("博客作者和更新时间:"+text) def handle_endtag(self, tag): if tag == 'a' and self.ul and self.ul_li and self.ul_li_h3 and self.ul_li_h3_a : #退出了ul里的li里的h3里的a标签 #重置h3和a的标识数据 self.ul_li_h3 = None self.ul_li_h3_a = None elif tag == 'p' and self.ul and self.ul_li and self.ul_li_p: #退出了ul里的li里的p标签 self.ul_li_p = None elif tag == 'div' and self.ul and self.ul_li and self.ul_li_div: #退出了ul里的li里的div标签 self.ul_li_div = None elif tag == 'li' and self.ul and self.ul_li : #退出了ul里的li标签 self.ul_li = None elif tag == 'ul' and self.ul : #退出了ul标签 self.ul = None if __name__ == '__main__': pageC = getPageContent('http://www.oschina.net/blog/more?p=1') my = MyHtmlParser() my.feed(pageC)
运行结果
博客链接:http://my.oschina.net/lzp/blog/112341
博客标题:将私有Android工程迁移至GitHub
博客简介: 以前不太在意GitHub是因为印象中他一直是托管开源代码的,适合大家分享开源代码。最近感谢党和政府对它的XX,也使我...
博客作者和更新时间:lzpliu 发布于 4小时前
博客链接:http://my.oschina.net/ryanhoo/blog/112322
……
博客链接:http://my.oschina.net/NGINX08/blog/111380
博客标题:OceanBase分布式系统负载均衡案例学习
博客简介: 一个集群如果出现了负载不均衡问题,那么负载最大的机器往往将成为影响系统整体表现的瓶颈和短板。为了避免这...
博客作者和更新时间:NGINX08 发布于 4天前
博客标题:将私有Android工程迁移至GitHub
博客简介: 以前不太在意GitHub是因为印象中他一直是托管开源代码的,适合大家分享开源代码。最近感谢党和政府对它的XX,也使我...
博客作者和更新时间:lzpliu 发布于 4小时前
博客链接:http://my.oschina.net/ryanhoo/blog/112322
……
博客链接:http://my.oschina.net/NGINX08/blog/111380
博客标题:OceanBase分布式系统负载均衡案例学习
博客简介: 一个集群如果出现了负载不均衡问题,那么负载最大的机器往往将成为影响系统整体表现的瓶颈和短板。为了避免这...
博客作者和更新时间:NGINX08 发布于 4天前
程序非常简陋,只能抓取第一页的列表,没有代理(ip容易被墙),没有多线程(不能同时抓取多页),只是小弟学习python的一个练习,还望大牛多多指教。
相关推荐
Python数据抓取技术与实战.pdf Python数据抓取技术与实战.pdf Python数据抓取技术与实战.pdf
Python数据抓取技术与实战
Python数据抓取及时与实战,不完整版本,只有部分章节
现在,我们需要让这个爬虫从每个网页中抽取一些数据,然后实现某些事情,这种做法也被称为抓取(scraping)。首先,我们会介绍一个叫做Firebug Lite的浏览器扩展,用于检查网页内容,如果你有一些网络开发背景的话,...
python+selenium动态实战:抓取京东商城信息
Python工程师-APP实战思维导图,便捷整理思路,目标任务,SSL Pinning技术和Xposed框架,多任务端
共享资源,降低分享的分数,使得大家都有的份,有的看。。。 祝大家都可以学习的很充分。。。
Python网络爬虫实战-Scrapy教程,包括pdf/素材。网络爬虫(又被称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一 定的规则,自动的抓取万维网信息的程序或者脚本。 根据我的...
资源合计6大章节。...资源包含了数据准备、数据处理、数据的可视化,包括爬虫(网页数据抓取)、MySQL的连接、以及数据分析项目,具备完整的一个数据分析的流程,其中每一个章节都是独立的一个模块。
项目:AppStore数据分析 项目:人人网爬虫 项目背景与需求 项目技术文档 模拟登陆login.py 数据表单设计 第一步:抓取所有好友列表 第二步:解析所有好友信息 第三步:将好友主页页面保存 项目总结
1、资源内容:python爬虫的抓取模特相册实战 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为python参考资料学习借鉴使用。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且...
在之前,我们的爬虫都是串行下载网页的,只有前一次下载完成之后才会启动新下载。在爬取规模较小的示例网站时,串行下载尚可应对,一但面对大型网站时就会显得捉襟见肘了。 在爬取拥有100万网页的大型网站时,假设...
通过本章的学习,读者可以掌握分析网页的技巧、Python 编写网络程序的方法、Excel 的操作,以及正则表达式的使用。这些都是爬虫项目中必备的知识和技能。通过编写爬虫,将指定日期时段内的全部上市公司股票数据爬取...
本博客是一个Python网络爬虫的实战指南,旨在帮助读者掌握如何利用Python语言进行网页抓取和处理。主要介绍了使用flask、requests、BeautifulSoup、Threading、Scrapy、selenium等常用库和框架进行爬虫开发的技巧和...
python网络爬虫抓取教程,通过实战教学,可私信获取代码文件
Python网络爬虫实战,内容丰富全面,涵盖了网络爬虫的基础原理及对一些大型网站的数据的抓取采集手段,每一步都比较详解介绍
Python应用实战代码-Python如何从折线图中提取数据点
13.1_分析抓取目的确定抓取页面|实战_原生爬虫|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战Python3 爬虫实战