【发布时间】:2015-11-07 20:25:46
【问题描述】:
我正在使用 Xpath 和正则表达式从网页中获取数据
我正在使用以下 xpath 来获取我感兴趣的部分。
response.xpath('//*[@id="business-detail"]/div/p').extract()
编辑: 其中提供以下内容:
[u'<p><span class="business-phone" itemprop="telephone">(415) 287-4225</span><span class="business-address" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="streetAddress">2180 Bryant St. STE 203, </span><span itemprop="addressLocality">San Francisco</span>,\xa0<span itemprop="addressRegion">CA</span>\xa0<span itemprop="postalCode">94110</span></span><span class="business-link"><a href="http://www.klopfarchitecture.com" rel="nofollow" lang="LS30TPCERNYc3ad1e44689537236560bc0b17983458&GAQ0FURUdPUlk6QnVzaW5lc3MgUmV2aWV3IFJlZmVycmFsc35VUkwgQ2xpY2t+d3d3Lmtsb3BmYXJjaGl0ZWN0dXJlLmNvbX4xNTI4MDU=" itemprop="url">www.klopfarchitecture.com</a></span> <br><br></p>']
我感兴趣
<span itemprop="streetAddress">2180 Bryant St. STE 203, </span>
<span itemprop="addressLocality">San Francisco</span>
<span itemprop="addressRegion">CA</span>
<span itemprop="postalCode">94110</span>
所以我正在使用这个正则表达式来提取数据
reg = r'"streetAddress">[0-9]+[^<]*'
reg = r'"addressLocality"[^<]*'
reg = r'"addressRegion"[^<]*'
reg = r'"postalCode"[^<]*'
问题是其中有四个所以我得到四个变量,我需要将数据附加到一个变量中以将完整地址分配给一个项目,什么是完成它的有效方法?
编辑2:
你说得对 Roshan Jossey,我可以使用 response.xpath('//*[@itemprop="streetAddress"]').extract() 但仍然是四个标签,addressLocality、addressRegion 和邮政编码。我如何合并结果?
我正在寻找这个结果:
2180 Bryant St. STE 203, San Francisco, CA 94110
我为四个部分中的每一个都得到了这种格式
<span itemprop="streetAddress">2180 Bryant St. STE 203, </span>
【问题讨论】:
-
您是否尝试过仅使用 xpath,例如 response.xpath('//*[@id="business-detail"]/div/p/span[@itemprop="streetAddress"]/text ()').extract() 等等?
-
我已经尝试了 xpath 的方向:response.xpath('//*[@id="business-detail"]/div/p/span[2]/span[1 ]').extract() 问题是所有页面的位置都不完全相同,所以我拿了一个更大的部分并开始使用正则表达式搜索
-
如何尝试使用 span[@itemprop="streetAddress"] 而不仅仅是 span[1]?或者那个跨度不是 p 节点的直接子节点?你也可以分享那部分html吗?
标签: regex xpath web-scraping scrapy