【问题标题】:Setting up import.io crawler with xpath or regexp使用 xpath 或 regexp 设置 import.io 爬虫
【发布时间】:2015-06-22 23:23:26
【问题描述】:

我目前正在尝试设置一个网络爬虫来从房地产网站中提取数据。这些网站的趋势是每个页面的某些信息不在同一个地方,所以我必须弄清楚如何让它提取包含某些短语的文本元素,而不是基于它们的位置。以下是此类页面的一些示例:

http://www.zillow.com/homedetails/2630-Hazy-Creek-Dr-Houston-TX-77084/28388488_zpid/

http://www.zillow.com/homedetails/16514-Park-Firth-Dr-Houston-TX-77084/28357799_zpid/

请注意某些信息(例如 MLS #)是如何出现在不同位置的。当我从这些条目之一中提取 xpath 时,我得到://*[@id="yui_3_15_0_1_1435013689406_3296"],并且由于我对 xpath 不太熟悉,我不知道如何更改它以查找一些短语(我当然尝试过,但它永远不会成功)。正则表达式似乎是一个很有前途的工具,但是当我使用命令 ^MLS,它应该查找以“MLS”开头的元素时,它根本不起作用。我知道必须有一个简单的方法来做到这一点,但这是我第一次使用这项服务,所以我还不太熟悉。非常感谢您的建议。

【问题讨论】:

    标签: regex xpath web-crawler import.io


    【解决方案1】:

    Regex 不允许您提取数据,只能清理或修改已提取的文本。

    您需要创建一个 XPath 来提取所需的数据。我给你做了一个例子:

    //*[@role="main"]//li[contains(text(), "MLS ")]
    

    解释:查找页面的主要部分,然后搜索包含文本"MLS"<li>。这将提取类似"MLS #: 66521347"

    您现在可以将列类型选择为“数字”以仅获取数字(您也可以使用正则表达式,这正是您可以使用它做的事情)。

    编辑:即使 XPath 是正确的,它也不会返回 import.io 中的数据。还有另一种方法:使用 XPath 将所有文本带入该部分,然后使用正则表达式选择 MLS。

    要使用的 XPath:

    //*[@role="main"]/section[@class="zsg-content-section "][1]
    

    要使用的正则表达式:

    MLS #: (\d+)
    

    【讨论】:

    • 非常感谢,但这似乎有问题。当我使用此路径时,import.io 会在选择列时突出显示页面上的 MLS 编号,但它不会出现在列本身中。不知何故,它无需实际提取即可识别正确的条目。
    • 我刚刚用一个新的 xpath + 正则表达式编辑了我的原始回复,它实际上在 import.io 上工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多