zoukankan      html  css  js  c++  java
  • 网络爬虫中进行数据抓取

    以下内容是《用python写网络爬虫》的读书笔记

    一、安装firebug lite

    firebug lite是一个用于在网站中查看调试html,css和javascript的有效工具。它现在可以安装在chrome和firefox浏览器上。chrome浏览器的安装教程firefox浏览器的安装教程。

    二、三种页面抓取方式

    (1)正则表达式

    正则表达式是我们进行数据获取的最基本的方式,不了解正则表达式的,可以参看正则表达式的基本用法

    我们可以先下载html数据,然后用正则表达式对html中的数据进行匹配。以下是一个简单的用法样例:

    url = "http://www.cnblogs.com/xudong-bupt/p/3586889.html"
    html = download(url)
    list = re.findall('<div class="BlogStats">(.*?)</div>', html)
    print list[0]

    这个样例的作用是能够打印出html文件中第一个<div class = "BlogStats"></div>之间的内容。

    用正则表达式来获取数据,优点是形式简单,缺点是很难获得健壮的正则表达式,当页面发生细微变化时,正则表达式可能就不起作用了。

    (2)Beautiful Soup

    在开始之前内,首先我们需要在python中安装beautifulsoup模块,我使用 pip install beautifulsoup4,来进行模块的安装。它的相关方法可查阅其官方文档

    现在我们来执行一个小样例:

    from bs4 import BeautifulSoup
    from Chapter1.Background_Research import *
    def tes_example():
        '''
        use a broken_html to test the beautiful soup
        :return:
        '''
        broken_html = "<url class=country><li>Area <li>Population</url>"
        # use beautiful soup to parse the broken_html
        soup = BeautifulSoup(broken_html, 'html.parser')
        fixed_html = soup.prettify()
        print fixed_html
    
    def find_text(url, id_name):
        '''
        find the lable text which id is equal to id_name
        :param url: the url of the html
        :param id_name: locate the special id
        :return: the text between the special label
        '''
        html = download(url)
        soup = BeautifulSoup(html, "html.parser")
        tr = soup.find(attrs={'id': id_name})
        text = tr.text
        return text
    text = find_text("http://www.cnpythoner.com/post/300.html", 'title')
    print text

    (3)Lxml

    Lxml 是基于libxml2这个xml解析库的python封装。该模块使用c语言编写,解析速度比beautiful soup更快,不过安装教程也更为复杂,附上最新的安装说明

    Lxml和beautiful soup相比有一个明显的优点就是它能够使用css选择器进行数据抽取。它已经能够实现大部分的css3属性,但是还有一部分是不支持的。具体可参看它的说明文档

    下面是Lxml使用的一个小样例:

    import lxml.html
    from Chapter1.Background_Research import download

    def test_lxml():
    '''
    use a broken_html to test the beautiful soup
    :return:
    '''
    broken_html = "<url class="country"><li>Area <li>Population</url>"
    # use beautiful soup to parse the broken_html
    parse_html = lxml.html.fromstring(broken_html)
    fixed_html = lxml.html.tostring(parse_html, pretty_print=True)
    print fixed_html
    test_lxml()

    def find_text(url, id_name):
    '''
    it can get all text of label a under the div which id is id_name

    :param url: given a url
    :param id_name: define the special id name
    :return: all text
    '''
    html = download(url)
    tree_html = lxml.html.fromstring(html)
    td = tree_html.cssselect('div#'+id_name+'> a')
    values = []
    for d in td:
    values.append(d.text_content())
    return values

    values = find_text("http://www.cnpythoner.com/post/300.html", 'bdshare')
    for value in values:
    print value
  • 相关阅读:
    VB 进程权限提升 代码
    不錯的超超鏈接title效果以及一個輸入flash的js
    关于用Virtual PC 2004 SP1装Red Hat Linux花屏的问题
    apache2+mysql5+php5在linux下的安装过程
    DEBUG命令详解
    VBKiller使用说明
    Intel奔騰系列CPU指令全集(包含P4)
    微代码和汇编语言的区别
    用DELPHI为ASP开发文件上载组件
    一個不錯的超鏈接的title效果
  • 原文地址:https://www.cnblogs.com/whatyouknow123/p/7725119.html
Copyright © 2011-2022 走看看