亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從多個 URL 中提取相同的元素并保存在文件中?

如何從多個 URL 中提取相同的元素并保存在文件中?

翻過高山走不出你 2022-06-05 10:23:00
我有許多 URL 的列表,我想為其提取在每個 URL 中具有相同查詢選擇器的特定元素。例如,在 Chrome 中打開 URL“ http://www.nationalregisterofhistoricplaces.com/al/autauga/state.html ”,然后運行此命令document.querySelector("body > div:nth-child(7) > div.listheader")我在 Chrome 瀏覽器控制臺中打印了所需內容(如果我應該在另一個工具中嘗試 javascript 腳本,請告訴我是哪一個)我是 javascript 新手,我正在嘗試,我想從 URL_1 中提取 div 元素并將其保存到 out.html,然后從 URL_2 中提取 div 到 URL_N 并附加到前一個 div 下方,依此類推。到目前為止,我已經嘗試了以下代碼,但它僅在新選項卡中打開第一個 URL,并且沒有打印其 div。var urls = ["http://www.nationalregisterofhistoricplaces.com/al/autauga/state.html","http://www.nationalregisterofhistoricplaces.com/al/barbour/state.html","http://www.nationalregisterofhistoricplaces.com/ca/fresno/state.html"];for (i = 0; i < urls.length; i++) {    window.open(urls[i])    document.querySelector("body > div:nth-child(7) > div.listheader")};我的目標是合并每個 URL 的 div 并將它們保存在 out.html 中,如下所示:<!-- div from URL_1 --><div class="listheader"><img src="/nr-images/flag.gif" width="33" height="28"><div class="listname">Bell House                                                                                                              <span class="added">(added 1999 -  - #99000150)</span></div><div class="listaka">Also known as Biggs House</div><div class="listaddress">550 Upper Kingston Rd.                                                                                                  , Prattville</div></div><!-- div from URL_2 --><div class="listheader"><img src="/nr-images/flag.gif" width="33" height="28"><div class="listname">Bray-Barron House                                                                                                       <span class="added">(added 1971 -  - #71000093)</span></div><div class="listaddress">N. Eufaula Ave.                                                                                                         , Eufaula</div></div>我怎樣才能做到這一點?提前致謝。
查看完整描述

2 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

我只是想到了另一種方式。因為所有 URL 都在同一個域中,所以您實際上可以在 iframe 中打開它們,并且您可以從腳本中訪問每個 iframe 的內容??雌饋硎沁@樣的:


for (const url of urls) {

    const iframe = document.createElement('iframe')

    iframe.src = url

    iframe.onload = () => {

        console.log(iframe.contentDocument.querySelector("body > div:nth-child(7) > div.listheader"))

    }

    document.body.appendChild(iframe)

}

請注意,onload回調是異步的,因此您將以任意順序獲得輸出。此外,沒有錯誤處理(onerror為此附加回調)。


如果您有大量的 URL 需要抓取,您可能不希望像這樣同時執行所有這些操作,因為每個 iframe 就像一個單獨的瀏覽器選項卡并且占用大量資源。所以你可以分批做,或者在前一個完成后才開始下一個。


查看完整回答
反對 回復 2022-06-05
?
森欄

TA貢獻1810條經驗 獲得超5個贊

在瀏覽器控制臺中,您會遇到麻煩,因為您在那里編寫的所有 JavaScript 都將在當前頁面的上下文中運行。一旦你打開一個新頁面,你就會失去它。

您可以使用 NodeJS 來做到這一點,它是一個在瀏覽器之外運行的獨立 JavaScript 引擎。您需要編寫代碼來獲取 HTML,以及一個庫來解析和查詢它。

另一種方法可能是 NW.js,它類似于瀏覽器,但沒有沙盒。


查看完整回答
反對 回復 2022-06-05
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號