Python Ошибка разбора Beautiful Soup на вложенном промежутке - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь разобрать HTML, используя python Beautiful Soup.

Часть HTML показана ниже:

<div class="zsg-lg-1-3 zsg-md-1-1 zsg-sm-1-1 value-info-block" id="yui_3_18_1_1_1587802421734_2498">
    <div id="overview" class="scroll-track" data-label="Market Overview"></div>
    <h2 id="yui_3_18_1_1_1587802421734_2509">San Francisco Market Overview</h2>


    <h6 class="zsg-fineprint hdr-date">Data through Mar 31, 2020</h6>
    <ul class="value-info-list" id="yui_3_18_1_1_1587802421734_2497">


        <li id="yui_3_18_1_1_1587802421734_2496">
            <span class="value" id="yui_3_18_1_1_1587802421734_2495">
                $1,310,500
            </span>

            <span class="info zsg-fineprint" id="yui_3_18_1_1_1587802421734_2524"> Median listing price

                <span class="info zsg-fineprint">(Jan&nbsp;31,&nbsp;2020)</span>

            </span>

        </li>

    </ul>

</div>

Код python чтобы извлечь HTML, как показано ниже:

def process_market_overview(self):
        parent = self.page_soup.find("div", {"data-label": "Market Overview"}).parent
        for li in parent.findAll("li"):
            value = li.find("span", {"class": "value"}, recursive=False).text.strip()
            key = li.find("span", {"class": "info zsg-fineprint"}, recursive=False).text
            key = key[0].strip()
            print(" key :{} , value:{}".format(key, value))

Но вывод, который я получаю, неверен. Как мне разобраться в таком сценарии? Вывод:

key : , value:$1,447,191
 key : , value:-2.3%
 key : , value:$1,310,500
 key : , value:$1,364,300

Мне нужно извлечь значение $1,310,500 и ключ Median listing price из HTML.

URL: https://www.zillow.com/sanfrancisco-ca/home-values/

Дайте мне знать, если есть лучший способ его анализа.

Чтобы получить полный код, перейдите по ссылке: https://github.com/srth12/Eclipse-Workspace-/blob/master/ariya_python_scrapping/zillow_scrapper.py

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Используйте метод find для извлечения текста из родительского элемента span:

<code>key = li.find("span", {"class": "info zsg-fineprint"})<b>.find(text=True, recursive=False).strip()</b>
0 голосов
/ 26 апреля 2020

Не прямой ответ, но zillow предоставляет бесплатный API и загружаемые CSV с данными, которые вы пытаетесь очистить:

https://www.zillow.com/research/data/

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