Scrapy 获取跨越多行和嵌套元素的文本

AJI*_*NOY 2 python scrapy web-scraping

我确实在尝试抓取以获取班加罗尔所有职位列表的信息。

网址:https : //www.indeed.co.in/jobs?q=software+developer&l=Bengaluru,+Karnataka&start=0

我感兴趣的父 div 的 Xpath:

//div[contains(@class, "jobsearch-SerpJobCard")]

我想提取结构如下的公司名称:

<span class="company">
        <a>
              Micro Focus
        </a>
</span>
Run Code Online (Sandbox Code Playgroud)

有些人喜欢:

<div>
    <span class="company">
        SSG <b>Software</b> Systems</span>

    </div>
Run Code Online (Sandbox Code Playgroud)

我正在使用一个通用的 Xpath 表达式来抓取这两种标题。我在使用第二种类型时遇到了麻烦,因为它包含多个转义字符,例如 \n,它们反映在我的结果中,而剥离结果则是空字符串。

用于提取标题的 Xpath:

//div[contains(@class, "jobsearch-SerpJobCard")]//span[@class="company"]/text()

结果 :

['\n ', '\n ', '\n ', '\n 分析人力资本客户', '\n Advantage Tech', '\n ', '\n SQUARE', '\n DART', '\n posmab 技术', '\n ', '\n PENTAMOUNT TECHNOLOGIES', '\n ', '\n
MobileComm, Inc.', '\n IGLOBAL IMPACT ITES PVT.LTD.', '\n
', '\n']

我该怎么做才能摆脱那些额外的 '\n' 字符?

str*_*nac 5

您可以使用normalize-spaceXPath 函数来实现这一点。

>>> fetch('https://www.indeed.co.in/jobs?q=software+developer&l=Bengaluru,+Karnataka&start=0')
2018-12-15 09:47:22 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.indeed.co.in/jobs?q=software+developer&l=Bengaluru,+Karnataka&start=0> (referer: None)
>>> response.xpath('//div[contains(@class, "jobsearch-SerpJobCard")]//span[@class="company"]').xpath('normalize-space()').getall()
['Amazon.com', 'Sabre', 'Altisource Labs', 'CGI', 'Allscripts Solutions', 'Shilpin Consulting', 'Access6 technology', 'CGI Group, Inc.', 'Misys Software Solutions India', 'Siemens AG']
Run Code Online (Sandbox Code Playgroud)