日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Scrapy中詭異xpath的匹配內(nèi)容失效問(wèn)題及解決_python

作者:bladestone ? 更新時(shí)間: 2023-01-19 編程語(yǔ)言

引言

在爬蟲的世界里,xpath是一種非常簡(jiǎn)單易用的匹配規(guī)則,方便我們?cè)趙eb世界里提取需要的各類信息。

本文將講述一個(gè)xpath規(guī)則無(wú)效的問(wèn)題分析過(guò)程。

環(huán)境介紹

Python 3.6.1 Scrapy 1.5.0

問(wèn)題

在選用xpath之時(shí),都是基于firefox或者chrome中自帶的Web開(kāi)發(fā)工具來(lái)選取的。

這里一般推薦使用chrome的devtool,功能強(qiáng)大,簡(jiǎn)單易用,童叟無(wú)欺,居家旅游必須良品呀。

具體示意如下:

基于xpath提取信息

基于xpath提取的路徑信息,示例如下:

//*[@id=”SpanPlanSchoolInfo”]/table[2]/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/a

在Scrapy代碼中使用如下:

def parse(self, response):
    xpath_url = '//*[@id="SpanPlanSchoolInfo"]/table[2]/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/a'
    urls = response.xpath(xpath_url)
    .....

但是在實(shí)際執(zhí)行中,卻一直沒(méi)有匹配到urls,根據(jù)實(shí)際上頁(yè)面返回正常,同時(shí)數(shù)據(jù)也是正確可以匹配到的,那問(wèn)題出現(xiàn)在哪里呢?

問(wèn)題分析

根據(jù)結(jié)果來(lái)分析,如果頁(yè)面存在,但是沒(méi)有正確的結(jié)果輸出,則一定是xpath的問(wèn)題,但是xpath問(wèn)題是基于chrome自帶的devtools工具copy而來(lái)的,怎么可能出錯(cuò)恩?真是讓人想不透的問(wèn)題…….

在經(jīng)過(guò)一番深入的反復(fù)嘗試之后,主要是基于scrapy提供的強(qiáng)大的scrapy shell交互工具,可以幫助開(kāi)發(fā)者快速地一步一步地定位問(wèn)題。

于是采取了逐步縮小xpath的方式,逐步定位問(wèn)題,終于找到了問(wèn)題的原因所在,那就是tbody是一個(gè)需要移除的tag標(biāo)簽。

將正確的xpath設(shè)置為:

//*[@id=”SpanPlanSchoolInfo”]/table[2]/tr[3]/td/table/tbody/tr[2]/td[1]/a

問(wèn)題總結(jié)

雖然問(wèn)題解決了,但是原因是什么呢?

經(jīng)過(guò)分析,主要是由于瀏覽器本身自動(dòng)為table新增了tbody標(biāo)簽內(nèi)容,但是在xpath中是不需要的,需要在進(jìn)行xpath查詢之時(shí)移除掉。

原文鏈接:https://blade.blog.csdn.net/article/details/80215753

欄目分類
最近更新