beautifulsoup - не могу получить информацию из списка - PullRequest
0 голосов
/ 17 марта 2020

Всего python любитель здесь. Я взял несколько классов для некоторых вещей поверхностного уровня, но не нашел решения этой проблемы для нового веб-сайта, который я пытаюсь почистить (kijiji.ca для всех, кто задается вопросом). Я пытаюсь найти информацию об аренде жилья для работы над диссертацией. Просматривая образец страницы, я обнаружил, что некоторая ключевая информация, которая мне нужна, имеет один и тот же класс. Например:

<div class="titleAttributes-2381855425">
  <li class="noLabelAttribute-1492730675"><svg class="icon-459822882 attributeIcon-1499443538 attributeIcon__condensed-4247835132" focusable="false" height="100%" role="img" width="100%"><use xlink:href="#icon-attributes-unittype"></use></svg><span class="noLabelValue-3861810455">Condo</span></li>
  <li
    class="noLabelAttribute-1492730675"><svg class="icon-459822882 attributeIcon-1499443538 attributeIcon__condensed-4247835132" focusable="false" height="100%" role="img" width="100%"><use xlink:href="#icon-attributes-numberbedrooms"></use></svg><span class="noLabelValue-3861810455">Bedrooms: 2</span></li>
    <li
      class="noLabelAttribute-1492730675"><svg class="icon-459822882 attributeIcon-1499443538 attributeIcon__condensed-4247835132" focusable="false" height="100%" role="img" width="100%"><use xlink:href="#icon-attributes-numberbathrooms"></use></svg><span class="noLabelValue-3861810455">Bathrooms: 1</span></li>
</div>

Я пытаюсь получить каждый фрагмент информации, но когда я запускаю свой код, он просто появляется ни с чем.

def getDetails(urls):
    urls = urls[10:]
    print(len(urls))
    i =0;
    try:
        for url in urls:
            print(url)
            listDetails = ""
            listDetailsTwo = []
            url = url.rstrip('\n')
            response = requests.get(url)
            soup = BeautifulSoup(response.text, "html.parser")
            try:
                infobar = soup.select_one("span[class*=noLabelValue-3861810455]").text
                infobar.append(infobar)
                print("Scraping listing : ",str(i))

(я знаю, мой код должен выглядеть как полный беспорядок, но, опять же, я абсолютный любитель.) Я знаю, что мне нужно использовать что-то кроме супа .select_one, но после нескольких дней попыток я действительно никуда не денусь. Любая помощь будет высоко ценится!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Попробуйте это.

from simplified_scrapy import SimplifiedDoc,req,utils
html='''
<div class="titleAttributes-2381855425">
  <li class="noLabelAttribute-1492730675"><svg class="icon-459822882 attributeIcon-1499443538 attributeIcon__condensed-4247835132" focusable="false" height="100%" role="img" width="100%"><use xlink:href="#icon-attributes-unittype"></use></svg><span class="noLabelValue-3861810455">Condo</span></li>
  <li
    class="noLabelAttribute-1492730675"><svg class="icon-459822882 attributeIcon-1499443538 attributeIcon__condensed-4247835132" focusable="false" height="100%" role="img" width="100%"><use xlink:href="#icon-attributes-numberbedrooms"></use></svg><span class="noLabelValue-3861810455">Bedrooms: 2</span></li>
    <li
      class="noLabelAttribute-1492730675"><svg class="icon-459822882 attributeIcon-1499443538 attributeIcon__condensed-4247835132" focusable="false" height="100%" role="img" width="100%"><use xlink:href="#icon-attributes-numberbathrooms"></use></svg><span class="noLabelValue-3861810455">Bathrooms: 1</span></li>
</div>'''
doc = SimplifiedDoc(html)
spans = doc.selects('span.noLabelValue-3861810455>text()')
print (spans)
spans = doc.selects('div.titleAttributes-2381855425>li.noLabelAttribute-1492730675').select('span.noLabelValue-3861810455>text()')
print (spans)
utils.save2csv('test.csv',[spans])

Результат:

['Condo', 'Bedrooms: 2', 'Bathrooms: 1']
['Condo', 'Bedrooms: 2', 'Bathrooms: 1']
0 голосов
/ 17 марта 2020

Вы, вероятно, хотите soup.find_all():

L = soup.find_all('span', {'class':'noLabelValue-3861810455'})
for item in L:
    print(item.text)

Отпечатки:

Condo
Bedrooms: 2
Bathrooms: 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...