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. angular.js - angularjs的自定義過濾器如何給文字加顏色?2. angular.js - angular內容過長展開收起效果3. 關于docker下的nginx壓力測試4. docker鏡像push報錯5. 關于nginx location配置的問題,root到底是什么6. linux - openSUSE 上,如何使用 QQ?7. 并發模型 - python將進程池放在裝飾器里為什么不生效也沒報錯8. 大家好,請問在python腳本中怎么用virtualenv激活指定的環境?9. python的前景到底有大?如果不考慮數據挖掘,機器學習這塊?10. linux - 升級到Python3.6后GDB無法正常運行?
