如何从URL向docx python添加图片?

如何从URL向docx python添加图片?,python,python-2.7,web-scraping,beautifulsoup,python-docx,Python,Python 2.7,Web Scraping,Beautifulsoup,Python Docx,我在使用Python Docx库时遇到问题,我从一个网站上抓取了一些图像,我想将它们添加到Docx,但我无法直接将这些图像添加到Docx,我不断收到一个错误: 文件“C:\Python27\lib\site packages\docx\image\image.py”,第46行,在 从\u文件 将open(路径“rb”)作为f:IOError:[Errno 22]无效模式(“rb”)或文件名: '' 这是我的代码: import urllib import requests from bs4 im

我在使用Python Docx库时遇到问题,我从一个网站上抓取了一些图像,我想将它们添加到Docx,但我无法直接将这些图像添加到Docx,我不断收到一个错误:

文件“C:\Python27\lib\site packages\docx\image\image.py”,第46行,在 从\u文件 将open(路径“rb”)作为f:IOError:[Errno 22]无效模式(“rb”)或文件名: ''

这是我的代码:

import urllib
import requests
from bs4 import BeautifulSoup
from docx import Document
from docx.shared import Inches
import os


    document = Document()

    document.add_heading("Megatronics Items Full Search", 0)


    FullPage = ['New-Arrivals-2017-6', 'Big-Sales-click-here', 'Arduino-Development-boards',
                'Robotics-and-Copters', 'Breakout-Boards', 'RC-Wireless-communication', 'GSM,-GPS,-RFID,-Wifi',
                'Advance-Development-boards-and-starter-Kits', 'Sensors-and-IMU', 'Solenoid-valves,-Relays,--Switches',
                'Motors,-drivers,-wheels', 'Microcontrollers-and-Educational-items', 'Arduino-Shields',
                'Connectivity-Interfaces', 'Power-supplies,-Batteries-and-Chargers', 'Programmers-and-debuggers',
                'LCD,-LED,-Cameras', 'Discrete-components-IC', 'Science-Education-and-DIY', 'Consumer-Electronics-and-tools',
                'Mechanical-parts', '3D-Printing-and-CNC-machines', 'ATS', 'UPS', 'Internal-Battries-UPS',
                'External-Battries-UPS']

    urlp1 = "http://www.arduinopak.com/Prd.aspx?Cat_Name="
    URL = urlp1 + FullPage[0]

    for n in FullPage:
        URL = urlp1 + n
        page = urllib.urlopen(URL)
        bsObj = BeautifulSoup(page, "lxml")
        panel = bsObj.findAll("div", {"class": "panel"})

        for div in panel:
            titleList = div.find('div', attrs={'class': 'panel-heading'})
            imageList = div.find('div', attrs={'class': 'pro-image'})
            descList = div.find('div', attrs={'class': 'pro-desc'})

            r = requests.get("http://upsats.com/", stream=True)
            data = r.text

            for link in imageList.find_all('img'):
                image = link.get("src")
                image_name = os.path.split(image)[1]
                r2 = requests.get(image)
                with open(image_name, "wb") as f:
                    f.write(r2.content)

                print(titleList.get_text(separator=u' '))
                print(imageList.get_text(separator=u''))
                print(descList.get_text(separator=u' '))
                document.add_heading("%s \n" % titleList.get_text(separator=u' '))
                document.add_picture(image, width=Inches(1.5))
                document.add_paragraph("%s \n" % descList.get_text(separator=u' '))

    document.save('megapy.docx')
不是全部,只是主要部分。现在,我在复制下载的图片时遇到问题,我想将其复制到docx。我不知道如何添加图片。我如何转换它?我想我必须格式化它,但我该怎么做呢

我只知道问题出在这段代码中:

document.add_picture(image, width=Inches(1.0))

如何从URL将此图像显示在docx中?我遗漏了什么?

更新

我用10张图片做了一个测试,得到了一个docx。当加载多个文件时,我在一个地方出现了错误,我通过添加一个try来重写它,除了(见下文)。最终生成的megapy.docx大了165 MB,创建大约需要10分钟

with open(image_name, "wb") as f:
    f.write(r2.content)
致:

并补充说:

try:
    document.add_picture(image, width=Inches(1.5))
except:
    pass


使用io库创建类似文件的对象

在python2和pytho3上工作的示例:

import requests
import io
from docx import Document
from docx.shared import Inches

url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Usain_Bolt_Rio_100m_final_2016k.jpg/200px-Usain_Bolt_Rio_100m_final_2016k.jpg'
response = requests.get(url, stream=True)
image = io.BytesIO(response.content)

document = Document()
document.add_picture(image, width=Inches(1.25))
document.save('demo.docx')

抱歉可能重复,但这是为了定位。我想在docx文件中显示图片,我已经从以下url下载了图片:www.arduinopak.com/但是我无法将图片放入docx文件。非常感谢。我还有一些问题。document.add_picture(image,width=Inches(1.0))
文件“C:\Python27\lib\site packages\docx\document.py”,第79行,在add_picture return run.add_picture(image_path_或_stream,width,height)
@AbbasKhan我曾经写过一个小程序,让我看看我是怎么做的,很抱歉打扰你,朋友。我是新来的。只是想让我的手准备好。@AbbasKhan我更新了我的例子,它对我很有用。您的错误消息不是说了些别的吗?
文件“C:\Python27\lib\site packages\docx\image\helpers.py”,第88行,在读取字节中引发未预期的DoffileError docx.image.exceptions.UnexpectedDoffileError
import requests
import io
from docx import Document
from docx.shared import Inches

url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Usain_Bolt_Rio_100m_final_2016k.jpg/200px-Usain_Bolt_Rio_100m_final_2016k.jpg'
response = requests.get(url, stream=True)
image = io.BytesIO(response.content)

document = Document()
document.add_picture(image, width=Inches(1.25))
document.save('demo.docx')