Попытка очистить один элемент, вложенный в тег - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь захватить только текст " Other ", по существу извлекая элементы сильного тега

<ul class="listing-row__meta">
                        <li>
                            <strong>Ext. Color:</strong>

                                Other
                        </li>
                    </ul>

Пока мой код:

import requests
from bs4 import BeautifulSoup
from csv import writer

response = requests.get('https://www.cars.com/for-sale/searchresults.action/?mdId=21811&mkId=20024&page=1&perPage=100&rd=99999&searchSource=PAGINATION&showMore=false&sort=relevance&stkTypId=28880&zc=11209')

soup = BeautifulSoup(response.text, 'html.parser')

posts = soup.find_all(class_='shop-srp-listings__inner')

with open('posts.csv', 'w') as csv_file:
    csv_writer = writer(csv_file)
    headers = ['title', 'color', 'price']
    csv_writer.writerow(headers)

    for post in posts:
        title = post.find(class_="listing-row__title").get_text().replace('\n', '').strip()
        color = post.find("li").get_text().replace('\n', '').strip()
        colorremove = color.strong.extract()
        price = post.find("span", attrs={"class": "listing-row__price"}).get_text().replace('\n', '').strip()
        csv_writer.writerow([title, colorremove, price])

Этот конкретный скрипт не запускается, до этого я только что сохранил цветную линию, и она отлично работает, но он показывает "Ext. Color"

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вы можете find элемент <strong> и затем получить его next_sibling:

from bs4 import BeautifulSoup

markup = r"""
<ul class="listing-row__meta">
                        <li>
                            <strong>Ext. Color:</strong>

                                Other
                        </li>
                    </ul>
"""

soup = BeautifulSoup(markup, "html.parser")
print(soup.find("strong").next_sibling.strip())

Результат:

Other
0 голосов
/ 09 марта 2019

Вы можете использовать stripped_strings в родительском классе

from bs4 import BeautifulSoup

html = """
<ul class="listing-row__meta">
                        <li>
                            <strong>Ext. Color:</strong>

                                Other
                        </li>
                    </ul>
"""

soup = BeautifulSoup(html, "lxml")
firstItem = soup.select_one('.listing-row__meta')
strings = [string for string in firstItem.stripped_strings]
print(strings[1])
...