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ù)。相比較而言還是寫(xiě)正則匹配比較快。
回答3:這個(gè)就像樓上說(shuō)的是js渲染的,內(nèi)容在js代碼里面,可以正則匹配js代碼里面的元素,得到你想要的信息
相關(guān)文章:
1. mysql - 如何減少使用或者不用LEFT JOIN查詢?2. html5 - H5 audio 微信端 在IOS上不能播放音樂(lè)3. python - 編碼問(wèn)題求助4. python - 我在使用pip install -r requirements.txt下載時(shí),為什么部分能下載,部分不能下載5. 視頻文件不能播放,怎么辦?6. mysql - 分庫(kù)分表、分區(qū)、讀寫(xiě)分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來(lái)哪些效率或者其他方面的好處7. mysql - jdbc的問(wèn)題8. python - Scrapy存在內(nèi)存泄漏的問(wèn)題。9. Python爬蟲(chóng)如何爬取span和span中間的內(nèi)容并分別存入字典里?10. mysql - 千萬(wàn)級(jí)數(shù)據(jù)的表,添加unique約束,insert會(huì)不會(huì)很慢?
