`

十一Python网页抓取实战(网页抓取三)

阅读更多

 

    声明:本文只用于技术交流和学习使用,如果侵害到您的合法权利,请发邮件到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天前

程序非常简陋,只能抓取第一页的列表,没有代理(ip容易被墙),没有多线程(不能同时抓取多页),只是小弟学习python的一个练习,还望大牛多多指教。  

 

 

  • 大小: 37.5 KB
分享到:
评论

相关推荐

    Python 网页抓取入门:技术原理与实战指南

    本文详细介绍了使用 Python 进行网页内容抓取的技术原理和实战指南,包括主要步骤、技术栈与工具、实战代码示例、遵守 Robots.txt、异常处理、用户代理旋转、法律和道德问题、分布式爬虫以及爬虫与机器学习等方面的...

    Python数据抓取技术与实战.pdf

    2. Python抓取库选择: - requests库:用于发送HTTP请求,如GET、POST,是抓取网页的基本工具。 - Beautiful Soup库:用于解析HTML和XML文档,能处理复杂的页面,方便地提取数据。 - Scrapy框架:是一个快速高...

    Python数据抓取技术与实战.zip

    Python数据抓取技术是互联网时代获取大量有价值信息的重要手段,尤其在数据分析、研究以及网站维护等领域,Python以其简洁明了的语法和丰富的第三方库成为首选工具。本资料包"Python数据抓取技术与实战"旨在深入浅出...

    Python网络爬虫项目开发实战_数据抓取_编程案例解析实例详解课程教程.pdf

    总之,Python网络爬虫项目开发实战课程将涵盖从基础的网页抓取概念到高级的数据解析技术,帮助学习者掌握网络爬虫开发的关键技能,并能够应用于实际的数据获取任务。无论是对数据分析、市场研究还是内容监控有兴趣的...

    Python数据分析实战源代码

    Python提供了BeautifulSoup、Scrapy等工具,你可以学习如何构建爬虫,抓取网页数据,以及如何处理反爬策略和数据存储。 5. **MySQL连接**:数据通常存储在数据库中,因此掌握如何与数据库交互至关重要。这一章将...

    python爬虫项目实战

    8. **实战案例**:例如,你可以实战抓取电商平台的商品信息,新闻网站的新闻文章,或是社交媒体的用户数据,分析其中的模式和趋势。 9. **法律与道德**:了解并遵守相关法律法规,尊重网站的robots.txt文件,确保...

    Python爬虫抓取图片以及使用Spider模仿用户行为抓取403错误网页

    本教程将深入探讨Python爬虫的基本概念,重点在于如何抓取网页、处理图片,并解决在模拟用户行为时遇到的403 Forbidden错误。我们将通过具体的代码示例来详细解释这些知识点。 1. **Python爬虫基础**: - **网络...

    Python-Python3爬虫实战JS加解密逆向教程

    总结来说,"Python-Python3爬虫实战JS加解密逆向教程"涵盖的内容包括但不限于:使用Selenium进行动态内容抓取,JavaScript逆向工程,理解并应用加密算法,处理混淆代码,以及应对验证码和IP限制等。掌握这些技能将使...

    Python实战案例合集

    例如,你可以使用BeautifulSoup和requests库进行网页抓取,获取并处理大量网络数据;使用pandas进行数据清洗和分析,提取有价值的信息;或者使用Django或Flask框架开发Web应用,实现业务逻辑。 本合集中的PDF文档很...

    Python网络爬虫实战

    根据提供的信息,《Python网络爬虫实战》是一本适合初学者使用的Python爬虫技术书籍,它不仅能够帮助读者巩固基础知识,还能够作为一本实用工具书在实际工作中发挥作用。下面将详细介绍该书中可能涵盖的关键知识点。...

    python3网络爬虫实战

    《Python3网络爬虫实战》是一本专注于使用Python3进行网络数据抓取的实践指南,旨在帮助读者掌握网络爬虫的基础知识以及高级技巧。通过本书的学习,你可以深入了解Python3在网络爬虫领域的应用,并具备实际开发网络...

    Python网络爬虫实战胡松涛编著

    《Python网络爬虫实战》是胡松涛编著的一本深度解析Python爬虫技术的教程。这本书旨在帮助读者从零基础开始,逐步掌握Python爬虫的精髓,通过实例教学,让学习过程更加生动且富有实践性。以下是该书可能涵盖的一些...

    艾伯特Python网络爬虫实战.pdf

    《艾伯特Python网络爬虫实战.pdf》这本书的内容主要围绕Python网络爬虫的实战应用。在介绍知识点之前,我们先来解释一下什么是网络爬虫以及Python在其中的作用。 网络爬虫(Web Crawler),又称网络蜘蛛(Web ...

    python项目实战实例

    项目:AppStore数据分析 项目:人人网爬虫 项目背景与需求 项目技术文档 模拟登陆login.py 数据表单设计 第一步:抓取所有好友列表 第二步:解析所有好友信息 第三步:将好友主页页面保存 项目总结

    python+selenium动态实战:抓取京东商城信息

    在本教程中,我们将深入探讨如何使用Python编程语言与Selenium库进行动态网页抓取,以获取京东商城的商品信息。Selenium是一个强大的自动化测试工具,同时也常被用于模拟真实用户行为,处理JavaScript渲染的动态内容...

    抓取Bing 搜索引擎的搜索结果的python 脚本

    `Scrapy`是一个强大的爬虫框架,它包含了爬虫的生命周期管理、中间件、爬取调度、并发下载等功能,能帮助我们更高效、有序地进行大规模的网页抓取。 在Bing的搜索结果中,通常每个结果都包含一个链接到详情页的`<a>...

    Python网络爬虫项目开发实战_并发下载_编程案例解析实例详解课程教程.pdf

    【Python网络爬虫项目开发实战】中的并发下载技术是提高爬虫效率的关键。在传统的爬虫程序中,网页通常是顺序下载的,即一个网页下载完成后才会开始下一个网页的下载。这种方式在处理小型网站时可能足够,但对于大...

    数据科学Python语言实战.pdf

    网络爬虫是获取大量数据的重要手段,课程会教授如何编写Python代码来抓取和解析网页数据。在数据处理部分,NumPy库的ndarray对象是核心,它用于高效地处理多维数组。学员将学习创建、组合、分割数组,以及使用ufunc...

    python入门教程、python开发实战、python网络爬虫写法三部曲

    总的来说,这个三部曲涵盖了Python从入门到实践再到专业领域的全过程,适合对Python感兴趣或者准备进入相关行业的学习者。通过这些教程的学习,读者不仅可以掌握Python的基本语法,还能深入了解Python在实际开发中的...

    Python项目开发实战_网络爬虫批量采集股票数据保存到Excel中_编程案例实例课程教程.pdf

    这个实战案例旨在帮助读者掌握Python在爬虫项目中的实际应用,包括网页分析技巧、Python网络编程方法、Excel操作以及正则表达式使用等关键技能。 首先,我们需要了解爬取股票数据的基本流程。案例分为两个主要步骤...

Global site tag (gtag.js) - Google Analytics