国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【爬蟲】5.5 Selenium 爬取Ajax網(wǎng)頁數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了【爬蟲】5.5 Selenium 爬取Ajax網(wǎng)頁數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄?

AJAX 簡介

任務(wù)目標(biāo)

創(chuàng)建Ajax網(wǎng)站

創(chuàng)建服務(wù)器程序

編寫爬蟲程序


AJAX 簡介

????????AJAX(Asynchronous JavaScript And XML,異步 JavaScript 及 XML)

  1. Asynchronous 一種創(chuàng)建交互式、快速動(dòng)態(tài)網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)
  2. 通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,無需重新加載整個(gè)網(wǎng)頁的情況下,能夠異步更新部分網(wǎng)頁的技術(shù)。
  3. AJAX是一種新的技術(shù)組合,即基于因特網(wǎng)標(biāo)準(zhǔn),組合以下技術(shù):
  • XMLHttpRequest 對(duì)象(與服務(wù)器異步交互數(shù)據(jù))
  • JavaScript/DOM(顯示/取回信息)
  • CSS(設(shè)置數(shù)據(jù)的樣式)
  • XML(常用作數(shù)據(jù)傳輸?shù)母袷剑?/li>

【爬蟲】5.5 Selenium 爬取Ajax網(wǎng)頁數(shù)據(jù),python,爬蟲,爬蟲,selenium,ajax


任務(wù)目標(biāo)

  1. 現(xiàn)在的網(wǎng)頁中大量使用了Ajax技術(shù),通過JavaScript在客戶端向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器返回?cái)?shù)據(jù)給客戶端,客戶端再把數(shù)據(jù)展現(xiàn)出來,這樣做可以減少網(wǎng)頁的閃動(dòng), 讓用戶有更好的體驗(yàn)。
  2. 我們先設(shè)計(jì)一個(gè)這樣的網(wǎng)頁,然后使用 Selenium 編寫爬蟲程序爬取網(wǎng)頁的數(shù)據(jù)。

創(chuàng)建Ajax網(wǎng)站

phone.html 如下:

注:phone.html 文件要位于?templates?這個(gè)目錄下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body onload="init()">
<div>選擇品牌<select id="marks" onchange="display()"></select></div>
<div id="phones"></div>
</body>
<script>
    function init() {
        var marks = new Array("華為", "蘋果", "三星");
        var selm = document.getElementById("marks");
        for (var i = 0; i < marks.length; i++) {
            selm.options.add(new Option(marks[i], marks[i]));
        }
        selm.selectedIndex = 0;
        display();
    }

    function display() {
        try {
            var http = new XMLHttpRequest();
            var selm = document.getElementById("marks");
            var m = selm.options[selm.selectedIndex].text;
            http.open("get", "/phones?mark=" + m, false);
            http.send(null);
            msg = http.responseText; //傳遞參數(shù),一般post方法使用,get不傳參數(shù)
            obj = eval("(" + msg + ")");  //eval(”(執(zhí)行的內(nèi)容)”);加上圓括號(hào)的目的是迫使eval函數(shù)在運(yùn)行JavaScript代碼的時(shí)候強(qiáng)制將括號(hào)內(nèi)的表達(dá)式轉(zhuǎn)化為JavaScript對(duì)象。
            // JS中將JSON的字符串解析成JSON數(shù)據(jù)格式
            s = "<table width='200' border='1'><tr><td>型號(hào)</td><td>價(jià)格</td></tr>"
            for (var i = 0; i < obj.phones.length; i++) {
                s = s + "<tr><td>" + obj.phones[i].model + "</td><td>" + obj.phones[i].price + "</td></tr>";
            }
            s = s + "</table>";
            document.getElementById("phones").innerHTML = s;
        } catch (e) {
            alert(e);
        }
    }
</script>
</html>

創(chuàng)建服務(wù)器程序

服務(wù)器server.py程序如下:

import flask
import json

app = flask.Flask(__name__)


@app.route("/")
def index():
    return flask.render_template("phone.html")


@app.route("/phones")
def getPhones():
    mark = flask.request.values.get("mark")
    phones = []
    if mark == "華為":
        phones.append({"model": "P9", "mark": "華為", "price": 3800})
        phones.append({"model": "P10", "mark": "華為", "price": 4000})
    elif mark == "蘋果":
        phones.append({"model": "iPhone5", "mark": "蘋果", "price": 5800})
        phones.append({"model": "iPhone6", "mark": "蘋果", "price": 6800})
    elif mark == "三星":
        phones.append({"model": "Galaxy A9", "price": 2800})
    s = json.dumps({"phones": phones})  # python對(duì)象轉(zhuǎn)化為json字符串
    return s


app.run()

網(wǎng)站結(jié)果如下:
?

【爬蟲】5.5 Selenium 爬取Ajax網(wǎng)頁數(shù)據(jù),python,爬蟲,爬蟲,selenium,ajax


編寫爬蟲程序

(1) 創(chuàng)建一個(gè)瀏覽器對(duì)象driver,使用這個(gè)driver對(duì)象模擬瀏覽器。

(2) 訪問http://127.0.0.1:5000網(wǎng)站,爬取第一個(gè)頁面的手機(jī)數(shù)據(jù)。

(3) 從第一個(gè)頁面中獲取<select>中所有的選擇項(xiàng)目options。

(4) 循環(huán)options中的每個(gè)option,并模擬這個(gè)option的click點(diǎn)擊動(dòng)作,觸發(fā) onchange

爬蟲程序 WebScraper.py 如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time


def spider(index):
    trs = driver.find_elements(By.TAG_NAME, "tr")
    for i in range(1, len(trs)):  # 從第二行開始查找和提取
        # print(i)
        tds = trs[i].find_elements(By.TAG_NAME, "td")
        model = tds[0].text
        price = tds[1].text
        print("%-16s%-16s" % (model, price))

    select = driver.find_element(By.ID, "marks")
    options = select.find_elements(By.TAG_NAME, "option")
    if index < len(options) - 1:
        index += 1
        options[index].click()
        time.sleep(3)
        spider(index)


chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome()
driver.get("http://127.0.0.1:5000")

spider(0)  # 從option=0開始

driver.close()

運(yùn)行結(jié)果:

【爬蟲】5.5 Selenium 爬取Ajax網(wǎng)頁數(shù)據(jù),python,爬蟲,爬蟲,selenium,ajax


下一篇文章:5.6 Selenium等待HTML元素文章來源地址http://www.zghlxwxcb.cn/news/detail-683052.html

到了這里,關(guān)于【爬蟲】5.5 Selenium 爬取Ajax網(wǎng)頁數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python實(shí)戰(zhàn):用Selenium爬取網(wǎng)頁數(shù)據(jù)

    網(wǎng)絡(luò)爬蟲是Python編程中一個(gè)非常有用的技巧,它可以讓您自動(dòng)獲取網(wǎng)頁上的數(shù)據(jù)。在本文中,我們將介紹如何使用Selenium庫來爬取網(wǎng)頁數(shù)據(jù),特別是那些需要模擬用戶交互的動(dòng)態(tài)網(wǎng)頁。 Selenium是一個(gè)自動(dòng)化測(cè)試工具,它可以模擬用戶在瀏覽器中的操作,比如點(diǎn)擊按鈕、填寫表

    2024年02月06日
    瀏覽(42)
  • 華納云:Python中如何使用Selenium爬取網(wǎng)頁數(shù)據(jù)

    這篇文章主要介紹“Python中如何使用Selenium爬取網(wǎng)頁數(shù)據(jù)”,在日常操作中,相信很多人在Python中如何使用Selenium爬取網(wǎng)頁數(shù)據(jù)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Python中如何使用Selenium爬取網(wǎng)頁數(shù)據(jù)”的疑惑有所幫助!接下

    2024年02月07日
    瀏覽(27)
  • Python爬蟲實(shí)戰(zhàn):selenium爬取電商平臺(tái)商品數(shù)據(jù)(1)

    Python爬蟲實(shí)戰(zhàn):selenium爬取電商平臺(tái)商品數(shù)據(jù)(1)

    def index_page(page): “”\\\" 抓取索引頁 :param page: 頁碼 “”\\\" print(‘正在爬取第’, str(page), ‘頁數(shù)據(jù)’) try: url = ‘https://search.jd.com/Search?keyword=iPhoneev=exbrand_Apple’ driver.get(url) if page 1: input = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/input’) button = driver.find_element_by_xpath(‘

    2024年04月28日
    瀏覽(39)
  • 【Python爬蟲】基于selenium庫爬取京東商品數(shù)據(jù)——以“七夕”為例

    【Python爬蟲】基于selenium庫爬取京東商品數(shù)據(jù)——以“七夕”為例

    小白學(xué)爬蟲,費(fèi)了一番功夫終于成功了哈哈!本文將結(jié)合本人踩雷經(jīng)歷,分享給各位學(xué)友~ 用寫入方式打開名為data的csv文件,并確定將要提取的五項(xiàng)數(shù)據(jù)。 上面第一行代碼值得一提,driver =? webdriver.Edge()括號(hào)內(nèi)為Edge瀏覽器驅(qū)動(dòng)程序地址,需要在Edge瀏覽器設(shè)置中查找Edge瀏覽器

    2024年02月06日
    瀏覽(27)
  • 爬蟲入門指南(4): 使用Selenium和API爬取動(dòng)態(tài)網(wǎng)頁的最佳方法

    爬蟲入門指南(4): 使用Selenium和API爬取動(dòng)態(tài)網(wǎng)頁的最佳方法

    隨著互聯(lián)網(wǎng)的發(fā)展,許多網(wǎng)站開始采用動(dòng)態(tài)網(wǎng)頁來呈現(xiàn)內(nèi)容。與傳統(tǒng)的靜態(tài)網(wǎng)頁不同,動(dòng)態(tài)網(wǎng)頁使用JavaScript等腳本技術(shù)來實(shí)現(xiàn)內(nèi)容的動(dòng)態(tài)加載和更新。這給網(wǎng)頁爬取帶來了一定的挑戰(zhàn),因?yàn)閭鹘y(tǒng)的爬蟲工具往往只能獲取靜態(tài)網(wǎng)頁的內(nèi)容。本文將介紹如何使用Selenium和API來實(shí)現(xiàn)

    2024年02月11日
    瀏覽(35)
  • Python爬蟲入門:使用selenium庫,webdriver庫模擬瀏覽器爬蟲,模擬用戶爬蟲,爬取網(wǎng)站內(nèi)文章數(shù)據(jù),循環(huán)爬取網(wǎng)站全部數(shù)據(jù)。

    Python爬蟲入門:使用selenium庫,webdriver庫模擬瀏覽器爬蟲,模擬用戶爬蟲,爬取網(wǎng)站內(nèi)文章數(shù)據(jù),循環(huán)爬取網(wǎng)站全部數(shù)據(jù)。

    *嚴(yán)正聲明:本文僅限于技術(shù)討論與分享,嚴(yán)禁用于非法途徑。 目錄 準(zhǔn)備工具: 思路: 具體操作: 調(diào)用需要的庫: 啟動(dòng)瀏覽器驅(qū)動(dòng): 代碼主體: ?完整代碼(解析注釋): Python環(huán)境; 安裝selenium庫; Python編輯器; 待爬取的網(wǎng)站; 安裝好的瀏覽器; 與瀏覽器版本相對(duì)應(yīng)的

    2023年04月24日
    瀏覽(103)
  • Python爬蟲——Selenium在獲取網(wǎng)頁數(shù)據(jù)方面的使用

    Python爬蟲——Selenium在獲取網(wǎng)頁數(shù)據(jù)方面的使用

    目錄 一、Selenium (一)引入 ?(二)啟動(dòng)瀏覽器 二、操作 (一)點(diǎn)擊 (二)輸入 三、數(shù)據(jù)獲取 四、特點(diǎn) 五、抓取拉鉤實(shí)例 六、其他操作 (一)窗口切換 代碼 (二)操作下拉列表/無頭瀏覽器 代碼 ????????一個(gè)電影票房的網(wǎng)站里,響應(yīng)數(shù)據(jù)是一串完全看不懂的字符串

    2024年02月07日
    瀏覽(25)
  • Python爬蟲Selenium手動(dòng)接管Edge爬取裁判文書網(wǎng)“環(huán)境污染”數(shù)據(jù)(Mac環(huán)境)

    Python爬蟲Selenium手動(dòng)接管Edge爬取裁判文書網(wǎng)“環(huán)境污染”數(shù)據(jù)(Mac環(huán)境)

    目標(biāo)數(shù)據(jù):爬取從2007年到2022年,各地級(jí)市中級(jí)法院歷年關(guān)于“環(huán)境污染”的裁判文書數(shù)量。 由于裁判文書網(wǎng)需要登錄,Selenium手動(dòng)接管爬取可避免頻繁登錄造成的封號(hào)風(fēng)險(xiǎn)。 Selenium如何手動(dòng)接管Edge瀏覽器: 1、打開終端,將命令 /Applications/Microsoft Edge.app/Contents/MacOS/Microsof

    2023年04月09日
    瀏覽(24)
  • python基于Selenium方法爬取網(wǎng)頁圖片

    python基于Selenium方法爬取網(wǎng)頁圖片

    selenium是一個(gè)用于web應(yīng)用程序的自動(dòng)化測(cè)試工具,通過Selenium可以寫出自動(dòng)化程序,擬人在瀏覽器對(duì)網(wǎng)頁進(jìn)行操作。selenium可以編寫出自動(dòng)化程序,簡化手動(dòng)保存的部分。 requests庫可以向第三方發(fā)送http請(qǐng)求,是一個(gè)用于網(wǎng)絡(luò)請(qǐng)求的模塊,通常以GET方式請(qǐng)求特定資源,請(qǐng)求中不應(yīng)

    2024年02月03日
    瀏覽(26)
  • Python使用Selenium Webdriver爬取網(wǎng)頁所有內(nèi)容

    Python使用Selenium Webdriver爬取網(wǎng)頁所有內(nèi)容

    有時(shí)候,我們?cè)谟胾rllib或者requests庫抓取頁面時(shí),得到的html源代碼和瀏覽器中看到的不一樣。這將是我們面臨的一個(gè)非常常見的問題?,F(xiàn)在網(wǎng)頁越來越多地采用Ajax、前端模塊化工具來構(gòu)建,整個(gè)網(wǎng)頁可能都是由JavaScript渲染出來的,也就是說原始的HTML代碼可能就是一個(gè)空殼,

    2023年04月08日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包