網(wǎng)站首頁(yè) 編程語(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
相關(guān)推薦
- 2022-10-23 在Asp.net?core項(xiàng)目中使用WebSocket_實(shí)用技巧
- 2022-08-20 pip安裝路徑修改的詳細(xì)方法步驟_python
- 2022-12-21 Python?eval()和exec()函數(shù)使用詳解_python
- 2022-05-02 關(guān)于Nginx中虛擬主機(jī)的一些冷門知識(shí)小結(jié)_nginx
- 2022-04-08 WPF引用MVVM框架與使用方法_基礎(chǔ)應(yīng)用
- 2022-07-08 C#使用WebClient實(shí)現(xiàn)上傳下載_C#教程
- 2021-12-15 使用Redis實(shí)現(xiàn)令牌桶算法原理解析_Redis
- 2023-03-28 Python代碼庫(kù)之Tuple如何append添加元素問(wèn)題_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支