Python BeautifulSoup циклически просматривая данные таблиц

Нет, похоже, что вы делаете это неправильно. Соединения MongoDB являются «клиентской стороной». Очень похоже на то, что вы сказали:

На данный момент я получаю комментарии, соответствующие моим критериям, затем выясняя все uid в этом наборе результатов, получая пользовательские объекты и объединяя их с комментариями. Похоже, я делаю это неправильно.

1) Select from the collection you're interested in.
2) From that collection pull out ID's you need
3) Select from other collections
4) Decorate your original results.

Это не «реальное» соединение, но на самом деле оно намного полезнее, чем соединение SQL, потому что вам не нужно иметь дело с дубликатом строки для «многих» сторонних объединений, вместо этого вы украшаете первоначально выбранный набор.

На этой странице много глупостей и FUD. Оказывается, 5 лет спустя MongoDB все еще есть.

2
задан Lucas 17 January 2019 в 14:48
поделиться

3 ответа

Вам нужно использовать find_all (возвращает список) вместо find (возвращает один элемент):

for i, j in zip(item_details.find_all('div', class_='item-details'), item_details.find_all('ul', class_='item-type')):
    print(i.h3.a.text, " - ", j.span.text)

Вывод:

Veil of Steel  -  Magic Helm
Leoric's Crown  -  Legendary Helm
Harlequin Crest  -  Magic Helm
The Undead Crown  -  Magic Helm
...

или более читаемый формат:

names = item_details.find_all('div', class_='item-details')
types = item_details.find_all('ul', class_='item-type')

for name, type in zip(names, types):
    print(name.h3.a.text, " - ", type.span.text)
0
ответ дан Andersson 17 January 2019 в 14:48
поделиться

Это работает:

sauce = urllib.request.urlopen('https://us.diablo3.com/en/item/helm/').read()
soup = bs.BeautifulSoup(sauce, 'lxml')

item_names = soup.find_all('div', class_='item-details')
for ele in item_names:
   print(ele.h3.a.text)

item_type = soup.find_all('ul', class_='item-type')
for ele in item_type:
    print(ele.span.text)

Почему ваш код не работал:

Похоже, что вместо перебора всех элементов ваш код продолжал извлекать один и тот же элемент (find_all для всех элементы).

0
ответ дан Aakash Dusane 17 January 2019 в 14:48
поделиться

Вы можете сделать это в одном цикле раздела сведений, а не сохранять их в другом списке и сопоставлять их с

item_details = []
for sections in soup.select('.item-details'):
    item_name = sections.select_one('h3[class*="subheader-"]').text.strip()  # partial match subheader-1, subheader-2, ....
    item_type = sections.select_one('ul[class="item-type"]').text.strip()
    item_details.append([item_name, item_type])

print(item_details)

выводом

[['Veil of Steel ',' Магический шлем '], ["Корона Леорика", "Легендарный шлем"], ....

0
ответ дан Tobey 17 January 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: