красивый суп питон - собери имена / найди - найди все - PullRequest
0 голосов
/ 13 мая 2018

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

Я хочу получить только 1 ссылку каждый раз, и то, что написано в h1 и p.

article_name_list = soup.find(class_='turbolink_scroller')
#find all links in the div
article_name_list_items = article_name_list.find_all('article')

#loop to print all out
for article_name in article_name_list_items:
    names = article_name.find('h1')    
    color = article_name.find('p')
    print(names)
    print(color)

вывод:

<h1><a class="name-link" href="/shop/jackets/gw1diqgyr/km21a8hnc">Gonz Logo Coaches Jacket </a></h1>
<p><a class="name-link" href="/shop/jackets/gw1diqgyr/km21a8hnc">Red</a></p>

Я хотел бы получить на выходе: href = "blablabla" Gonz Logo Coatches Jacket Red

и каждый раз помещать его в переменную(если возможно), например link = href "blablabla" и name = "gonz logo ..." или 3 переменные с цветом в другой.

ПРАВКА Вот как выглядит страница:

<div class="turbolink_scroller" id="container" style="opacity: 1;">
  <article>
    <div class="inner-article">
      <a style="height:150px;" href="/shop/jackets/h21snm5ld/jick90fel">
    <img width="150" height="150" src="//assets.supremenewyork.com/146917/vi/MCHFhUqvN0w.jpg" alt="Mchfhuqvn0w">
    <div class="sold_out_tag" style="">sold out</div>
  </a>
      <h1><a class="name-link" href="/shop/jackets/h21snm5ld/jick90fel">NY Tapestry Denim Chore Coat</a></h1>
      <p><a class="name-link" href="/shop/jackets/h21snm5ld/jick90fel">Maroon</a></p>
    </div>
  </article>
  <article></article>
  <article></article>
  <article></article>

</div>

РЕДАКТИРОВАТЬ 2: проблема решена (спасибо)

вот решение для других:

article_name_list = soup.find(class_='turbolink_scroller')
#find all links in the div
article_name_list_items = article_name_list.find_all('article')

#loop to print all out
for article_name in article_name_list_items:
    link = article_name.find('h1').find('a').get('href')
    names = article_name.find('h1').find('a').get_text()
    color = article_name.find('p').find('a').get_text()

    print(names)
    print(color)
    print(link)

спасибо всем за ответы.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Я верю, что вы очень близки. Тем не менее, вы должны рассказать нам немного больше о структуре страницы. Все article s структурированы в одном и том же h1> a, p> структуре?

Если предположить эту структуру, то должно работать следующее:

names = article_name.find('h1').find('a').get('href')    
color = article_name.find('p').find('a').get_text()
0 голосов
/ 13 мая 2018

Полагаю, вы хотите поместить каждый из них в отдельные списки.

name_list = []
link_list = []
color_list = []
for article_name in article_name_list_items:
    names = article_name.find('h1').find('a', class_ = 'name-link').get_text()    
    links = article_name.find('p').find('a', class_ = 'name-link').get('href')
    colors = article_name.find('p').find('a', class_ = 'name-link').get_text()

    name_list.append(names)
    link_list.append(links)
    color_list.append(colors)

Не совсем уверен, как выглядит article_name_list_items, но names даст вам текст <h1> элемента, links даст вам href элемента <p>, а colors получить текст элемента <p>.

Вы также можете включить все элементы в список списков, который будет следующим (инициализировать новый список list_of_all и заменить 3 добавления списка одним добавлением во второй строке):

list_of_all = []
list_of_all.append([names, links, colors])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...