Я пытаюсь создать скребок, который собирает текст с веб-страницы. Я рассматриваю два конкретных div с разными именами классов («product-image» и «product-details»). Я просматриваю их, хватая текст от каждого тега «a» и «dd» внутри div.Объединение нескольких строк вывода в одну строку с помощью BeautifulSoup findAll с несколькими классами/тегами
Стоит отметить, что это первая программа, Python я когда-либо написанный ...
Вот мой код:
list_of_rows = []
for row in soup.findAll(True, {"class":["product-image", "product-details"]}):
list_of_cells = []
for cell in row.findAll(['a', 'dd']):
text = cell.text.replace(' ', '')
list_of_cells.append(text)
list_of_rows.append(list_of_cells)
Когда я распечатать list_of_rows, я получаю следующий результат для каждого прохода в цикле:
[цена]
[название] [автор], [издатель], [л], [л], [л]
[цена] поступает из блока «product-image» div. [название] и т. Д. происходит из блока div «product-details».
Так что, в принципе, findAll и цикл, который я написал, выводят разные строки для каждого блока div, который я просматриваю. Результат я хочу, чтобы одна строка вывода для обоего блоков, как это:
[цена], [название] [автор], [издатель], [л], [л], [ blah]
Есть ли способ сделать это в текущем потоке, который у меня есть, или мне нужно разбить его на несколько циклов, потянуть данные отдельно, а затем объединить? Я прошел через Q & A на StackOverflow и других сайтах, и хотя я могу найти экземпляры контуров findAll с несколькими классами, я не могу найти примеров того, как уменьшить вывод в одну строку.
Вот фрагмент с веб-страницы, которую я разбираю. Этот фрагмент кода появляется раза 1-й в HTML я разбор, где х количество продуктов на странице:
<div class="product-image">
<a class="thumb" href="/Store/Details/life-on-the-screen/_/R-9780684833484B"><img src="http://images.bookdepot.com/covers/large/isbn978068/9780684833484-l.jpg" alt="" class="cover" />
<div class="price "><span>$</span>2.25
</div>
</a>
</div>
<div class="product-details">
<dl>
<dt><div class="nowrap"><span><a href="/Store/Details/life-on-the-screen/_/R-9780684833484B" title="Life On The Screen">Life On The Screen</a></span></div></dt>
<dd class="type"><div class="nowrap"><span><a href="/Store/Browse/turkle-sherry/_/N-4294697489/Ne-4">Turkle, Sherry</a></span></div></dd>
<dd class="type"><div class="nowrap"><a href="/Store/Browse/simon-and-schuster/_/N-4294151338/Ne-5">Simon and Schuster</a></div></dd>
<dd class="type">(Paperback)</dd>
<dd class="type">Computers & Internet</dd>
<dd class="type">ISBN: 9780684833484</dd>
<dd>List $15.00 - Qty: 9</dd>
</dl>
</div>
Любых указатели или помощь очень ценится!
Спасибо за ответ - я на самом деле удалили эту строку текста целиком из моего кода образца - это было только там для отладки, и я случайно оставил его в Что я в конечном итоге делает это выводя list_of_rows. к файлу .csv (я не стал включать этот код, потому что проблема не в том, чтобы записывать в csv, он находится в структуре list_of_rows, где каждый цикл имеет несколько строк, которые записываются для вывода вместо одного .) Надеюсь, я уточнил проблему - извините за случайный выход из кода отладки. –
Вопрос немного запутанный, все еще придумал какое-то решение, дайте мне знать об этом работает для вас – Shijo
Это работает отлично! Спасибо за помощь - я очень ценю это! –