【问题标题】:Append values in regular expressions在正则表达式中附加值
【发布时间】: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&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"[^<]*'

问题是其中有四个所以我得到四个变量,我需要将数据附加到一个变量中以将完整地址分配给一个项目,什么是完成它的有效方法?

编辑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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多