Scrapy中詭異xpath的匹配內(nèi)容失效問題及解決
引言
在爬蟲的世界里,xpath是一種非常簡單易用的匹配規(guī)則,方便我們在web世界里提取需要的各類信息。
本文將講述一個xpath規(guī)則無效的問題分析過程。
環(huán)境介紹
Python 3.6.1 Scrapy 1.5.0
問題
在選用xpath之時,都是基于firefox或者chrome中自帶的Web開發(fā)工具來選取的。
這里一般推薦使用chrome的devtool,功能強(qiáng)大,簡單易用,童叟無欺,居家旅游必須良品呀。
具體示意如下:

基于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)
.....但是在實際執(zhí)行中,卻一直沒有匹配到urls,根據(jù)實際上頁面返回正常,同時數(shù)據(jù)也是正確可以匹配到的,那問題出現(xiàn)在哪里呢?
問題分析
根據(jù)結(jié)果來分析,如果頁面存在,但是沒有正確的結(jié)果輸出,則一定是xpath的問題,但是xpath問題是基于chrome自帶的devtools工具copy而來的,怎么可能出錯恩?真是讓人想不透的問題…….
在經(jīng)過一番深入的反復(fù)嘗試之后,主要是基于scrapy提供的強(qiáng)大的scrapy shell交互工具,可以幫助開發(fā)者快速地一步一步地定位問題。
于是采取了逐步縮小xpath的方式,逐步定位問題,終于找到了問題的原因所在,那就是tbody是一個需要移除的tag標(biāo)簽。
將正確的xpath設(shè)置為:
//*[@id=”SpanPlanSchoolInfo”]/table[2]/tr[3]/td/table/tbody/tr[2]/td[1]/a
問題總結(jié)
雖然問題解決了,但是原因是什么呢?
經(jīng)過分析,主要是由于瀏覽器本身自動為table新增了tbody標(biāo)簽內(nèi)容,但是在xpath中是不需要的,需要在進(jìn)行xpath查詢之時移除掉。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python讀取DataFrame的某行或某列的方法實現(xiàn)
Dataframe是Python中一種重要的數(shù)據(jù)處理工具,它能夠以表格形式存儲并處理數(shù)據(jù),本文主要介紹了Python讀取DataFrame的某行或某列的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-04-04
利用pandas進(jìn)行數(shù)據(jù)清洗的方法
本文主要介紹了利用pandas進(jìn)行數(shù)據(jù)清洗的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Python實現(xiàn)基于二叉樹存儲結(jié)構(gòu)的堆排序算法示例
這篇文章主要介紹了Python實現(xiàn)基于二叉樹存儲結(jié)構(gòu)的堆排序算法,結(jié)合實例形式分析了Python二叉樹的定義、遍歷及堆排序算法相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Python 排序最長英文單詞鏈(列表中前一個單詞末字母是下一個單詞的首字母)
這篇文章主要介紹了Python 排序最長英文單詞鏈(列表中前一個單詞末字母是下一個單詞的首字母),列表中每個元素相當(dāng)于一個單詞,要實現(xiàn)列表中前一個單詞末字母是下一個單詞的首字母,并且這個鏈?zhǔn)亲铋L的。感興趣的可以了解一下2020-12-12
python+matplotlib實現(xiàn)動態(tài)繪制圖片實例代碼(交互式繪圖)
這篇文章主要介紹了python+matplotlib實現(xiàn)動態(tài)繪制圖片實例代碼(交互式繪圖),小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
python使用PyPDF2 和 pdfplumber操作PDF文件
本文主要介紹了Python中用于操作PDF的兩個庫:PyPDF2和pdfplumber,下面就來具體介紹一下兩個庫的使用方法,具有一定的參考價值,感興趣的可以了解一下2025-01-01

