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. 百度地圖api - Android百度地圖SDK,MapView上層按鈕可見(jiàn)卻不可觸,怎么解決?2. javascript - 天貓首頁(yè)首屏數(shù)據(jù)來(lái)源3. javascript - Vue的計(jì)算屬性底層依賴(lài)原理是怎么樣?4. php - 生產(chǎn)環(huán)境下,給MySQL添加索引,修改表結(jié)構(gòu)操作,如何才能讓線(xiàn)上業(yè)務(wù)不受影響?5. javascript - 微信小程序 wx.downloadFile下載文件大小有限制嗎6. mysql 獲取時(shí)間函數(shù)unix_timestamp 問(wèn)題?7. Python處理Dict生成json8. 新入手layuiadmin,部署到tp中。想用php自已寫(xiě)一個(gè)后臺(tái)管理系統(tǒng)。9. 網(wǎng)頁(yè)爬蟲(chóng) - python爬蟲(chóng)用BeautifulSoup爬取<s>元素并寫(xiě)入字典,但某些div下沒(méi)有這一元素,導(dǎo)致自動(dòng)寫(xiě)入下一條,如何解決?10. python - 如何使用websocket在網(wǎng)頁(yè)上動(dòng)態(tài)示實(shí)時(shí)數(shù)據(jù)的折線(xiàn)圖?
