我想用刮伤提取一些包含在.xpath或.css上的标签上的信息。
但我想提出一些条件,我不知道如何做到这一点。例如,让我们看看我想要销毁的网页的HTML代码。
<div data-tabs-content="" class="estateTabs-panels">
<div id="detail" data-tabs-pane="" class="estateTabs-panel active">
<ul class="dotted-list dotted-list--ocom">
<li><mark>Nombre de pièce(s)
</mark> <mark>3</mark>
</li>
<li>
<li><mark>Nombre de chambre(s)</mark>
<mark>2</mark>
</li>
<li>
<mark>Surface</mark>
<li><mark>70.68m²</mark>
</li>我的问题是,对于网站的每一页,<mark>标签中的值都是不同的,例如,如果前面的标记标签中包含"Nombre (S)“,我想提取<mark>2</mark>的值2。
例如,我想做这样的事情:
if elt.css(".XXXX").extract_first() == ' Nombre de chambre(s) ':
item['value'] = elt.css(".XXXX").extract_first() 结果必须是2
现在我可以用这样的方式来报废:
item['value'] = info.css('.estateTabs-panel ::text').extract()[4]但是我不想使用[int],因为每个页面的值都是不同的。
有马克标签吗?
发布于 2018-04-10 18:40:06
您可以在xpath查询中直接创建条件:
import scrapy
html = '<div data-tabs-content="" class="estateTabs-panels"> ' \
'<div id="detail" data-tabs-pane="" class="estateTabs-panel active">' \
'<ul class="dotted-list dotted-list--ocom">' \
' <li><mark>Nombre de pièce(s)' \
'</mark> <mark>3</mark>' \
'</li>' \
'<li>' \
'<li><mark>Nombre de chambre(s)</mark>' \
'<mark>2</mark>' \
'</li>' \
'<li>' \
'<mark>Surface</mark>' \
'<li><mark>70.68m²</mark>' \
'</li></ul></div></div>'
response = scrapy.Selector(text=html, type="html")
text = response.xpath("//*[contains(text(), 'Nombre de chambre(s)')]/following-sibling::mark/text()")
print(text.get())返回:
2xpath查询正在寻找一个元素,该元素包含"Nombre (S)“。如果它找到它,它将得到以下"mark“元素。从这个元素中,文本将被取走。
干杯:)
发布于 2018-04-10 20:24:28
如果您想使用selector进行同样的操作,那么您也可以尝试这样做:
import scrapy
htmldoc="""
<div data-tabs-content="" class="estateTabs-panels">
<div id="detail" data-tabs-pane="" class="estateTabs-panel active">
<ul class="dotted-list dotted-list--ocom">
<li><mark>Nombre de pièce(s)
</mark> <mark>3</mark>
</li>
<li>
<li><mark>Nombre de chambre(s)</mark>
<mark>2</mark>
</li>
<li>
<mark>Surface</mark>
<li><mark>70.68m²</mark>
</li>
</ul>
</div>
</div>
"""
res = scrapy.Selector(text=htmldoc)
text = res.css("mark:contains('Nombre de chambre') + mark::text").extract_first()
print(text)输出:
2https://stackoverflow.com/questions/49758944
复制相似问题