我是使用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!
答案 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