Я пытаюсь получить URL для изображений на веб-странице и использовать этот код:

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://.....

Но я не могу фильтровать переменную "link". Если всегда пройти.

Какого типа переменная ссылка? строка? Могу ли я преобразовать его в строковый тип? Как мне это сделать, пожалуйста? Спасибо.

Редактировать: Спасибо М. Леунг Я попытался использовать конструктор, который вы дали: BeautifulSoup (ответ, 'html.parser', parse_only = SoupStrainer ('img') но мне это не удается Traceback (последний вызов был последним): Файл "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) Ошибка типа: init () получил неожиданный аргумент ключевого слова 'parse_only'

0
chris3389 25 Апр 2017 в 09:39

2 ответа

Лучший ответ

Используйте tag.attrs, чтобы сначала получить атрибуты тега, затем отфильтровать атрибуты. Следующий код работает.

Кроме того, вы должны определить, какой синтаксический анализатор подходит для этого случая, будет получен лучший результат.

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
M. Leung 25 Апр 2017 в 10:07

Спасибо, М. Люн. Мне также пришлось перейти на 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']
0
chris3389 25 Апр 2017 в 21:08