【问题标题】:Extract features from list using xpath Scrapy使用 xpath Scrapy 从列表中提取特征
【发布时间】:2021-03-24 11:12:31
【问题描述】:

我一直试图从这个URL获取所有属性信息和功能

有一个列表,但是,当我尝试使用我的 xpath 只获取其中一个时,我无法检索任何内容。

这是我尝试过的:

response.xpath('//div[@id="property-info-col1"]/text()').getall()
response.xpath('//div[@class="col-md-6"]').getall()
response.xpath('//*id[@class="property-info-col1"]').getall()

这些似乎都不起作用,我不知道为什么..有人有什么建议吗?

提前谢谢你!

【问题讨论】:

    标签: python web-scraping xpath scrapy


    【解决方案1】:

    /text() 将返回直接文本子节点。在您的情况下,它只是空字符串。要获得div字符串表示,请尝试

    'string(//div[@id="property-info-col1"])'
    

    更新

    div = response.xpath('//div[@id="property-info-col1"]')
    for dt, dd in zip(div.xpath('.//dt/text()'), div.xpath('.//dd/text()')):
        print(' - '.join([dt, dd]))
    

    【讨论】:

    • 我也得到空字符串。我想单独存储每个元素,例如,Price = R13,975,000',但我什至无法访问包含功能的整个类。这是你建议的吗? response.xpath('string(//div[@id="property-info-col1"])').getall()@JaSON
    • @saraherceg 尝试更新代码。我不熟悉 Scrapy,所以我不确定它是否会起作用。让我知道结果
    • div = response.xpath('//div[@id="property-info-col1"]') 仍然没有返回任何内容,我不知道为什么? @JaSON
    • @saraherceg。这很奇怪。检查你是否真的得到了目标 HTML 页面。服务器可能无法以正确的页面响应
    • 看来它确实得到了很好的回应,我将在问题中附上我的shell截图。 @JaSON
    【解决方案2】:

    尝试使用双斜杠

    response.xpath('//div[@id="property-info-col1"]//text()').getall()
    

    【讨论】:

      【解决方案3】:

      对于您的第一个 xpath,由于单斜杠,您仅选择作为 div 的直接子级的文本节点。这可能不是您所期望的,您想要的是所有作为div后代 的文本节点,而不仅仅是子节点。尝试使用双斜杠。 //div[@id="property-info-col1"]//text()

      在 Python 中做一些测试:

      In [1]: from lxml import html
      
      In [2]: f = open('travelpage.html', 'r')
      
      In [3]: root = html.fromstring(f.read())
      
      ...
      
      In [8]: root.xpath('//div[@id="property-info-col1"]/text()')
      Out[8]: ['\n', '\n']
      
      In [9]: root.xpath('//div[@id="property-info-col1"]//text()')
      Out[9]: 
      ['\n',
       '\n',
       'Property Type',
       '\n',
       'House',
       '\n',
       'Listing Type',
       '\n',
       'For Sale',
       '\n',
       'Location',
       '\n',
       'Camphersdrift, George',
       '\n',
       'Price',
       '\n',
       '\nR 13,975,000\n· ',
       'Get Pre-Qualified',
       '\n',
       '\n',
       'Price per m²',
       '\n',
       'R 11,569',
       '\n',
       'Floor Size',
       '\n',
       '535 m²',
       '\n',
       'Erf Size',
       '\n',
       '1208 m²',
       '\n',
       '\n']
      

      【讨论】:

      • 当我尝试在 scrapy shell 中运行相同的命令时,我仍然得到一个空列表。你是怎么测试这个的?谢谢您的帮助! @Forensic_07
      • 这是一个ipython shell,我正在使用lxml 来解析我保存的网页源的本地文本文件以生成root 并在其上运行xpath。这是 lxml 文档:lxml.de/parsing.html#parsing-html。我将更新代码 sn-p 以包含设置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多