python下使用selenium怎麼才能控制瀏覽器載入某個元素?

我初學想要嘗試爬取動態數據,於是去爬京東的評論和好評數等等

http://item.jd.com/100012.htm

舉例來說,這是第一個京東沒下線的直營產品

&

&

    &

  • &全部評價&(17872)&&&

    &
  • &好評&(16616)&&&

    &
  • &中評&(856)&&&

    &
  • &差評&(400)&&&

    &
  • &有圖片的評價&(1157)&&&

    &
  • &試用報告&()&&&&

    &

裡面的數據全是載入完html在寫進去的啊

而且我如果只用chrome的driver打開,不拉到底部,不會自動載入

用執行js語句去頁面底部

,還必須設置time.sleep(2),搞得爬取時間弄得很長(我想可能還有載入圖片的原因,

所以我想問的是有沒有什麼方法

1 讓頁面移動到某個元素等等載入

2 載入等待是循環確定知道要取的數據不為空才確定載入完畢

3 用chrome每次運行還會有界面,如果我改成phantomjs,其他代碼相同,效果能不能是一樣的?

以及查了一些網頁,說是phantomjs好像很強大,這種js獲取的信息是用phantomjs有什麼其他技術更簡單獲得嗎?

謝謝大家


想指定載入某個元素,直接向伺服器發送對應的請求就行了。請求的網址和參數要抓包獲取。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: LoveNight
# @Date: 2015-12-01 12:12:05

import requests
import json
import re

url = rhttp://s.club.jd.com/productpage/p-100012-s-0-t-3-p-0.html?callback=fetchJSON_comment98vv1851

resData = requests.get(url).text
jsonStr = re.findall(rfetchJSON_comment98vv1851((.*?));, resData)[0]
data = json.loads(jsonStr)
summary = data["productCommentSummary"]
print("全部評價", summary["commentCount"], "好評", summary["goodCount"],
"中評", summary["generalCount"], "差評", summary["poorCount"],
"有圖片的評價", summary["showCount"])
print("第一條:")
first = data["comments"][0]
print("評論:", first["content"])
print("時間:", first["creationTime"])
print("購買信息", first["productSize"])
print("回復:", first["replyCount"])
print("贊:", first["usefulVoteCount"])

我一般找不到別的辦法才用selenium,這玩意太慢了。


你可能需要兩個函數

1、implicitly_wait(30)智能等待,最大30s

2、location_once_scrolled_into_view 滾動到某個元素處,也就是滾動直到這個元素出現在屏幕里


也是剛剛學習的,我大概會這樣做:

要嘗試爬取頁面數據,

若是使用selenium去打開瀏覽器模擬點擊貌似不太方便。

我通常都是先想辦法獲取到對應頁面模塊的api請求,再模擬發送請求,最後分析響應到的數據。

比如這個京東的商品評價,可以通過以下方式獲得api:

1. 在chrome中打開頁面,也打開dev tool,

頁面拉到評價區域,清除tool中的已有的request,

點擊商品評價區域的不同標籤,如:差評,

這時會capture到新的request,從頭開始一個個的找過去,

會發現:

http://club.jd.com/productpage/p-100012-s-1-t-3-p-0.html?callback=fetchJSON_comment98vv4712

這個對應的response就是要的內容。

2. 因為是get的,所以嘗試直接訪問:

http://club.jd.com/productpage/p-100012-s-1-t-3-p-0.html

發現這個就可以直接得到內容。

3. 接下來再搞清楚下url中,p-100012-s-1-t-3-p-0這一串的含義:

因為商品sku是100012,所以p-100012比較好理解。

4. 點擊商品評價區域的不同標籤,如:好評,同樣方法,找到的是:

http://club.jd.com/productpage/p-100012-s-3-t-3-p-0.html

可以看出來,好評和差評,不一樣的是s-1、s-3,

那就再點下中評,發現是:

http://club.jd.com/productpage/p-100012-s-2-t-3-p-0.html

這樣,多點點切換標籤頁,最終可以看出來:全部s-0、差評s-1、中評s-2、好評s-3、有圖片的s-4。

5. 再在中評中點擊第二頁,第三頁,最終發現:

第一頁p-0、第二頁p-1、第三頁p-2。

6. 不過,t-3那個沒找到規律,就不知道是什麼了。-_-||

7. 哦,還要分析下響應到的數據,

看看json數據,比對頁面顯示的內容,可以發現:

productCommentSummary應該是該sku評論的統計概要:

  • productCommentSummary[goodRateShow]應該是好評度,

  • productCommentSummary[commentCount]應該是全部評論數,

  • productCommentSummary[score1Count]應該是一顆星的評論數,

  • productCommentSummary[score2Count]應該是兩顆星的評論數

  • ……

comments應該是評論列表,comments[0]是第一條評論詳情:

  • comments[0][content]:評價內容

  • comments[0][creationTime]:評價時間

  • comments[0][score]:顧客滿意度

  • comments[0][usefulVoteCount]: 贊

  • comments[0][referenceTime]:購買時間

  • comments[0][replyCount]:回復

  • ……

hotCommentTagStatistics列表就是:買家印象

嗯,就這樣:知道了api,知道了url規則,知道了response格式,就可以寫個大概的腳本跑一跑,再慢慢修改到最終要的結果。

附個圖:


推薦閱讀:

python里函數作為返回值如何進行比較?
Python有哪些黑魔法?
MongoDB及可視化工具的安裝

TAG:Python | Selenium | 爬蟲計算機網路 |