尽管在Chrome中工作,但Xpath仍无法正常运行

时间:2020-04-02 12:50:47

标签: python scrapy

尝试:

date = response.xpath('//*[@id="page_match_1_block_match_info_5"]/div[2]/div[2]/div[1]/dl/dd[2]/a/text()').get()

打印:None

date = response.xpath('//*[@id="page_match_1_block_match_info_5"]/div[2]/div[2]/div[1]/dl/dd[2]/a').get()

打印:<a href="/matches/2020/04/03/"><span class="timestamp" data-value="1585922400" data-format="d mmmm yyyy">3 April 2020</span></a>

但是我需要:3 April 2020

1 个答案:

答案 0 :(得分:1)

您需要在Xpath Route text()中添加最终字符串。

根据您的具体情况,完成Xpath路由

'//[@id="page_match_1_block_match_info_5"]/div[2]/div[2]/div[1]/dl/dd[2]/a'

'...dd[2]/a/span/text()'

最终Xpath:

'// [@ id =“ page_match_1_block_match_info_5”] / div [2] / div [2] / div 1 / dl / dd [2] / a / span / text()'

示例:

假设您要从这组HTML标记中提取单词 HOME

HTML:

<nav class="main-nav mobileNav">
    <ul>
        <li class="page-collection active-link">
            <a href="/">HOME</a>
        </li>

        <li class="index-collection">
            <a href="/featuring">FEATURING</a>
        </li>

        <li class="page-collection">
            <a href="/contact">CONTACT</a>
        </li>
    </ul>
</nav>

python的代码行:

# Both selectors (extract_first, get) will obtain the same result.
# Add the text() component as a final str. into the Xpath route.
response.xpath('//*[@class="main-nav mobileNav"]/ul/li/a/text()').extract_first()

response.xpath('//*[@class="main-nav mobileNav"]/ul/li/a/text()').get()

输出:

'HOME'

说明:

您需要在要访问的实际节点内找到一个文本类型的节点。

<a href="/">HOME</a>

那是您获取文本内容之前要访问的最后一个节点。在最后一个Xpath路由中添加text()

'../a/text()'

将导致文本包含标签。

'HOME'

参考:Xpath - Wikipedia