从相同的类名提取文本(Python Web抓取)

时间:2019-11-01 07:15:37

标签: python beautifulsoup

我是使用beautifulsoup进行Python Web抄写的初学者。我试图使用beautifulsoup抓取一个房地产网站,但每一列中的行都有不同的信息。但是每列的类名是相同的,因此当我尝试刮取每列的信息时,由于相同的类名,我得到了相同的结果。

Link是我要抓取的网站。

HTML中的代码

<div class="lst-middle-section resale">
<div class="item-datapoint va-middle">
    <div class="lst-sub-title stub text-ellipsis">Built Up Area</div>
    <div class="lst-sub-value stub text-ellipsis">2294 sq.ft.</div>
</div>
<div class="item-datapoint va-middle">
    <div class="lst-sub-title stub text-ellipsis">Avg. Price</div>
    <div class="lst-sub-value stub text-ellipsis"><i class="icon-rupee"></i> 6.5k / sq.ft.</div>
</div>
<div class="item-datapoint va-middle">
    <div class="lst-sub-title stub text-ellipsis">Possession Date</div>
    <div class="lst-sub-value stub text-ellipsis">31st Dec, 2020</div>
</div>

我尝试过的代码!

for item in all:
try:
    print(item.find('span', {'class': 'lst-price'}).getText())
    print(item.find('div',{'class': 'lst-heading'}).getText())
    print(item.find('div', {'class': 'item-datapoint va-middle'}).getText())
    print('')
except AttributeError:
    pass

如果我再次使用“ item-datapoint va-middle”类,那么它将显示平方英尺面积,而不是平均价格或拥有日期。

解决方案? TIA!

1 个答案:

答案 0 :(得分:2)

使用find_elements_by_class_name代替find_element_by_class_name

find_elements_by_class_name("item-datapoint.va-middle")

您将获得元素列表。

Selenium docs: Locating Elements

编辑:

from selenium import webdriver

url = 'https://housing.com/in/buy/search?f=eyJiYXNlIjpbeyJ0eXBlIjoiUE9MWSIsInV1aWQiOiJhMWE1MjFmYjUzNDdjYT' \
      'AxNWZlNyIsImxhYmVsIjoiQWhtZWRhYmFkIn1dLCJub25CYXNlQ291bnQiOjAsImV4cGVjdGVkUXVlcnkiOiIlMjBBaG1lZGFiYWQiL' \
      'CJxdWVyeSI6IiBBaG1lZGFiYWQiLCJ2IjoyLCJzIjoiZCJ9'

driver = webdriver.Chrome()
driver.get(url)
fields = driver.find_elements_by_class_name("item-datapoint.va-middle")
for i, field in enumerate(fields):
    print(i, field.text)
driver.quit()

现在,您会在列表(字段)中看到每个元素的索引。

在此处打印所需的元素:

poss_date = fields[2].text