【问题标题】:get picture from dynamic content python从动态内容python获取图片
【发布时间】:2017-01-13 16:42:24
【问题描述】:

我试图在不使用 selenium 的情况下从 url 获取图片的 href

def():
    try:
        page = urllib2.urlopen('')
    except httplib.IncompleteRead, e:
        page = e.partial              
         response = BeautifulSoup(page)
         print response
         var = response.find("div", {"id":"il_m"}).find('p')

但我得到了 None 结果。我应该怎么做才能获取 href ?

【问题讨论】:

    标签: python-2.7 selenium beautifulsoup


    【解决方案1】:

    您还可以从带有 download 属性的 anchor 标签中获取链接:

    In [2]: from bs4 import BeautifulSoup
    In [3]: import urllib2
    
    In [4]: r = urllib2.urlopen('http://icecat.us/index.php/product/image_gallery?num=9010647&id=9409545&lang=us&imgrefurl=philips.com')    
    In [5]: soup = BeautifulSoup(r,"html.parser")
    
    In [6]: print(soup.select_one("p a[download]")["href"])
    http://images.icecat.biz/img/gallery/9010647-Philips-_FP.jpg
    

    您还应该注意文本图像可能受版权保护。。在页面上。

    【讨论】:

    • 感谢您的回答,但我收到此错误“NoneType”对象没有属性“getitem
    • 你是怎么得到源码的,bs4是什么版本的?
    • 版本 4.4.0 以及我如何获取源是什么意思,
    • 我使用 urllib2 进行了更新,您可以看到它获取了 href,那么您从 urllib2 获得的源代码是什么,响应代码是什么?你也可以更新你的 bs4 版本,它已经有一年多了。
    • 我正在使用 urllib2 获取源代码,但我得到了同样的错误 'NoneType' object has no attribute 'getitem' 。我将尝试更新 bs4跨度>
    【解决方案2】:

    你没有定位正确的p标签:

    1. 首先,您要从<a> 节点而不是<p> 中提取href
    2. 找到的第一个<p> 子元素是这个<p class="il_r" id="url_domain" </p>

    您可以做的是定位第 5 个<p> 元素的<a>,即图像。一种方法是var = response.find("div", id = "il_m").find_all('p')[4].find('a')

    【讨论】:

    • 感谢您花时间撰写您的见解。我所说的“错误元素”的意思是 p 元素没有有用的链接,您需要“向下走”到 a 元素。我同意我的切片解决方案有点脆弱,而你的更简洁,你在我之前发布了,我没有看到你的答案。
    • 好吧,我比你早了将近 20 分钟,所以不完全是之前。下载属性是页面独有的,因此比尝试切片以找到正确的 p 标签更可靠,有多种方法,包括使用 data-filename 属性来获取 href,所有这些都比切片好得多,特别是如果 OP 是以不同的顺序抓取多个页面或添加另一个 p 会破坏您的切片方法。
    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2018-10-30
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多