zoukankan      html  css  js  c++  java
  • python爬虫--案例分析之针对简单的html文件

    python爬虫常用的库:Python 库(urllib、BeautifulSoup、requests、scrapy)实现网页爬虫

    python爬虫最简单案例分析:  对一个html文件进行分解,获取里面想要的数据

    <html lang="en">
    <head>
        <meta charset="UTF-8"/>
        <title>测试bs4</title>
    </head>
    <body>
    <div>
        <p>百里守约</p>
    </div>
    
    <div class="song">
        <p>李清照</p>
        <p>王安石</p>
        <p>苏轼</p>
        <p>柳宗元</p>
        <a href="http://www.song.com/" title="赵匡胤" target="_self">
            <span>this is span</span>
            宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
        <a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
        <img src="http://www.baidu.com/meinv.jpg" alt=""/>
    </div>
    
    <div class="tang">
        <ul>
            <li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
            <li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
            <li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
            <li><a href="http://www.sina.com" class="du">杜甫</a></li>
            <li><a href="http://www.dudu.com" class="du">杜牧</a></li>
            <li><b>杜小月</b></li>
            <li><i>度蜜月</i></li>
            <li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
        </ul>
    </div>
    </body>
    </html>
    import requests
    from lxml import etree
    
    tree = etree.parse("E:odoo14odoo14myaddonsdemo.html")  # 获取html文件
    tang_info = tree.xpath("//div[@class='tang']/ul/li/a/text()") # 获取标签里的文本
    print('tang_info', tang_info) # "tang_info ['清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村', '秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山', '岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君', '杜甫', '杜牧', '凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘']" song_info = tree.xpath("//div[@class='song']/p/text()") #找到div的class 是song的,标签是p的文本 print('song_info', song_info) # 结果 "song_info ['李清照', '王安石', '苏轼', '柳宗元']" song_src = tree.xpath("//div[@class='song']/img/@src")
    #找 到div的class 是song的,的img属性
    print('song_src', song_src) # song_src ['http://www.baidu.com/meinv.jpg'] 

    song_src_a = tree.xpath("//div[@class='song']/a/text()")
    print('song_src_a', song_src_a)
    # song_src_a [' ', ' 宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱', '总为浮云能蔽日,长安不见使人愁']

    关于xpath路径的写法:XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言。

    1、/ 表示从根节点选取

    2、// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

    3、@ 选取属性 返回所指元素的文本内容。

    4、text()  返回所指元素的文本内容

    4.1、string()  函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。

    4.3、data():data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。

    注意:爬取内容都为数字的时候只能使用data(),不能使用text()或 string(),因为XPath不支持字符串做数学运算。

    案例:song_info = tree.xpath("//div[@class='song']/p/text()") #找到div的class 是song的,标签是p的文本

    5.查找页面上第一个form元素://form[1]

    6.查找页面上id为loginForm的form元素://form[@id=‘loginForm’]

    7、/bookstore/book[1]  选取属于 bookstore 子元素的第一个 book 元素。

     8、/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。

    案例2:分析结构:

    链接:首页        url = 'http://pic.netbian.com/4kqiche/'

        后面分页:url = 'https://pic.netbian.com/4kqiche/index_%s.html' % page

    import requests
    from lxml import etree
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    # url = 'http://pic.netbian.com/4kdongman/'
    
    for page in range(1, 23):
        if page == 1:
            url = 'http://pic.netbian.com/4kqiche/'
        else:
            url = 'https://pic.netbian.com/4kqiche/index_%s.html' % page
    
        response = requests.get(url=url, headers=headers)
        # response.encoding = 'utf-8'                                           #手动设定响应数据的编码
    
        page_text = response.text
    
        # 数据解析(图片地址,图片名称)
        tree = etree.HTML(page_text)
        # li_list = tree.xpath('//div[@class="slist"]/ul/li')
        li_list = tree.xpath('//ul[@class="clearfix"]/li')
        print('------------page--------------:', page)
        for li in li_list:
            # 局部内容解析一定是以./开头。etree和element都可以调用xpath
            img_src = 'http://pic.netbian.com' + li.xpath('./a/img/@src')[0]  # 解析出来的没有域名,要加上
            img_name = li.xpath('./a/img/@alt')[0]  # 不要忘记前面加点号,表示从当前li标签开始
            img_name = img_name.encode('iso-8859-1').decode('gbk')  # 处理中文乱码的通用形式
            img_data = requests.get(url=img_src, headers=headers).content
    
            img_path = 'E://DEMO//' + img_name + '.jpg'  # windows环境下://来表示
            with open(img_path, 'wb') as fp:
                fp.write(img_data)
                print(img_name, '下载成功!!!')

     

    心有猛虎,细嗅蔷薇
  • 相关阅读:
    Nginx 模块开发(1)—— 一个稍稍能说明问题模块开发 Step By Step 过程
    nginx上传模块—nginx upload module-
    解决nginx上传模块nginx_upload_module传递GET参数
    nginx upload module的使用
    Nginx Upload Module 上传模块
    产品需求分析神器:KANO模型分析法
    SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean注解源码分析与示例
    BAT、网易、京东等如何做大数据风控的?
    springboot 2.x 集成 drools 7.x
    Drools介绍与使用
  • 原文地址:https://www.cnblogs.com/1314520xh/p/14825415.html
Copyright © 2011-2022 走看看