为了账号安全,请及时绑定邮箱和手机立即绑定

Scrapy:如何使用 CSS 和 XPath 获取地址?

Scrapy:如何使用 CSS 和 XPath 获取地址?

蛊毒传说 2022-07-12 17:58:47
如何使用 CSS 和 XPath 获取地址?我尝试使用 CSS:response.css('.office-address::text').extract()<span class="office-address" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress">                <span itemprop="streetAddress">                    <span class="address-line1">5835 Post Rd.</span>                        <span class="address-line2">Suite 217</span>                </span>                <span class="city-state-zip">                    <span itemprop="addressLocality">East Greenwich</span>, <span itemprop="addressRegion">RI</span> <span itemprop="postalCode">02818</span>                </span>            </span>
查看完整描述

4 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

带有scrapy的CSS选择器选项:


address = response.css("span.address-line1::text, span.address-line2::text, span[itemprop=addressLocality]::text, span[itemprop=addressRegion]::text, span[itemprop=postalCode]::text").extract() # should return list

if address:

    address = ", ".


查看完整回答
反对 回复 2022-07-12
?
jeck猫

TA贡献1909条经验 获得超7个赞

使用单行 XPath 的肮脏解决方案:

concat(//span[@class='address-line1']/text(),' ',//span[@class='address-line2']/text(),' ',//span[@itemprop='addressLocality']/text(),', ',//span[@itemprop='addressRegion']/text(),//span[@itemprop='postalCode']/text())

输出 :

"5835 Post Rd. Suite 217 East Greenwich, RI02818"


查看完整回答
反对 回复 2022-07-12
?
PIPIONE

TA贡献1829条经验 获得超9个赞

试试这个response.css('.office-address ::text').extract()之前添加的空间::text



查看完整回答
反对 回复 2022-07-12
?
郎朗坤

TA贡献1921条经验 获得超9个赞

这是面向未来的想法,因为 ids/classes 可以在此期间发生变化:


from re import sub

from bs4 import BeautifulSoup as bs


teststr = """<span class="office-address" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress">

                <span itemprop="streetAddress">

                    <span class="address-line1">5835 Post Rd.</span>


                        <span class="address-line2">Suite 217</span>

                </span>

                <span class="city-state-zip">

                    <span itemprop="addressLocality">East Greenwich</span>, <span itemprop="addressRegion">RI</span> <span itemprop="postalCode">02818</span>

                </span>

            </span>"""


r = bs(teststr,"lxml").getText().strip()

r = sub( r"\n", ", ", r)

r = sub( r"[, ]{2,}", ", ", r)

print ( r ) 

结果:


5835 Post Rd., Suite 217, East Greenwich, RI 02818


查看完整回答
反对 回复 2022-07-12
  • 4 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信