最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

xpath無法定位tbody標(biāo)簽解決方法示例

 更新時(shí)間:2023年09月13日 09:28:48   作者:ponponon  
這篇文章主要介紹了xpath無法定位tbody標(biāo)簽解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

你用 selenium 抓取,必定有 body你用 requests 抓取,不一定有 body

瀏覽器會(huì)對(duì)不存在 body 的情況自動(dòng)加上 body

所以,你用 requests 抓取就去分析 html tree用 selenium 就去分析 render tree

html tree 就是 networks 標(biāo)簽中的 html 內(nèi)容;render tree 就是 Elements 標(biāo)簽頁中的內(nèi)容

以前的講法有點(diǎn)問題,所以再次更新一下,也算是填坑

定位不到tbody是因?yàn)闃?biāo)準(zhǔn)差異,tbody不是必須存在的

chrome的Elements標(biāo)簽頁的tbody是肯定存在的

但是程序員寫的網(wǎng)頁不一定會(huì)有tbody

但是在chrome的Elements標(biāo)簽頁不管返回的html有沒有tbody,chrome都會(huì)有(有就不加,沒有就自動(dòng)加上)

所以用selenium請(qǐng)求網(wǎng)頁數(shù)據(jù),就加上tbody標(biāo)簽,因?yàn)閟elenium返回的必定是包含tbody的(因?yàn)榉祷氐氖莄hrome的Elements標(biāo)簽頁的內(nèi)容)

用requests請(qǐng)求的時(shí)候,就自己看看源html內(nèi)是否真的包含tbody標(biāo)簽(可以在chrome的network標(biāo)簽頁下查看)

總結(jié):服務(wù)器返回的html不一定有tbody標(biāo)簽(具體看網(wǎng)站前端程序員有沒有加tbody標(biāo)簽),但是經(jīng)過chrome渲染的render html必定包含tbody標(biāo)簽(服務(wù)器返回沒有的話,瀏覽器就給你自動(dòng)加上)

以下是原文
寫于2019.10.29日

測(cè)試庫:lxml庫;鏈接鏈接:http://www.sxchxx.com/index-13-1075-1.html

問題發(fā)現(xiàn)

個(gè)人比較喜歡用xpath解析網(wǎng)頁,但時(shí)常得到的結(jié)果卻是一個(gè)空列表。

1.1 etree.HTML

from lxml import etree
import requests
url = 'http://www.sxchxx.com/index-13-1075-1.html'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36',
}
resposne = requests.get(url, headers=headers)
parser = etree.HTMLParser(encoding="utf-8")
html = etree.HTML(resposne.text, parser=parser)
resu=html.xpath('//*[@id="large_mid"]/table[2]/tr[3]/td/p//text()')
print(resu)

當(dāng)用如上代碼解析如下網(wǎng)頁時(shí),可以獲取正文

但發(fā)現(xiàn)我們并沒有在rule里面加入tbody標(biāo)簽。相反,加入tbody標(biāo)簽會(huì)使的解析結(jié)果變成一個(gè)空列表

html.xpath('//*[@id="large_mid"]/table[2]/tbody/tr[3]/td/p//text()') # 這樣會(huì)得到空列表

1.2 etree.parse

使用etree.parse和etree.HTML恰好相反

from lxml import etree
import requests

parser = etree.HTMLParser(encoding="utf-8")
html = etree.parse('test.html', parser=parser)


content = html.xpath('//*[@id="large_mid"]/table[2]/tbody/tr[3]/td/p//text()')

print(content)

將網(wǎng)頁保存成test.html,再用etree.parse加載,發(fā)現(xiàn)rule中加入tbody標(biāo)簽才能獲得預(yù)期的結(jié)果;不加tbody標(biāo)簽會(huì)獲得一個(gè)空列表

1.3 代碼對(duì)比

from lxml import etree
import requests
parser = etree.HTMLParser(encoding="utf-8")
html = etree.parse('test.html', parser=parser)
content = html.xpath('//*[@id="large_mid"]/table[2]/tbody/tr[3]/td/p//text()')
print(content)
print('----------------分割線-------------------')
url = 'http://www.sxchxx.com/index-13-1075-1.html'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36',
}
resposne = requests.get(url, headers=headers)
parser = etree.HTMLParser(encoding="utf-8")
html = etree.HTML(resposne.text, parser=parser)
content = html.xpath('//*[@id="large_mid"]/table[2]/tr[3]/td/p//text()')
print(content)

解決問題

2.1曲線救國

如果解析在線網(wǎng)頁,不要添加tbody標(biāo)簽反則解析本地(離線)網(wǎng)頁,添加tbody標(biāo)簽

2.2其他方法

請(qǐng)看下面的原因分析

問題發(fā)生的原因

對(duì)比上面兩種方法,差異在于
html = etree.parse('test.html', parser=parser)html = etree.HTML(resposne.text)這兩行代碼

而解析器是相同的parser = etree.HTMLParser(encoding="utf-8")

因此,我猜測(cè),可能是parse或者HTML對(duì)代碼做了某種“格式化”調(diào)整。

貌似lxml這個(gè)庫使用其他語言編寫,看不到源代碼,無法從源代碼下手檢查

以上就是xpath無法定位tbody標(biāo)簽解決方法示例的詳細(xì)內(nèi)容,更多關(guān)于xpath定位tbody標(biāo)簽的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python調(diào)用實(shí)現(xiàn)最小二乘法的方法詳解

    Python調(diào)用實(shí)現(xiàn)最小二乘法的方法詳解

    所謂線性最小二乘法,可以理解為是解方程的延續(xù),區(qū)別在于,當(dāng)未知量遠(yuǎn)小于方程數(shù)的時(shí)候,將得到一個(gè)無解的問題。本文主要和大家分享Python調(diào)用實(shí)現(xiàn)最小二乘法的方法,需要的可以參考一下
    2023-04-04
  • python處理xls文件openpyxl基礎(chǔ)操作

    python處理xls文件openpyxl基礎(chǔ)操作

    這篇文章主要為大家介紹了python處理xls文件openpyxl基礎(chǔ)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 在Python中如何使用yield

    在Python中如何使用yield

    在 Python 開發(fā)中,yield 關(guān)鍵字的使用其實(shí)較為頻繁,例如大集合的生成,簡(jiǎn)化代碼結(jié)構(gòu)、協(xié)程與并發(fā)都會(huì)用到它,文中詳細(xì)介紹了yield的用法,需要的朋友可以參考下
    2021-06-06
  • python基礎(chǔ)之入門必看操作

    python基礎(chǔ)之入門必看操作

    下面小編就為大家?guī)硪黄猵ython基礎(chǔ)之入門必看操作。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • python xpath獲取頁面注釋的方法

    python xpath獲取頁面注釋的方法

    今天小編就為大家分享一篇python xpath獲取頁面注釋的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中MYSQLdb出現(xiàn)亂碼的解決方法

    Python中MYSQLdb出現(xiàn)亂碼的解決方法

    這篇文章主要介紹了Python中MYSQLdb出現(xiàn)亂碼的解決方法,是Python操作MySQL數(shù)據(jù)庫程序設(shè)計(jì)中非常常見的問題,需要的朋友可以參考下
    2014-10-10
  • Python?lambda函數(shù)使用方法深度總結(jié)

    Python?lambda函數(shù)使用方法深度總結(jié)

    在本文中,小編將帶大家學(xué)習(xí)一下Python中的lambda函數(shù),并探討使用它的優(yōu)點(diǎn)和局限性。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • python實(shí)現(xiàn)貪吃蛇雙人大戰(zhàn)

    python實(shí)現(xiàn)貪吃蛇雙人大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)貪吃蛇雙人大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python利用第三方模塊實(shí)現(xiàn)壓縮css文件

    Python利用第三方模塊實(shí)現(xiàn)壓縮css文件

    在?Python?中可以使用多種方法來壓縮?CSS?文件。其中一種流行的方法是使用?csscompressor?庫,這個(gè)庫可以幫助你壓縮?CSS?代碼,下文就來和大家詳細(xì)聊聊
    2023-01-01
  • 解決Pycharm無法import自己安裝的第三方module問題

    解決Pycharm無法import自己安裝的第三方module問題

    今天小編就為大家分享一篇解決Pycharm無法import自己安裝的第三方module問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論

文登市| 邻水| 岐山县| 剑阁县| 泰宁县| 太仓市| 郎溪县| 永胜县| 云安县| 石门县| 阳信县| 莱西市| 绥宁县| 徐闻县| 罗江县| 铜山县| 扎兰屯市| 共和县| 全州县| 白城市| 昌图县| 兴海县| 衡东县| 延边| 宜良县| 横峰县| 吉林市| 囊谦县| 赣榆县| 崇州市| 文水县| 湘阴县| 剑阁县| 中宁县| 西城区| 吉水县| 宁南县| 石林| 通化市| 内乡县| 巴中市|