精华内容
下载资源
问答
  • python将网页转换为图片保存

    千次阅读 2020-08-07 22:42:59
    思路:使用selenium的PhantomJS将网页转换为图片。 #-*- coding=utf-8 -*- #@Time : 2020/8/7 10:08 PM #@Author : 小邋遢 #@File : tset.py #@Software : PyCharm from selenium import webdriver # 从selenium库...

    前言:我们可能会遇到将html网页转为图片,介绍我遇到的两种不同情况下的方式。
    环境:python中的selenium
    1.网站中的网页转换为图片:
    思路:使用selenium的PhantomJS将网页转换为图片。

    #-*- coding=utf-8 -*-
    #@Time : 2020/8/7 10:08 PM
    #@Author : 小邋遢
    #@File : tset.py
    #@Software : PyCharm
    
    from selenium import webdriver  # 从selenium库导入webdirver
    #截取网页照片函数
    def screen_shot(url,png_name):
        # 使用webdirver.PhantomJS()方法新建一个phantomjs的对象,这里会使用到phantomjs.exe,环境变量path中找不到phantomjs.exe,则会报错
        brower = webdriver.PhantomJS()
        # 使用get()方法,打开指定页面。注意这里是phantomjs是无界面的,所以不会有任何页面显示
        brower.get(url)
        # 设置phantomjs浏览器全屏显示
        brower.maximize_window()
        # 使用save_screenshot将浏览器正文部分截图,即使正文本分无法一页显示完全,save_screenshot也可以完全截图
        brower.save_screenshot(png_name)
        # 关闭phantomjs浏览器,不要忽略了这一步,否则你会在任务浏览器中发现许多任务
        brower.close()
    if __name__ == '__main__':
        url ="https://news.163.com/20/0807/19/FJEUBJJU0001899O.html"
        screen_shot(url,'1.png')
    

    效果如下:
    在这里插入图片描述

    2.将本地的文件夹下的html文件保存为图片。

    #-*- coding=utf-8 -*-
    #@Time : 2020/8/7 7:55 PM
    #@Author : 小邋遢
    #@File : get_image.py
    #@Software : PyCharm
    
    """
    将html页面转换为图片
    """
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import os
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--start-maximized')
    path = os.getcwd()
    filename = path + "/data/train/article/img/"
    
    
    for i in range(60):
        url = "file://(你的路径,如/user,记住这里是三个/)" + "{}".format(i+1) +".html"
        print(url)
        driver = webdriver.Chrome(options=chrome_options)
        driver.get(url)
        # 将该页面的展开到最大
        width = driver.execute_script("return Math.max(document.body.scrollWidth,document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);")
        height = driver.execute_script("return Math.max(document.body.scrollHeight, document.body.offsetHeight,document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);")
        driver.set_window_size(width,height)
        
        driver.save_screenshot(os.path.join(filename,str(i+1)+'.png'))
        driver.close()
    
    

    结果如下图:
    在这里插入图片描述

    展开全文
  • 最近接到公司市场部的需求:提供一个Excel,里面有一些新闻链接地址,需要链接网页保存为图片,而selenium只能截屏当前屏幕,做不到整个网页,经过调研最终选择了PhantomJS。 二、PhantomJS介绍 PhantomJS是...
    
     

    一、项目描述
            最近接到公司市场部的需求:提供一个Excel,里面有一些新闻链接地址,需要将链接网页保存为长图片,而selenium只能截屏当前屏幕,做不到整个网页,经过调研最终选择了PhantomJS。

    二、PhantomJS介绍
            PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如前端无界面自动化测试(需要结合Jasmin)、网络监测、网页截屏等。       

            PhantomJS官方地址:http://phantomjs.org/。

            PhantomJS官方API:http://phantomjs.org/api/。

            PhantomJS官方示例:http://phantomjs.org/examples/。

            PhantomJS GitHub:https://github.com/ariya/phantomjs/。

    三、详细代码如下:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import os,re
    
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    import time
    from urllib3.connectionpool import xrange
    from openpyxl import load_workbook
    from multiprocessing import Pool
    from selenium.common.exceptions import TimeoutException
    
    
    
    def get_excel():
        news = []
        try:
            # 打开一个workbook
            wb = load_workbook(filename='天津20190110-4.xlsx')
            # 获取当前活跃的worksheet,默认就是第一个worksheet
            ws = wb.active
            max_row = ws.max_row  # 获取已有行数
            list_abc = ['A', 'B', 'C', 'D', 'E']
            with open('news.txt','a') as f:
                for l in range(1, max_row):
                    row = ''
                    for column in list_abc:
                        if column != 'E':
                            sss = '{}{}'.format(column, str(l))
                            row_l = ws[sss].value
                            if type(row_l) not in (str, int):
                                row_l = row_l.strftime('%Y%m%d%H%M%S')
                            elif type(row_l) == int:
                                row_l = str(row_l)
                            row = row + '-' + row_l
                        else:
                            sss = '{}{}'.format(column, str(l))
                            row_l = ws[sss].value
                            if type(row_l) not in (str, int):
                                row_l = row_l.strftime('%Y%m%d_%H%M%S')
                            elif type(row_l) == int:
                                row_l = str(row_l)
                            row = row + '@@@@@' + row_l
                    if "http" in row:
                        print(row.strip('-').replace(" ", ''))
                        news.append(row.strip('-').replace(" ", ''))
                    #print(row.strip('-').replace(" ", ''))
        except Exception as e:
            print(e)
        return news
    
    
    def screenshot(url):
        title,base_url = url.split("@@@@@")
        rstr = r"[\/\\\:\*\?\"\<\>\|]"
        title = re.sub(rstr, "",title.replace(" ", '')).replace("\n",'').replace(" ", '')
        dcap = dict(DesiredCapabilities.PHANTOMJS)
        dcap["phantomjs.page.settings.userAgent"] = (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36")
        browser = webdriver.PhantomJS(executable_path=r"C:\installed\phantomjs-2.1.1-windows\bin\phantomjs.exe",
                                      desired_capabilities=dcap)  # 启动时添加定制的选项
    
        browser.set_window_size(1200, 900)
        browser.maximize_window()
        browser.set_page_load_timeout(20)
        try :
            browser.get(base_url)
        except TimeoutException:
            print(title + "@@@@@" + base_url + "!")
    
        time.sleep(10)
    
        # 将页面的滚动条拖到最下方,然后再拖回顶部
        browser.execute_script("""
                    (function () {
                        var y = 0;
                        var step = 100;
                        window.scroll(0, 0);
                        function f() {
                            if (y < document.body.scrollHeight) {
                                y += step;
                                window.scroll(0, y);
                                setTimeout(f, 100);
                            } else {
                                window.scroll(0, 0);
                                document.title += "scroll-done";
                            }
                        }
                        setTimeout(f, 1000);
                    })();
                """)
        for i in xrange(30):
            if "scroll-done" in browser.title:
                break
        time.sleep(5)
        if os.path.exists("C:\case" + "/pic/"):
            pass
            #print("C:\case" + "/pic/"+ "已经存在")
        else:
            os.makedirs("C:\case" + "/pic/")
        try:
            browser.save_screenshot("C:\case" + "/pic/" + title + '.png')
        except:
            print(title + "@@@@@" + base_url)
        browser.quit()
    
    
    if __name__ == '__main__':
        news = get_excel()
        print(len(news))
        pool = Pool(16)
        data_list = pool.map(screenshot, news)
        pool.close()
        pool.join()
        print("finish")

     

    展开全文
  • 利用Python爬取网页中的图片内容,并其转换pdf格式的文件。
  • pyecharts生成的网页图像如果直接截图,图片分辨率较低,不适合用于演示。因此可以考虑其转换jpg等格式使用。网上搜到的大部分采用pyecharts-snapshot方式来进行转换。通常的方法是: (1)安装phantomjs (下载...

    pyecharts生成的网页图像如果直接截图,图片分辨率较低,不适合用于演示。因此可以考虑将其转换为jpg等格式使用。网上搜到的大部分采用pyecharts-snapshot方式来进行转换。通常的方法是:

    (1)安装phantomjs (下载地址:http://phantomjs.org/download.html),这个版本相对固定,一般不需考虑版本问题。

    (2)安装node.js (我的电脑上一直装有node.js,因此不确定该安装是否必须) https://nodejs.org/en/download/

    (3)安装pyecharts-snapshot

    pip install pyecharts-snapshot
    (4)使用snapshot进行转换

    复制代码
    from pyecharts import Line, Pie, Grid
    from pyecharts_snapshot.main import make_a_snapshot

    attr = [“衬衫”, “羊毛衫”, “雪纺衫”, “裤子”, “高跟鞋”, “袜子”]
    v1 = [5, 20, 36, 10, 10, 100]
    v2 = [55, 60, 16, 20, 15, 80]
    line = Line(“折线图示例”)
    line.add(“商家A”, attr, v1, mark_point=[“average”])
    line.add(“商家B”, attr, v2, is_smooth=True, mark_line=[“max”, “average”])
    line.render(‘test.html’)

    make_a_snapshot(‘test.html’, ‘test.pdf’)
    复制代码
    然而,不幸的是,我照搬这种方法,程序运行没有任何错误提示,但是出现两个警告信息:

    RuntimeWarning: coroutine ‘make_a_snapshot’ was never awaited
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback

           然后,没有写任何文件!几经搜索,发现问题出在python版本上,据pyecharts (https://github.com/pyecharts)github社区中明确表示上述方法不支持python3.6 3.7等版本。可以使用snapshot-phantomjs替代。
    
        (万恶的版本问题,不知道有多少初学者因为版本问题而从入门到放弃了。反正笔者当年安装keras、TensorFlow等各种版本切换,差点就疯了。不过坚持下来,会发现多解决一些问题,积累一些经验,在遇到技术问题,心里就没有刚开始那么紧张和无助了)。
    
         下面我就直接安装。因为已经安装了phantomjs 和node.js了,所以不确定除了phantomjs,是否还需要node.js
    
        (1)还是先安装snapshot-phantomjs。     
    

    pip install snapshot-phantomjs
    我是使用的清华镜像,所以pip install的速度还是飞快的。如果安装速度慢的,可以考虑使用国内镜像。 当然,高手也可以直接在GitHub上下载源文件(https://github.com/pyecharts/snapshot-phantomjs)。

       (2)当然就是使用了。下面是使用的基本结构:
    

    from snapshot_phantomjs import snapshot
    from pyecharts.render import make_snapshot

    make_snapshot(snapshot,".html",".svg")#生成svg图片
    至此,大功告成了。在snapshot.py文件中可以看到,它支持的文件格式有如下几种。

    复制代码
    PNG_FORMAT = “png”
    JPG_FORMAT = “jpeg”
    GIF_FORMAT = “gif”
    PDF_FORMAT = “pdf”
    SVG_FORMAT = “svg”
    EPS_FORMAT = “eps”
    B64_FORMAT = “base64”
    复制代码
    因此,在输出的文件后缀名中,要严格按照上面的几个字符串来写,不然会有错误提示。

    展开全文
  • 记录爬虫利用pyquery爬虫保存图片时遇到的一些问题: ...2.(PIL) Image.save保存图片后,图片大小0KB 解决办法:设置quality参数 im.save(img_name, quality=95) 3.Inches(self.px_width / self.hor...

    记录爬虫利用pyquery爬虫保存图片时遇到的一些问题:

    1. cannot write mode P as JPEG

    解决办法:将模式“P”转化为“RGB”模式 

    if img.mode == "P":
        img = img.convert('RGB')

    2. (PIL) Image.save保存图片后,图片大小为0KB

    解决办法:设置quality参数

    im.save(img_name, quality=95)

    3. Inches(self.px_width / self.horz_dpi) ZeroDivisionError: division by zero

    解决办法:这边是由于dpi为0导致的报错,修改图片的dpi后解决

    源码的解释:

            Return a new picture shape added in its own paragraph at the end of
            the document. The picture contains the image at
            *image_path_or_stream*, scaled based on *width* and *height*. If
            neither width nor height is specified, the picture appears at its
            native size. If only one is specified, it is used to compute
            a scaling factor that is then applied to the unspecified dimension,
            preserving the aspect ratio of the image. The native size of the
            picture is calculated using the dots-per-inch (dpi) value specified
            in the image file, defaulting to 72 dpi if no value is specified, as
            is often the case.

     部分代码:

    with open(save_path, 'wb') as f:
        res = requests.get(picture_url).content  
        f.write(res)
        f.close()
    im = ImagePIL.open(save_path) 
    if im.mode == "P":
        im = im.convert('RGB')
    save_path_modify = save_path.replace('.jpg', 'modify.jpg')
    im.save(save_path_modify, dpi=(300, 300), quality=100)
    document.add_picture(save_path_modify, width=Inches(5))

     

    展开全文
  • 用requests 模块做了个简单的爬虫小程序,博客的一篇文章以及图片保存到本地,文章格式存'.html'。当文章保存到本地后,图片的连接可能是目标站点的绝对或者相对路径,所以要是想在本地也显示图片,需要将保存...
  • 最近从网页上摘下来的资源有好多webp格式的图片,需要转为png或jpg,之前也没怎么看过python,稍微看了一下写了个小工具,能够同级目录下所有webp格式的图片全部转为png或者jpg,博主是在python2.7环境下做的开发...
  • 图表发布到独立的网页上,在Jupyter笔记本中显示或保存为html文件 1.安装点安装motionchart 2.进口从motionchart.motionchart导入MotionChart,MotionChartDemo 3.测试MotionChartDemo() 4.使用pandas数据框中...
  • 最近写了个python抓取必应搜索首页http://cn.bing.com/的背景图片图片更换我的电脑桌面的程序,在正则匹配图片url时遇到了匹配失败问题。 要抓取的图片地址如图所示: 首先,使用这个pattern reg = re....
  • 这里实现了一个最简单的爬虫,抓取静态非登录类型的网页图片,这里以慕课网python专题页面例实现,并抓取到的图片保存到项目根目录下,适合对爬虫有一点了解的同学,也可以看更基础的代码: ...
  • 本篇使用selenium,phantomJS和python制作的一个示例,把某个网页整体保存为一个图片文件。 简单介绍下,selenium是一个开源的用于测试web程序的工具,当然,如果你要执行一些工作量很大的web程序,一定少不了它...
  • 简单的抓取网页: import urllib.request url="http://google.cn/" response=urllib.request.urlopen(url) #返回文件对象page=response.read() 直接URL保存为本地文件: import urllib.request url="...
  • 简单的抓取网页:import urllib.request url="http://google.cn/" response=urllib.request.urlopen(url) #返回文件对象page=response.read() 直接URL保存为本地文件:import urllib.request url=...
  • python爬虫,爬取网页内容并保存到指定文件(实例) python爬虫,爬出豆瓣书摊的书籍列表以及图片,还有连接。当然还可以相关代码封装成函数,使用递归调用就可以无限爬下去。 #导包,requets可以福爬取网页,...
  • 简单的抓取网页: import urllib.request url="http://google.cn/" response=urllib.request.urlopen(url) #返回文件对象page=... 直接URL保存为本地文件: import urllib.request url="http://www.x...
  • Python批量爬取某图片网站图片

    千次阅读 2017-10-09 11:36:58
    在我们日常上网浏览网页的时候,...本文python批量爬取某图片网站的图片为例,演示如何批量保存某网站的图片。以爬取美女图片例:http://www.mm131.com/ 一、获取网站页面数据def getHtml(url): page = url
  • 表格或者图表后截图保存为PDF或图片,发送到通讯软件中 GEO程序的开发,可以把地图和上面的自定义标记截图下来,以图片形式嵌入到自己应用中,这样就不需要集成地图SDK了 网站的定期自动化快照,可以保留网站变化...
  • 接下来的问题就是 如何保存这个图片,使得它可以被服务端调用,传到网页上。 方法一: 用MATLAB的saveas函数,这个办法可以在MATLAB中实现,但是当用Python调用时,就行不通了,我也不知道啥。哎~~~ 方法二 用...
  • python爬取图片

    2021-04-28 19:22:08
    baidu图片打开 ——发现是瀑布流,此时可以改成分页模式 index改flip 就可以改分页模式了 ...# 思路:拿到目标url 获取网页源码 获取图片url地址 保存图片 url ='https://image.baidu.com/search/flip?tn=ba
  • python-URL转jpg图片

    2019-01-10 17:14:00
    问题描述 有图片地址,可以在网页打开 URL:...在内存中将图片url打开,编码为base64,在对这个编码进行解码为图片进行保存即可 import os,base64...
  • Python爬虫之抓取网络图片

    千次阅读 2015-08-09 14:17:07
    以百度图片首页例,首页如下图所示,网页上有一些图片,我们的目的就是这些图片保存到本地。 2.源码 #coding=utf-8 #version:python 2.7 import urllib import re #step1.获取整个页面的数据 url=...
  • 版本 : python 3.0 框架 : flask 网页解析库 : PyQuery 数据库 mongodb 抓取百度新闻 关键字公安 通过flask,构建服务器,托管从网上下载的图片。 通过定时任务,每60秒抓取最新新闻数据。 初始抓起第一页。 ...
  • 将网页代码保存为html文件,通过本代码即可爬取出网页中图片的url,对于小白来说十分容易看懂原理,快来下载吧
  • 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。  我们最常规的做法就是通过鼠标右键,选择另存。但有些图片鼠标右键...
  • 爬取目标包括以下内容,爬取内容以表格的形式保存为CSV文件。 标题 图片网址 链接 XXX http:XXX.jpg http:XXX.shtml 二、技术路径 使用requests、re、bs4、csv等库进行网页请求、网页分析、内容查找及...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

python将网页保存为图片

python 订阅