2017-04-25 42 views
0

我试图让网页上的图像的URL,并使用此代码的结果:不能过滤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.梁 我试着用你给的构造函数: BeautifulSoup(响应, 'html.parser',parse_only = SoupStrainer( 'IMG') 但这种失败对我来说: 回溯(最近调用最后一次): 文件“getLinksFromPage3.py”,第10行,在 中用于链接BeautifulSoup(响应,'html.parser',parse_only = SoupStrainer('img')): 文件“/ usr/lib/python2.7/dist-packages/BeautifulSoup.py“,行1522,在init BeautifulStoneSoup。init(self,* args,** kwargs) 类型错误:初始化()得到了一个意想不到的关键字参数“parse_only”

+0

在if语句中:你是否尝试过''link ['style']''? –

+0

请分享网址 –

+0

在BeautifulSoup文档中:https://www.crummy.com/software/BeautifulSoup/bs4/doc/你有一个清晰的例子,抓住的内容是一本字典,所以我认为使用''link [''风格']''应该可以解决问题。 –

回答

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'] 
+0

感谢您的帮助。我会尽快测试它。 你是什么意思我的类型的分析器? html.parser不是正确的使用方法吗?你有什么建议 ? TypeError:__init __()得到了一个意想不到的关键字参数'parse_only' 您使用的是什么版本? – chris3389

+0

BeautifulSoup(response,'html.parser',parse_only = SoupStrainer('img')): – chris3389

0

谢谢梁先生。 我不得不改为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']