Атрибут 'None' при разборе с Beautiful Soup - PullRequest
0 голосов
/ 19 ноября 2018

Я начинаю с Python и BeautifulSoup.Я хочу очистить веб-сайт с помощью BS, и я не понимаю мой результат кода и использование find и find_all.Я хочу получить URL в теге href.

<div class="xBRiJc">
<a href="https://play.google.com/store/apps/collection/cluster? 
 clp=igNLChkKEzc4NDcxODQ2MTE5MjkxMDc4NTgQCBgDEiwKJmFhZGVtby5zdXBlcmF3ZXNvbWUudHYuYXdlc29tZWFkc2RlbW8yEAEYAxgB:S:ANO1ljKZ36s&amp;gsr=Ck6KA0sKGQoTNzg0NzE4NDYxMTkyOTEwNzg1OBAIGAMSLAomYWFkZW1vLnN1cGVyYXdlc29tZS50di5hd2Vzb21lYWRzZGVtbzIQARgDGAE%3D:S:ANO1ljKKOPI"> .   
 <h2 class="C7Bf8e bs3Xnd">SuperAwesome LTD</h2></a></div>

Вот мой код python:

    developer_link = bs.find("div",{"class":"xBRiJc"})
    print(developer_link.get('href'))

Почему результат моей команды print 'Нет' ине URL в теге href?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы определяете developer_link как тег <div>, содержащий ссылку, а не саму ссылку. Поскольку сам тег div не имеет параметра "href", developer_link.get('href') вернет None. Так что вам просто нужно сделать шаг вперед:

>>> pagecode = """
... <div class="xBRiJc">
... ... <a href="https://play.google.com/store/apps/collection/cluster?
... ...  clp=igNLChkKEzc4NDcxODQ2MTE5MjkxMDc4NTgQCBgDEiwKJmFhZGVtby5zdXBlcmF3ZXNvbWUudHYuYXdlc29tZWFkc2RlbW8yEAEYAxgB:S:ANO1ljKZ36s&amp;gsr=Ck6KA0sKGQoTNzg0NzE4NDYxMTkyOTEwNzg1OBAIGAMSLAomYWFkZW1vLnN1cGVyYXdlc29tZS50di5hd2Vzb21lYWRzZGVtbzIQARgDGAE%3D:S:ANO1ljKKOPI"> .
... ...  <h2 class="C7Bf8e bs3Xnd">SuperAwesome LTD</h2></a></div>
... ... """
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(pagecode, 'lxml')
>>> div = soup.find("div", class_="xBRiJc")
>>> link = div.find("a")
>>> print(link.get('href'))
https://play.google.com/store/apps/collection/cluster?
...  clp=igNLChkKEzc4NDcxODQ2MTE5MjkxMDc4NTgQCBgDEiwKJmFhZGVtby5zdXBlcmF3ZXNvbWUudHYuYXdlc29tZWFkc2RlbW8yEAEYAxgB:S:ANO1ljKZ36s&gsr=Ck6KA0sKGQoTNzg0NzE4NDYxMTkyOTEwNzg1OBAIGAMSLAomYWFkZW1vLnN1cGVyYXdlc29tZS50di5hd2Vzb21lYWRzZGVtbzIQARgDGAE%3D:S:ANO1ljKKOPI

Хотя, глядя на этот пример, я предполагаю, что класс div - это то, что генерируется динамически. Если это так, то класс div не может быть «xBRiJc» при повторном посещении страницы, что означает, что он не является надежным идентификатором ссылки. Если вы просто пытаетесь получить первую ссылку, текст которой содержит «SuperAwesome LTD», вы можете использовать некоторые приемы регулярных выражений, чтобы получить ссылку, основанную только на tht. Но если вы знаете, что ваша ссылка имеет тег H2 прямо внутри, фактический текст которого «SuperAwesome LTD», то вы можете сделать это:

t = soup.find('h2')
print(t.parent.get('href'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...