2013-07-30 18 views
0

它不是一个静态的URL,但像xxx.xxx.com/xxx/run如何抓住这在Python这样的动态SRC ID

图像是基于每日状态动态地建立了一个地址的网络形象,所以我不能抓住它使用它的URL

是否有可能刺激浏览器并获得整个页面包含图像?如果那么如何?

谢谢〜

+0

你能把我们链接到网站/图像?或者至少提供更多关于它如何改变的细节? – 2rs2ts

+0

我很老婆,但我正在为公司做些事情,这不是很方便,加上它的内部地址 – Ethan

回答

2

有两种方法可以做到这一点。

  1. 使用类似Requests抢你的图片是在页面的HTML,然后使用类似pyquery解析HTML,找到你的图像的URL。这应该在大多数情况下工作,除非URL实际上不在页面的HTML中(即因为它被Javascript放在那里)。

  2. 使用诸如Splinter之类的东西,它可让您以编程方式控制实际的浏览器以获取URL。这是一个重量级的解决方案,但它像一个普通的浏览器(因为它)运行JavaScript。

第一个选项可能是这样的:从pyquery进口PyQuery

html = requests.get('http://example.com/').text 
html_q = PyQuery(html) 
image_url = html_q('img.my_image_class').attr('src') 

而第二个可能是这样的 导入请求 :

from splinter import Browser 

with Browser() as b: 
    b.visit('http://example.com/') 
    image_url = b.find_by_css('img.my_image_class')['src'] 

然后,只需下载网址就像您通常那样。


编辑:这是另一个请求示例,这次使用会话来存储由登录表单设置的cookie。您必须从登录表单中的<form><input>元素获取数据字典的URL和密钥;他们并不总是usernamepassword

import requests 
s = requests.session() 
s.post('https://example.com/dologin', data={'username': 'adam', 'password': 'hunter2'}) 
html = s.get('https://example.com/other_page').text 
# and continue as in the first example 
+0

我想要的https页是需要授权的,我已经尝试了r = requests.get('https:/ /xxx.xxx.com/xxx/run',auth=('xxx','xxx')),但我得到的html仍然是登录页面:(:) – Ethan

+0

如果你得到一个登录页面,网站isn' t使用HTTP基本身份验证,这是'auth ='的作用;它为浏览器提供一个表单,要求您在POST请求中发送您的登录详细信息,然后在该请求的响应中设置一个cookie;随后的任何请求必须包含该cookie。您有两种选择:使用请求会话来保存cookie(我已更新了答案以显示此内容),或者使用分裂填充并提交表单(如果需要,您必须执行此操作有JS参与,除非你可以逆向工程) –

+0

感谢您的耐心回答:)我是python的新手,我会继续尝试恩〜再次感谢 – Ethan