日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
python3selenium+fiddler爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)

一、 分析:
抓取動(dòng)態(tài)頁(yè)面js加載的人民日?qǐng)?bào)里面的新聞詳情 https://wap.peopleapp.com/news/1
先打開,然后查看網(wǎng)頁(yè)源碼,發(fā)現(xiàn)是一堆js,并沒(méi)有具體的每個(gè)新聞的url詳情,于是第一反應(yīng),肯定是js動(dòng)態(tài)加載拼接的url。然后接著按f12 查看,就看url,發(fā)現(xiàn)出來(lái)了好多url。
然后點(diǎn)擊具體的某一個(gè)新聞詳情頁(yè)面,查看url,把這個(gè)url的 后面兩個(gè)數(shù)字其中一個(gè)拿到訪問(wèn)主頁(yè)的時(shí)候,f12 抓包結(jié)果里面去查找,發(fā)現(xiàn)一個(gè)url,點(diǎn)擊這個(gè)url,發(fā)現(xiàn)preview里面有好多數(shù)據(jù),我第一反應(yīng),肯定是每個(gè)新聞數(shù)據(jù)了??吹竭@些數(shù)據(jù)里面有兩個(gè)ID,聯(lián)想到剛剛訪問(wèn)具體新聞詳情頁(yè)面也有兩個(gè)數(shù)字,肯定,具體新聞頁(yè)面肯定是 https://wap.peopleapp.com/article 加上兩個(gè)ID形成的。于是試了一下拼接一個(gè)url訪問(wèn),果然是。于是乎只要抓到這個(gè)url,就能獲取到每個(gè)新聞的詳情頁(yè)了。
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
但這個(gè)抓到的url只加載了10條,我于是想改改里面的 show_num值,發(fā)現(xiàn)請(qǐng)求失敗,仔細(xì)看這個(gè)url,有個(gè)securitykey 這個(gè)應(yīng)該是js根據(jù)具體算法算出來(lái)的,看了一下那個(gè)拼接成url的js,發(fā)現(xiàn)看著有點(diǎn)頭大,算了,只要我能一直抓這類url就行了
https://app.peopleapp.com/WapApi/610/HomeApi/getContentList?category_id=1&refresh_time=0&show_num=10&page=1&securitykey=ee9bad0d112f882403f5b9f4dc2266a0&interface_code=610

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、新縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

發(fā)現(xiàn)只要我頁(yè)面往下翻,就會(huì)新加載一條,于是我只要能解決兩個(gè)問(wèn)題:
1.往下翻頁(yè)的問(wèn)題,讓這個(gè)數(shù)據(jù)url給加載出來(lái)
2.把這個(gè)url抓取到日志里面利用腳本訪問(wèn),就能獲取到數(shù)據(jù)了

查看了網(wǎng)上一些文檔,最后決定用 python 的 selenium 這個(gè)模塊,它是程序打開本地的瀏覽器進(jìn)行操作,它里面有個(gè)方法execute_script('window.scrollTo(0, document.body.scrollHeight)') 就是下翻頁(yè)的,利用這個(gè)就能一直把后面的 那個(gè)數(shù)據(jù)url給加載出來(lái)了。
第二個(gè)就是解決把這個(gè)數(shù)據(jù)url給抓出來(lái),我就用fiddler來(lái)進(jìn)行抓包(這里抓包工具,根據(jù)你們自己的選擇,推薦一個(gè):mitmproxy,這也是抓包神器,可以定制化抓包,比較方便,具體操作請(qǐng)百度、google)
我這里用fiddler,經(jīng)常用這個(gè),用著習(xí)慣。

二、使用fiddler進(jìn)行抓包寫入日志
1.fiddler 導(dǎo)出證書到瀏覽器
1.1.打開 tools-options
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)

1.2.點(diǎn)擊https-> actions -> export root certificate to desktop
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
1.3.打開瀏覽器(以火狐為例)

python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
1.4.直接搜索”證書”,點(diǎn)擊查看證書
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)

1.5.點(diǎn)擊導(dǎo)入—選擇剛才從fiddler導(dǎo)出的證書即可
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)

1.6.設(shè)置fiddler代理
打開 tools-> options -> connections
設(shè)置端口,默認(rèn)8888
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)

1.7.設(shè)置火狐瀏覽器去連接fiddler代理
找到網(wǎng)絡(luò)設(shè)置,打開后,點(diǎn)擊手動(dòng)代理配置,填寫ip,端口,勾選”為所有協(xié)議使用相同的代理服務(wù)器
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
最后找一個(gè)https驗(yàn)證訪問(wèn)即可

fiddler 過(guò)濾(對(duì)動(dòng)態(tài)抓取,可不設(shè)置,擴(kuò)展學(xué)習(xí))
參考:
https://www.cnblogs.com/sjl179947253/p/7627250.html

1.8. 打開 FiddlerScript,查找OnBeforeResponse 方法寫入腳本
if (oSession.HostnameIs("app.peopleapp.com") && oSession.uriContains("getContentList")){
var filename = "F:/logs/fiddler.log";
var curDate = new Date();
var logContent = "https://app.peopleapp.com" + oSession.PathAndQuery + "\r\n";
var sw : System.IO.StreamWriter;
if (System.IO.File.Exists(filename)){
sw = System.IO.File.AppendText(filename);
sw.Write(logContent);
}
else{
sw = System.IO.File.CreateText(filename);
sw.Write(logContent);
}
sw.Close();
sw.Dispose();
}

python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
python3 selenium + fiddler 爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)

三、 python 腳本讀取fiddler日志,對(duì)最新的url進(jìn)行獲取內(nèi)容,提取id拼接成新的新聞詳情url

  1. 準(zhǔn)備工作:
    我這里用的是python3 先pip3 install selenium 安裝模塊

然后下載瀏覽器驅(qū)動(dòng),這下面有兩個(gè),google根據(jù)對(duì)應(yīng)瀏覽器版本下載,firefox根據(jù)系統(tǒng)類型下載即可
#google 瀏覽器驅(qū)動(dòng)下載地址 http://npm.taobao.org/mirrors/chromedriver/
#firefox 瀏覽器驅(qū)動(dòng)下載地址 https://github.com/mozilla/geckodriver/releases/

  1. 最后貼上腳本
  2. from selenium import webdriver
    import time
    import requests as r
    import re
    import json

#獲取具體的新聞url,并寫入文本
def get_news_url(search_time):
#打開日志文件
file = open("F:/logs/fiddler.log","r")
#最新一條url
file_msg = file.readlines()
#判斷fiddler里面是否有url內(nèi)容,若讀取的內(nèi)容列表等于0,則表示無(wú)內(nèi)容
if len(file_msg) == 0:
return "continue"
#讀取數(shù)組內(nèi)容最后一位,即為最新的url
url = file_msg[-1].strip("\n")
print(url.strip("\n"))
file.close()
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Cookie": "acw_tc=2760826c15644797526864019e11da63f32bf5b082a7da38667809b95819f3; SERVERID=f858eac9d6463aa503ba25948984ceb0|1564566072|1564566072",
"Host": "app.peopleapp.com",
"Pragma": "no-cache",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
#獲取抓包的最新url數(shù)據(jù)
html = r.get(url,headers=headers).text
#轉(zhuǎn)換成json
json_html = json.loads(html)
#獲取json的data數(shù)據(jù)
news_data_li = json_html["data"]
#寫入文件
news_file = open("F:/logs/news.log","a")
#循環(huán)data數(shù)據(jù),提取兩個(gè)id,拼接成url,寫入日志文件(這里可以根據(jù)實(shí)際情況,如對(duì)拼接成的url進(jìn)行判斷 分成具體的每個(gè)月進(jìn)行寫入日志等)
for news in news_data_li:
id = news["id"]
articleid = news["articleid"]
news_url = "https://wap.peopleapp.com/article/" + id + "/" + articleid
print(news_url)
news_file.write(news_url + "\n")
news_file.close()
#這一步只是用來(lái)控制的獲取數(shù)據(jù)的時(shí)間,若傳入的時(shí)間在數(shù)據(jù)內(nèi),則返回stop,停止,比如 只搜索 201904到現(xiàn)在的,就傳入201904即可,這里根據(jù)具體需求改改就行
search_result = re.search(search_time,html)
if search_result is None:
return "continue"
else:
return "stop"

#爬取動(dòng)態(tài)頁(yè)面url
#google 瀏覽器驅(qū)動(dòng)下載地址 http://npm.taobao.org/mirrors/chromedriver/
#firefox 瀏覽器驅(qū)動(dòng)下載地址 https://github.com/mozilla/geckodriver/releases/
#browser = webdriver.Chrome(executable_path="D:\python37\chromedriver_win32\chromedriver.exe")
#加載具體的瀏覽器驅(qū)動(dòng)
browser = webdriver.Firefox(executable_path="D:\python37\geckodriver-v0.24.0-win64\geckodriver.exe")
#設(shè)置瀏覽器需要訪問(wèn)的url
browser.get("https://wap.peopleapp.com/news/1")
#循環(huán)操作瀏覽器往下翻頁(yè)
while True:
#翻頁(yè)腳本
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
#翻頁(yè)后,暫停1秒
time.sleep(1)
#調(diào)用獲取具體詳情新聞頁(yè)的url
results = get_news_url("201907")
#判斷結(jié)果是否停止
if results == "stop":
browser.quit()
break


當(dāng)前標(biāo)題:python3selenium+fiddler爬取動(dòng)態(tài)js頁(yè)面數(shù)據(jù)
文章地址:http://www.dlmjj.cn/article/pocope.html