Python, если строка содержится в href

1

Это мой код на Python.

r = requests.get("myurl")
data = r.text
soup = BeautifulSoup(data, "lxml")
texttmp = ""
for link in soup.find_all('a'):
    image = link.get("href")
    if ".jpg" in image:
        print(image)

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

TypeError                                 Traceback (most recent call last)
<ipython-input-35-618698d3a2d7> in <module>()
     11 for link in soup.find_all('a'):
     12     image = link.get("href")
---> 13     if ".jpg" in image:
     14         print(image)
     15 

TypeError: argument of type 'NoneType' is not iterable
  • 3
    Очевидно, что link.get('href') is None . Нам нужно больше информации, чтобы точно сказать вам, почему.
Теги:
web-scraping

2 ответа

3

То, что он говорит вам, это то, что ни одна строка href не может быть найдена. Следовательно, вам нужно проверить None прежде чем вы увидите, что ".jpg" находится в теге изображения:

 if image and ".jpg" in image:

Однако это не единственное, что происходит. Вы также пытаетесь get доступ к найденным узлам ссылок. Вы должны проверить, что a имеет атрибут href (некоторые нет, см. Пример Bootstrap!):

 for link in soup.find_all('a'):
   if link.has_attr('href'):
     #rest of code

См. Этот пост SO и другие, подобные ему (сначала я должен был пойти в googled.)

1

В дополнение к представлению ссылок на другие ресурсы html anchor tags <a...> также могут выступать в качестве именованного маркера для местоположения в документе, так называемые теги имен <a name=whatever>, позволяя отмеченному местоположению быть цель ссылки, которая использует фрагмент в URL http://example.com/#whatever

Вероятно, это то, с чем вы столкнулись, поскольку теги имен не имеют href для указания ресурса, на который они указывают.

Вам нужно будет проверить, вернет ли href None и пропустит этот возвращенный тег, если он этого не сделает.

Удачи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню