python - 請教這個(gè)頁面中的這兩個(gè)信息能否不用無頭瀏覽器爬取到?
問題描述
在爬取'http://www.haodf.com/doctor/DE4r08xQdKSLBVM8i9sHYQ8uQGIO.htm'這個(gè)頁面的時(shí)候, 發(fā)現(xiàn)'擅長'和'執(zhí)業(yè)經(jīng)歷'這兩個(gè)信息通過beautifulsoup是取不到的, 我選取這兩個(gè)信息的代碼如下:
soup.select(’#full_DoctorSpecialize’).get_text(strip=True)soup.select(’#full’).get_text(strip=True)
查詢頁面發(fā)現(xiàn)這兩個(gè)信息好像是通過JS查詢的結(jié)果, 除了把網(wǎng)頁全部正則表達(dá)式匹配的方法, 請教各位: 1, 這兩個(gè)信息能否直接取到? 2, 除了類似'Selenium'這樣的工具, 是否還有其他方式能夠取到這兩個(gè)信息?3, 能否通過分析查詢接口的方式解決?
謝謝
問題解答
回答1:可能這個(gè)頁面,你要抓的這個(gè)數(shù)據(jù),是頁面加載后,使用js渲染出來的。也就是說,這個(gè)#full_DoctorSpecialize里面的數(shù)據(jù)是ajax,從服務(wù)器上拿回來的。具體要如何拿這樣的數(shù)據(jù),你可以百度下 phantomjs ,你一定會 有收獲 的。
回答2:這2個(gè)信息可以直接獲取,只是信息包含在JS塊中BigPipe.onPageletArrive({這個(gè)里面}) , 可以通過正則表達(dá)式獲取。這個(gè)里面是一段JSON格式的字符串。匹配之后轉(zhuǎn)換為json還是很容易處理的。想要通過查詢接口獲取的話,應(yīng)該是可以的,不過得分析JS代碼,這個(gè)太麻煩,可以通過抓包工具來抓它的http請求。然后看看是那個(gè)請求返回的數(shù)據(jù)。相比較而言還是寫正則匹配比較快。
回答3:這個(gè)就像樓上說的是js渲染的,內(nèi)容在js代碼里面,可以正則匹配js代碼里面的元素,得到你想要的信息
相關(guān)文章:
1. MySQL 使用 group by 之后然后 IFNULL(COUNT(*),0) 為什么還是會獲得 null2. wordpress里,這樣的目錄列表是屬于小工具還是啥?3. 一直報(bào)這個(gè)錯(cuò)誤4. 常量在外面不加引號會報(bào)錯(cuò)。5. python如何設(shè)置一個(gè)隨著系統(tǒng)時(shí)間變化的動(dòng)態(tài)變量?6. mysql - 大部分?jǐn)?shù)據(jù)沒有行溢出的text字段是否需要拆表7. mysql federated引擎無法開啟8. sublime text3安裝package control失敗9. 我的怎么不顯示啊,話說有沒有QQ群什么的10. mysql 為什么主鍵 id 和 pid 都市索引, id > 10 走索引 time > 10 不走索引?
