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-machine添加一個已有的docker主機問題2. golang - 用IDE看docker源碼時的小問題3. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?4. docker網絡端口映射,沒有方便點的操作方法么?5. docker - 如何修改運行中容器的配置6. debian - docker依賴的aufs-tools源碼哪里可以找到啊?7. docker綁定了nginx端口 外部訪問不到8. docker 下面創建的IMAGE 他們的 ID 一樣?這個是怎么回事????9. docker-compose中volumes的問題10. node.js - nodejs debug問題
