Откуда появляется None между парсингом?

158
20 декабря 2019, 06:30
from bs4 import BeautifulSoup
import requests

def get_html():
    r = requests.get('https://www.olx.ua/rabota/kherson/?search%5Bpaidads_listing%5D=1') #Менять ссылку тут
    return r.text

soup = BeautifulSoup(get_html() , 'html.parser')
content = soup.find('div', class_='content')
right_col = content.find('div', class_='rel listHandler')
#print(right_col)
last_try = right_col.find_all('div', class_='space rel')
#print(last_try)
art_list = [] #Лист со статьями
i=0
for article in last_try:
   # link = article.find('a', class_='marginright5 link linkWithHash detailsLink')
    link = article.find('h3', class_='lheight22 margintop5')

    art_list.append([link])
print(art_list)

Вот такой происходит вывод:

<h3 class="lheight22 margintop5">
<a class="marginright5 link linkWithHash detailsLink" href="https://www.olx.ua/obyavlenie/rabota-herson-sotrudnik-na-nepolnyy-rabochiy-den-IDuLtgg.html#ddff48e9be;promoted">
<strong>Работа Херсон Сотрудник на неполный рабочий день</strong>
</a>
</h3>], [None],[<h3 class="lheight22 margintop5">
<a class="marginright5 link linkWithHa.... и тд(повторений 15)

А в чем собственно заключается проблема: Откуда появляеться none? и как достать ТОЛЬКО сылку или только текст(strong)? через .text ловлю ошибку(скорее всего из-за вышеописанного появления None)

Т.е. не могу достать только сылку или текст. достается почему то весь кусок.

Не бросайтесь камнями) Буду признателен любой помощи.

Answer 1

Попробуйте так:

r = requests.get('https://www.olx.ua/rabota/kherson/?search%5Bpaidads_listing%5D=1')
#soup = BeautifulSoup(r.text, 'html.parser')
soup = BeautifulSoup(r.text, 'lxml')
res = [(x.attrs.get('href'), x.text) for x in soup.select('div.space.rel > h3 > a')]

Результат:

In [110]: res
Out[110]:
[('https://www.olx.ua/obyavlenie/rabota-herson-sotrudnik-na-nepolnyy-rabochiy-den-IDuLtgg.html#ddff48e9be;promoted',
  '\nРабота Херсон Сотрудник на неполный рабочий день\n'),
 ('https://www.olx.ua/obyavlenie/predlagaem-vakansiyu-ofis-menedzhera-IDDpijB.html#ddff48e9be;promoted',
  '\nПредлагаем вакансию Офис менеджера\n'),
 ('https://www.olx.ua/obyavlenie/trebuyutsya-prodavtsy-konsultanty-v-otdel-kosmetiki-IDDCD7W.html#ddff48e9be;promoted',
  '\nТребуются Продавцы-консультанты в отдел косметики\n'),
 ('https://www.olx.ua/obyavlenie/voditeli-800-grn-za-smenu-v-hersone-IDBF5Rq.html#ddff48e9be;promoted',
  '\nВодители - 800 грн за смену в Херсоне\n'),
 ('https://www.olx.ua/obyavlenie/rabota-na-letniy-sezon-hersonskaya-obl-zheleznyy-port-IDDEfSe.html#ddff48e9be;promoted',
  '\nРабота на летний сезон (Херсонская обл., Железный порт).\n'),
 ('https://www.olx.ua/obyavlenie/biedronka-zh-m-semeynye-pary-12-zl-besplatnye-obedy-IDwIiIa.html#ddff48e9be;promoted',
  '\nBIEDRONKA, Ж/М, Семейные пары.12-зл,+бесплатные обеды.\n'),
 ('https://www.olx.ua/obyavlenie/rabota-shvei-IDBmHnR.html#ddff48e9be;promoted',
  '\nРабота швеи.\n'),
 ('https://www.olx.ua/obyavlenie/poznan-upakovka-salfetok-zewa-3200-zl-m-zh-pary-18-55-rabota-v-polshe-IDBxnop.html#ddff48e9be;promoted',
  '\nПознань/Упаковка салфеток ZEWA/3200 зл/М,Ж,Пары 18-55/Работа в Польше\n'),
 ('https://www.olx.ua/obyavlenie/vizazhist-stilist-pedikyur-naraschivanie-nogtey-IDDGadd.html#ddff48e9be;promoted',
  '\nВизажист, стилист, педикюр, наращивание ногтей\n'),
 ('https://www.olx.ua/obyavlenie/rabota-v-taksi-5565-na-svoem-avto-IDu9qVs.html#ddff48e9be;promoted',
  '\nработа в такси 5565 на своем авто\n'),
 ('https://www.olx.ua/obyavlenie/franchayzing-taksi-994-v-vashem-oblastnom-tsentre-IDwQ2ei.html#ddff48e9be;promoted',
  '\nфранчайзинг такси 994 в вашем областном центре\n'),
...
]
READ ALSO
Как работает ASYNC и DEFER

Как работает ASYNC и DEFER

уважаемые форумчане, хочу задать вопрос о том, почему у меня код работает не так как я хочуУ меня есть документ HTML

156
Поймать свайп на JS

Поймать свайп на JS

Есть объект <div>Как поймать действие на мобильных устройствах, когда объект тянут вверх или вниз?

171
Определенное число вводимых символов в inputmask

Определенное число вводимых символов в inputmask

Необходимо задать в поле для ввода url префикс http:// и количество например 40 символовПри вводе в инпут должно быть так http://какаятоссылка

132
Есть ли возможность разрыва таблицы DataGrid WPF для разделения её на несколько таблиц

Есть ли возможность разрыва таблицы DataGrid WPF для разделения её на несколько таблиц

Имеется потоковый документ FlowDocument, содержащий в себе контейнер InlineUIContainer с таблицей DataGridДлина таблицы DataGrid превышает установленный фиксированный...

130