我目前正在尝试设置网络抓取工具,以便从房地产网站中提取数据。这些网站的趋势是每个页面的某些信息不在同一个位置,所以我必须弄清楚如何让它提取包含某些短语的文本元素,而不是基于它们的位置。以下是此类网页的一些示例:
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不太熟悉,我不知道如何改变它来寻找一些短语(我当然尝试过,但它永远不会成功)。 Regexp似乎是一个很有前途的工具,但是当我使用命令^ MLS时,它应该查找以“MLS”开头的元素,它根本不起作用。我知道必须有一种直截了当的方法来做到这一点,但这是我第一次使用这项服务,所以我还不太熟悉它。建议将不胜感激。
答案 0 :(得分:6)
正则表达式不允许您提取数据,仅用于清理或修改已提取的文本。
您需要创建一个XPath来提取所需的数据。我为你做了一个例子:
//*[@role="main"]//li[contains(text(), "MLS ")]
说明:查找页面的主要部分,然后搜索包含文本<li>
的{{1}}。这将提取类似"MLS"
您现在可以选择列类型为“数字”以仅获取数字(您也可以使用正则表达式,这正是您可以使用它执行的操作)。
编辑:即使XPath是正确的,它也不会返回import.io中的数据。还有另一种方法:使用XPath将所有文本带入该部分,然后使用正则表达式选择MLS。
要使用的XPath:
"MLS #: 66521347"
使用正则表达式:
//*[@role="main"]/section[@class="zsg-content-section "][1]