首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于<mark>的

用于<mark>的
EN

Stack Overflow用户
提问于 2018-04-10 16:45:02
回答 2查看 90关注 0票数 0

我想用刮伤提取一些包含在.xpath或.css上的标签上的信息。

但我想提出一些条件,我不知道如何做到这一点。例如,让我们看看我想要销毁的网页的HTML代码。

代码语言:javascript
复制
<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。

例如,我想做这样的事情:

代码语言:javascript
复制
if elt.css(".XXXX").extract_first() == ' Nombre de chambre(s) ':
       item['value'] = elt.css(".XXXX").extract_first() 

结果必须是2

现在我可以用这样的方式来报废:

代码语言:javascript
复制
item['value'] = info.css('.estateTabs-panel ::text').extract()[4]

但是我不想使用[int],因为每个页面的值都是不同的。

有马克标签吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-10 18:40:06

您可以在xpath查询中直接创建条件:

代码语言:javascript
复制
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())

返回:

代码语言:javascript
复制
2

xpath查询正在寻找一个元素,该元素包含"Nombre (S)“。如果它找到它,它将得到以下"mark“元素。从这个元素中,文本将被取走。

干杯:)

票数 1
EN

Stack Overflow用户

发布于 2018-04-10 20:24:28

如果您想使用selector进行同样的操作,那么您也可以尝试这样做:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49758944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档