Это мой код на 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
То, что он говорит вам, это то, что ни одна строка 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.)
В дополнение к представлению ссылок на другие ресурсы html anchor tags <a...>
также могут выступать в качестве именованного маркера для местоположения в документе, так называемые теги имен <a name=whatever>
, позволяя отмеченному местоположению быть цель ссылки, которая использует фрагмент в URL http://example.com/#whatever
Вероятно, это то, с чем вы столкнулись, поскольку теги имен не имеют href для указания ресурса, на который они указывают.
Вам нужно будет проверить, вернет ли href None и пропустит этот возвращенный тег, если он этого не сделает.
Удачи.
link.get('href') is None
. Нам нужно больше информации, чтобы точно сказать вам, почему.