Как извлечь элементы привязки, вложенные в несколько элементов деления - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь извлечь якорные элементы из моего красивого супового объекта с общим классом attr, каждый из которых вложен в несколько делений. Деления повторяются и разделяются некоторыми сценариями

Я пытался использовать общие атрибуты класса в элементах привязки для их извлечения

Код, который я получил:

<div id='container'>
<div class='nested'>
<a href='some url' class='link'>
</a>
</div>
</div>

#some scripts ....

<div id='container'>
<div class='nested'>
<a href='some url' class='link'>
</a>
</div>
</div>

Что я пробовал:

import requests, bs4, webbrowser

webpage=requests.get('some url')
webpage.raise_for_status()
soup=bs4.BeautifulSoup(webpage.text)
links=soup.select('.link a')

for i in range(0,5):
  webrowser.open('intial site url'+links[i].get('href'))
print(links)

Вкладки не открывались. Ссылки на печать давали пустой список

Ответы [ 2 ]

1 голос
/ 27 мая 2019

.link a сделает все дочерние теги a с родителями, имеющими класс link. Пробел между ними на самом деле является css-комбинатором-потомком , что означает, что lhs является родительским, а rhs - дочерним. Удалите пробел, чтобы применить к тому же элементу. Обратите внимание, что вам нужно извлечь атрибут href из совпавших тегов.

links = [item['href'] for item in soup.select('a.link')]

Если вам нужно указать родительский div по классу, тогда это

.nested a.link

или более просто

.nested .link
1 голос
/ 27 мая 2019

Замените свой код линии:

links=soup.select('.link a')

Кому

  links=soup.find_all('a',{'class':'link'})
  print(links)

O / P:

[<a class="link" href="some url">
</a>, <a class="link" href="some url">
</a>]

Получить форму href a тег:

for link in links:
  href = link['href']
  print(href)
...