python - 請教這個頁面中的這兩個信息能否不用無頭瀏覽器爬取到?
問題描述
在爬取'http://www.haodf.com/doctor/DE4r08xQdKSLBVM8i9sHYQ8uQGIO.htm'這個頁面的時候, 發現'擅長'和'執業經歷'這兩個信息通過beautifulsoup是取不到的, 我選取這兩個信息的代碼如下:
soup.select(’#full_DoctorSpecialize’).get_text(strip=True)soup.select(’#full’).get_text(strip=True)
查詢頁面發現這兩個信息好像是通過JS查詢的結果, 除了把網頁全部正則表達式匹配的方法, 請教各位: 1, 這兩個信息能否直接取到? 2, 除了類似'Selenium'這樣的工具, 是否還有其他方式能夠取到這兩個信息?3, 能否通過分析查詢接口的方式解決?
謝謝
問題解答
回答1:可能這個頁面,你要抓的這個數據,是頁面加載后,使用js渲染出來的。也就是說,這個#full_DoctorSpecialize里面的數據是ajax,從服務器上拿回來的。具體要如何拿這樣的數據,你可以百度下 phantomjs ,你一定會 有收獲 的。
回答2:這2個信息可以直接獲取,只是信息包含在JS塊中BigPipe.onPageletArrive({這個里面}) , 可以通過正則表達式獲取。這個里面是一段JSON格式的字符串。匹配之后轉換為json還是很容易處理的。想要通過查詢接口獲取的話,應該是可以的,不過得分析JS代碼,這個太麻煩,可以通過抓包工具來抓它的http請求。然后看看是那個請求返回的數據。相比較而言還是寫正則匹配比較快。
回答3:這個就像樓上說的是js渲染的,內容在js代碼里面,可以正則匹配js代碼里面的元素,得到你想要的信息
相關文章:
1. Docker for Mac 創建的dnsmasq容器連不上/不工作的問題2. html5 - 這個代碼顯示功能如何實現?3. java - 關于File的問題?4. java - instance method中 static后的<K>是什么意思?5. docker - 如何修改運行中容器的配置6. 錯誤:java.lang.NoSuchMethodError:org.objectweb.asm.ClassWriter。<init>(I)V7. python3.x - python連oanda的模擬交易api獲取json問題第五問8. javascript - QWebEngineView 如何爬 angular 的動態數據?9. docker-machine添加一個已有的docker主機問題10. 為什么我ping不通我的docker容器呢???
