python - 請(qǐng)教這個(gè)頁(yè)面中的這兩個(gè)信息能否不用無(wú)頭瀏覽器爬取到?
問(wèn)題描述
在爬取'http://www.haodf.com/doctor/DE4r08xQdKSLBVM8i9sHYQ8uQGIO.htm'這個(gè)頁(yè)面的時(shí)候, 發(fā)現(xiàn)'擅長(zhǎng)'和'執(zhí)業(yè)經(jīng)歷'這兩個(gè)信息通過(guò)beautifulsoup是取不到的, 我選取這兩個(gè)信息的代碼如下:
soup.select(’#full_DoctorSpecialize’).get_text(strip=True)soup.select(’#full’).get_text(strip=True)
查詢(xún)頁(yè)面發(fā)現(xiàn)這兩個(gè)信息好像是通過(guò)JS查詢(xún)的結(jié)果, 除了把網(wǎng)頁(yè)全部正則表達(dá)式匹配的方法, 請(qǐng)教各位: 1, 這兩個(gè)信息能否直接取到? 2, 除了類(lèi)似'Selenium'這樣的工具, 是否還有其他方式能夠取到這兩個(gè)信息?3, 能否通過(guò)分析查詢(xún)接口的方式解決?
謝謝
問(wèn)題解答
回答1:可能這個(gè)頁(yè)面,你要抓的這個(gè)數(shù)據(jù),是頁(yè)面加載后,使用js渲染出來(lái)的。也就是說(shuō),這個(gè)#full_DoctorSpecialize里面的數(shù)據(jù)是ajax,從服務(wù)器上拿回來(lái)的。具體要如何拿這樣的數(shù)據(jù),你可以百度下 phantomjs ,你一定會(huì) 有收獲 的。
回答2:這2個(gè)信息可以直接獲取,只是信息包含在JS塊中BigPipe.onPageletArrive({這個(gè)里面}) , 可以通過(guò)正則表達(dá)式獲取。這個(gè)里面是一段JSON格式的字符串。匹配之后轉(zhuǎn)換為json還是很容易處理的。想要通過(guò)查詢(xún)接口獲取的話(huà),應(yīng)該是可以的,不過(guò)得分析JS代碼,這個(gè)太麻煩,可以通過(guò)抓包工具來(lái)抓它的http請(qǐng)求。然后看看是那個(gè)請(qǐng)求返回的數(shù)據(jù)。相比較而言還是寫(xiě)正則匹配比較快。
回答3:這個(gè)就像樓上說(shuō)的是js渲染的,內(nèi)容在js代碼里面,可以正則匹配js代碼里面的元素,得到你想要的信息
相關(guān)文章:
1. android - 安卓做前端,PHP做后臺(tái)服務(wù)器 有什么需要注意的?2. docker不顯示端口映射呢?3. mysql - 我用SQL語(yǔ)句 更新 行的時(shí)候,發(fā)現(xiàn)全部 中文都被清空了,請(qǐng)問(wèn)怎么解決?4. python - 子進(jìn)程執(zhí)行完成為僵尸進(jìn)程,怎么解決5. python - xpath提取網(wǎng)頁(yè)路徑?jīng)]問(wèn)題,但是缺失內(nèi)容?6. javascript - 求教各位,本地HTML頁(yè)面怎么在DIV中嵌套服務(wù)器上的頁(yè)面內(nèi)容?不用iframe。7. python-mysql Commands out of sync8. java中返回一個(gè)對(duì)象,和輸出對(duì)像的值,意義在哪兒9. javascript - 給某個(gè)類(lèi)添加一個(gè)偽類(lèi),這個(gè)類(lèi)有click事件,現(xiàn)在我點(diǎn)擊偽類(lèi)也觸發(fā)了click事件10. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?
