无法过滤图像的beautifulsoup结果

时间:2017-04-25 06:39:57

标签: python beautifulsoup

我试图在网页上获取图片的网址并使用此代码:

import httplib2
from BeautifulSoup import BeautifulSoup, SoupStrainer

http = httplib2.Http()
status, response = http.request('URL')
for link in BeautifulSoup(response, parseOnlyThese=SoupStrainer('img')):
        if "visibility:hidden" not in link:
                print "IMAGE PATH: "+link['src']

我想过滤隐藏图像的链接,如:

img style="position:absolute;z-index:-3334;top:0px;left:0px;visibility:hidden;" src="https://.....

但是我无法过滤"链接"变量。如果总是通过。

链接变量是什么类型的?串?我可以将其转换为字符串类型吗? 我该怎么办? 谢谢。

编辑: 谢谢M. Leung 我尝试使用你给出的构造函数: BeautifulSoup(回复,' html.parser',parse_only = SoupStrainer(' img') 但这对我失败了:     Traceback(最近一次调用最后一次):     文件" getLinksFromPage3.py",第10行,in     对于BeautifulSoup中的链接(回复,' html.parser',parse_only = SoupStrainer(' img')):     文件" /usr/lib/python2.7/dist-packages/BeautifulSoup.py",第1522行, init     BeautifulStoneSoup。 init (self,* args,** kwargs)     TypeError: init ()得到了一个意外的关键字参数' parse_only'

2 个答案:

答案 0 :(得分:0)

首先使用tag.attrs获取标签上的attrs,然后过滤attr。以下代码工作。

此外,您应该定义哪种解析器适合该情况,将会产生更好的结果。

for link in BeautifulSoup(response, 'html.parser', parse_only=SoupStrainer('img')):
    if 'style' in link.attrs:
        if "visibility:hidden" not in link['style']:
            print link['src']
    else:
        print link['src']

答案 1 :(得分:0)

谢谢M. Leung。 我不得不改为bs4。

import httplib2
from bs4 import BeautifulSoup, SoupStrainer

http = httplib2.Http()
status, response = http.request('URL')

for link in BeautifulSoup(response, 'html.parser', parse_only=SoupStrainer('img')):
    if 'style' in link.attrs:
        if "visibility:hidden" not in link['style']:
            print link['src']
    else:
        print link['src']