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)
查詢頁(yè)面發(fā)現(xiàn)這兩個(gè)信息好像是通過(guò)JS查詢的結(jié)果, 除了把網(wǎng)頁(yè)全部正則表達(dá)式匹配的方法, 請(qǐng)教各位: 1, 這兩個(gè)信息能否直接取到? 2, 除了類似'Selenium'這樣的工具, 是否還有其他方式能夠取到這兩個(gè)信息?3, 能否通過(guò)分析查詢接口的方式解決?
謝謝
問(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ò)查詢接口獲取的話,應(yīng)該是可以的,不過(guò)得分析JS代碼,這個(gè)太麻煩,可以通過(guò)抓包工具來(lái)抓它的http請(qǐng)求。然后看看是那個(gè)請(qǐng)求返回的數(shù)據(jù)。相比較而言還是寫正則匹配比較快。
回答3:這個(gè)就像樓上說(shuō)的是js渲染的,內(nèi)容在js代碼里面,可以正則匹配js代碼里面的元素,得到你想要的信息
相關(guān)文章:
1. ddos - apache日志很多其它網(wǎng)址,什么情況?2. 怎么在phpstudy中用phpexcel上傳數(shù)據(jù)到MYSQL?3. javascript - 百度搜索網(wǎng)站,如何讓搜索結(jié)果顯示一張圖片加上一段描述,如圖;求教4. 二維數(shù)組怎么重新組合5. docker綁定了nginx端口 外部訪問(wèn)不到6. vue.js - centos 使用vue-cli. 執(zhí)行npm run dev 報(bào)錯(cuò)7. php由5.3升級(jí)到5.6后,登錄網(wǎng)站,返回的是php代碼,不是登錄界面,各位大神有知道的嗎?8. javascript - 如何在同一臺(tái)電腦上配置不同主機(jī)的2個(gè)git賬號(hào)?9. 發(fā)現(xiàn)了多個(gè)名稱為[spring_web]的片段。相對(duì)順序不合法10. android - 使用vue.js進(jìn)行原生開(kāi)發(fā)如何進(jìn)行Class綁定
