在正则表达式

时间:2015-11-07 20:25:46

标签: regex xpath web-scraping scrapy

我使用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&amp;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"[^<]*'

问题是它们中有四个所以我得到了四个变量,我需要附加数据以在一个变量中包含完整地址以将其分配给一个Item,这将是一种有效的方法来实现它?

EDIT2:

你是对的Roshan Jossey,我可以使用response.xpath(&#39; // * [@ itemprop =&#34; streetAddress&#34;]&#39;)。extract() 但仍然是四个标签,addressLocality,addressRegion和邮政编码。我如何合并结果?

我正在寻找这个结果:

2180 Bryant St. STE 203,San Francisco,CA 94110

我正在为这四个部分中的每个部分获取此格式

<span itemprop="streetAddress">2180 Bryant St. STE 203, </span>

1 个答案:

答案 0 :(得分:0)

我建议只使用xpath来解决这个问题

response.xpath('//*[@id="business-detail"]/div/p//span[@itemprop="streetAddress"]/text()').extract()[0]

会为您提供街道地址。您可以以类似的方式提取所有其他元素。然后它只是连接它们的问题 当存在这样简单的xpath解决方案时,正则表达式看起来有点过分。