python下使用selenium怎麼才能控制瀏覽器載入某個元素?
我初學想要嘗試爬取動態數據,於是去爬京東的評論和好評數等等
http://item.jd.com/100012.htm舉例來說,這是第一個京東沒下線的直營產品&
&&
&
- &全部評價&(17872)&&&
&- &好評&(16616)&&&
&- &中評&(856)&&&
&- &差評&(400)&&&
&- &有圖片的評價&(1157)&&&
& &
裡面的數據全是載入完html在寫進去的啊
而且我如果只用chrome的driver打開,不拉到底部,不會自動載入用執行js語句去頁面底部,還必須設置time.sleep(2),搞得爬取時間弄得很長(我想可能還有載入圖片的原因,想指定載入某個元素,直接向伺服器發送對應的請求就行了。請求的網址和參數要抓包獲取。
#!/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)智能等待,最大30s2、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格式,就可以寫個大概的腳本跑一跑,再慢慢修改到最終要的結果。
附個圖:推薦閱讀: