zoukankan      html  css  js  c++  java
  • 爬虫 (3)- lxml库和贴吧图片下载案例

    lxml库

    lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

    lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

    lxml python 官方文档:http://lxml.de/index.html

    需要安装C语言库,可使用 pip 安装:pip install lxml (或通过wheel方式安装)

    百度贴吧下载图片案例

    源码下载,直接拉进PyCharm运行即可,当然你需要对应的包,下载包的教程链接

    源码展示解析

    # -*- coding:utf-8 -*-
    # Author:shifu204
    
    import urllib.request
    import urllib.parse
    from lxml import etree
    
    def loadPage(url):
        """
            作用:根据url发送请求,获取服务器响应文件
            url: 需要爬取的url地址
        """
        #print url
        #headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}
    
        request = urllib.request.Request(url)
        html = urllib.request.urlopen(request).read()
        # 解析HTML文档为HTML DOM模型
        content = etree.HTML(html)
        #print content
        # 返回所有匹配成功的列表集合
        link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
    
        for link in link_list:
            fulllink = "http://tieba.baidu.com" + link
            # 组合为每个帖子的链接
            # print(link)
            loadImage(fulllink)
    
    
    def loadImage(link):
        """
            取出每个帖子里的每个图片连接
        """
        headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
        request = urllib.request.Request(link, headers = headers)
        html = urllib.request.urlopen(request).read()
        # 解析
        content = etree.HTML(html)
        # 取出帖子里每层层主发送的图片连接集合
        link_list = content.xpath('//img[@class="BDE_Image"]/@src')
    
        # 取出每个图片的连接
        for link in link_list:
            # print(link)
            writeImage(link)
    
    def writeImage(link):
        """
            作用:将html内容写入到本地
            link:图片连接
        """
        #print "正在保存 " + filename
        headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
        # 文件写入
        request = urllib.request.Request(link, headers = headers)
        # 图片原始数据
        image = urllib.request.urlopen(request).read()
        # 取出连接后10位做为文件名
        filename = link[-10:]
        # 写入到本地磁盘文件内
        with open(filename, "wb") as f:
            f.write(image)
        print("已经成功下载 "+ filename)
    
    
    
    
    
    def tiebaSpider(url, beginPage, endPage):
        """
            作用:贴吧爬虫调度器,负责组合处理每个页面的url
            url : 贴吧url的前部分
            beginPage : 起始页
            endPage : 结束页
        """
        for page in range(beginPage, endPage + 1):
            pn = (page - 1) * 50
            #filename = "第" + str(page) + "页.html"
            fullurl = url + "&pn=" + str(pn)
            # print (fullurl)
            loadPage(fullurl)
            #print (html)
    
            print("谢谢使用")
    
    if __name__ == "__main__":
        kw = input("请输入需要爬取的贴吧名:")
        beginPage = int(input("请输入起始页:"))
        endPage = int(input("请输入结束页:"))
    
        url = "http://tieba.baidu.com/f?"
        key = urllib.parse.urlencode({"kw": kw})
        fullurl = url + key
        # print(fullurl)
        tiebaSpider(fullurl, beginPage, endPage)
    

      

  • 相关阅读:
    Digital Video Stabilization and Rolling Shutter Correction using Gyroscope 论文笔记
    Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记
    Panorama Stitching on Mobile
    Natural Image Stitching with the Global Similarity Prior 论文笔记 (三)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(二)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(一)
    ADCensus Stereo Matching 笔记
    Efficient Large-Scale Stereo Matching论文解析
    Setting up caffe on Ubuntu
    Kubernetes配置Secret访问Harbor私有镜像仓库
  • 原文地址:https://www.cnblogs.com/shifu204/p/9662482.html
Copyright © 2011-2022 走看看