我是使用beautifulsoup进行Python Webscriping的初学者。我试图使用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!

最佳答案

使用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

关于python - 从相同的类名提取文本(Python Web抓取),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58655495/

10-12 22:18