Python Scrapy 无法从每个 div 中获取每个 class 名称及其值
Python Scrapy unable to get each class name with its value from each div
我正在尝试从每个 div 列表中获取每个 class 名称及其对应的值。
从这个页面:https://www.dotproperty.id/en/properties-for-sale/riau-islands/batam?page=1
这是 class 名称和值的 html:
<ul class="list-inline">
<li><i class="icon icon-bedroom"></i> <span>3</span></li>
<li><i class="icon icon-dp-icon-24"></i> <span>2</span></li>
<li><i class="icon icon-dp-icon-26"></i> <span>100 m<sup>2</sup></span></li>
</ul>
到目前为止,我得到的最接近的是它使用 getall()
并排打印每个 classes 及其值。但是,它给了我整个页面。
for e in response.css('div.description-block'):
for item in e.xpath('.//ul[@class="list-inline"]'):
print(item.xpath('.//li/i/@class | .//li/span/text()').getall())
输出:
['icon icon-bedroom', '3', 'icon icon-dp-icon-24', '2', 'icon icon-dp-icon-26', '100 m']
['icon icon-bedroom', '2', 'icon icon-dp-icon-24', '1']
['icon icon-bedroom', '6', 'icon icon-dp-icon-24', '5', 'icon icon-dp-icon-26', '198 m']
['icon icon-bedroom', '4', 'icon icon-dp-icon-24', '5', 'icon icon-dp-icon-26', '450 m']
['icon icon-dp-icon-26', '336 m', ' ']
尝试 get()
给出每个 div 的第一个 class 名称:
icon icon-bedroom
icon icon-bedroom
icon icon-bedroom
icon icon-bedroom
icon icon-dp-icon-26
(and so on ...)
我希望每个循环的输出看起来都一样。
['icon icon-bedroom', '3', 'icon icon-dp-icon-24', '2', 'icon icon-dp-icon-26', '100 m']
好的,所以我解决了我的问题。基本上,我只需要在图标容器内迭代并通过名称区分每个图标。
在循环中循环。 :)
for a in accommodation:
class_name = a.xpath('.//i/@class').getall()
value = a.xpath('li/span/text()').getall()
for name,val in zip(class_name,value):
if 'bedroom' in name:
bedrooms = val
else:
pass
if 'icon-24' in name:
bathrooms = val
else:
pass
if 'icon-26' in name:
land = val
else:
pass
我正在尝试从每个 div 列表中获取每个 class 名称及其对应的值。
从这个页面:https://www.dotproperty.id/en/properties-for-sale/riau-islands/batam?page=1
这是 class 名称和值的 html:
<ul class="list-inline">
<li><i class="icon icon-bedroom"></i> <span>3</span></li>
<li><i class="icon icon-dp-icon-24"></i> <span>2</span></li>
<li><i class="icon icon-dp-icon-26"></i> <span>100 m<sup>2</sup></span></li>
</ul>
到目前为止,我得到的最接近的是它使用 getall()
并排打印每个 classes 及其值。但是,它给了我整个页面。
for e in response.css('div.description-block'):
for item in e.xpath('.//ul[@class="list-inline"]'):
print(item.xpath('.//li/i/@class | .//li/span/text()').getall())
输出:
['icon icon-bedroom', '3', 'icon icon-dp-icon-24', '2', 'icon icon-dp-icon-26', '100 m']
['icon icon-bedroom', '2', 'icon icon-dp-icon-24', '1']
['icon icon-bedroom', '6', 'icon icon-dp-icon-24', '5', 'icon icon-dp-icon-26', '198 m']
['icon icon-bedroom', '4', 'icon icon-dp-icon-24', '5', 'icon icon-dp-icon-26', '450 m']
['icon icon-dp-icon-26', '336 m', ' ']
尝试 get()
给出每个 div 的第一个 class 名称:
icon icon-bedroom
icon icon-bedroom
icon icon-bedroom
icon icon-bedroom
icon icon-dp-icon-26
(and so on ...)
我希望每个循环的输出看起来都一样。
['icon icon-bedroom', '3', 'icon icon-dp-icon-24', '2', 'icon icon-dp-icon-26', '100 m']
好的,所以我解决了我的问题。基本上,我只需要在图标容器内迭代并通过名称区分每个图标。
在循环中循环。 :)
for a in accommodation:
class_name = a.xpath('.//i/@class').getall()
value = a.xpath('li/span/text()').getall()
for name,val in zip(class_name,value):
if 'bedroom' in name:
bedrooms = val
else:
pass
if 'icon-24' in name:
bathrooms = val
else:
pass
if 'icon-26' in name:
land = val
else:
pass