Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一组URL下载单独的图像_Python_Html_Web Scraping - Fatal编程技术网

Python 从一组URL下载单独的图像

Python 从一组URL下载单独的图像,python,html,web-scraping,Python,Html,Web Scraping,我在一个文件中有一组URL和名称,如下所示: www.test.yom/something/somethingelse/Profile.aspx?id=1 John Doe www.test.yom/something/somethingelse/Profile.aspx?id=24 John Benjamin www.test.yom/something/somethingelse/Profile.aspx?id=307 Benjamin Franklin .... 每个URL页面包含普通h

我在一个文件中有一组URL和名称,如下所示:

www.test.yom/something/somethingelse/Profile.aspx?id=1
John Doe
www.test.yom/something/somethingelse/Profile.aspx?id=24
John Benjamin
www.test.yom/something/somethingelse/Profile.aspx?id=307
Benjamin Franklin
....
每个URL页面包含普通html和任意数量的文本、表格等,但在标记中始终有一个图像

我的目标是以某种方式将此图像下载到我的驱动器中,并使用第二行名称(即“johndoe.jpg”和“johnbenjamin.jpg”)对其进行重命名

有没有一个简单的方法来实现这一点?我使用UNIX命令(grep、tr、sed)从另一个页面上的原始HTML解析出URL名称文件,但我猜这需要一些更复杂的东西。现在我正在考虑Python脚本,但我不确定应该查看哪些库或从哪里开始(尽管我熟悉Python语言本身)。如果Java或任何其他语言能使过程更简单,我也会使用它。有什么建议吗


编辑:所以。。。遇到URL需要身份验证才能访问的问题。这很好,但问题是它是两步身份验证,第二步是发送到mobile的密码-(但感谢您的帮助!

您可以将链接放在列表或文件中,然后使用来获取html,然后使用来查找所需的图像,提取
src
属性并再次使用请求来下载文件。这两个库使用起来都非常简单,编写简单的脚本不会有问题:)

帮助您启动的伪代码:

url_list = ['url1', 'url2']
for url in url_list:
    html = requests.get(url)
    soup = BeautifulSoup(html)
    img_element = soup.find('img')
    image_url = img_element['src']
    requests.download(image_url) # Not sure how to download this to a file
您可以将模块与模块一起使用:

然后:

请注意,
source\u url
在extract中是可选的,但建议使用,因为它可以将相对url和图像url重写为绝对路径


提取。图像
是提取的
的第一项。图像
如果存在,或
这就是我最终绕过两步身份验证所做的。请注意,对于我拥有的URL,如果我登录到其中一个URL并在登录时单击“记住我”选项,这将避免以下方法的登录页面

  • 在Firefox上下载“保存图像”扩展。重新启动Firefox
  • 在工具->保存图像->选项中。转到“保存”选项卡。在“文件夹选项”中,选择要保存文件的文件夹。在“文件名”中,选择“使用文件名:”。输入适当的文件名
  • 在Firefox中转到“”(而不是Chrome)
  • 仅将URL复制并粘贴到文本框中。点击“提交”。加载所有选项卡后,关闭tejji.com选项卡
  • 在第一个配置文件页面上,右键单击->“保存图像”->“从所有选项卡保存图像”
  • 如果一切正常,请关闭保存提示
  • 所有图像现在都应该在您指定的文件夹中

  • 剩下的就是根据名称重命名文件(如果URL保持相同的顺序,则文件的编号顺序与名称的顺序一致),但这应该是最基本的。

    一定要看看如何解析图像标记。它还可以从开始的HTML中获取URL/名称数据,无需更多的UNIX命令!好极了。我想这正是我想要的。既然保证图像是唯一的img标记,那么BeautifulSoup会比使用正则表达式更容易吗?我想使用正则表达式比仅仅导入库要花费更多的精力…更简单、更可靠,相信我,BeautifulSoup看起来很吓人,但它的使用非常简单,看看我写的伪代码。
    pip install requests
    pip install extraction
    
    import extraction
    import requests
    
    url = "http://google.com/"
    html = requests.get(url).text
    
    extracted = extraction.Extractor().extract(html, source_url=url)
    
    print(extracted.image) # If you know that there is only one image in your page
    print(extracted.images) # List of images on page
    
    http://google.com/images/srpr/logo9w.png
    ['http://google.com/images/srpr/logo9w.png']