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

【爬蟲(chóng)】3.4 爬取網(wǎng)站復(fù)雜數(shù)據(jù)

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

1. Web服務(wù)器網(wǎng)站

進(jìn)一步把前面的Web網(wǎng)站的mysql.html, python.html, java.html豐富其中 的內(nèi)容,并加上圖形:

mysql.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>mysql</title>
</head>
<body>
    <h3>MySQL數(shù)據(jù)庫(kù)</h3>
    <div>
        MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開(kāi)發(fā),目前屬于 Oracle 旗 下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是 最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟 件。
    </div>
    <div>
        <img src="mysql.jpg"  />
    </div>
    <a href="books.html">Home</a>
</body>
</html>

java.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>java</title>
</head>
<body>
    <h3>Java程序設(shè)計(jì)</h3>
    <div>
        Java是一門面向?qū)ο缶幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu) 點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此 Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。Java語(yǔ)言作為靜 態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚?,?許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程.
    </div>
    <div>
        <img src="java.jpg">
    </div>
    <a href="books.html">Home</a>
</body>
</html>

python.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>python</title>
</head>
<body>
    <h3>Python程序設(shè)計(jì)</h3>
    <div>
        Python (英國(guó)發(fā)音:/?pa?θ?n/ 美國(guó)發(fā)音:/?pa?θɑ?n/), 是一 種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由荷蘭人Guido van Rossum于1989年發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于1991年。
    </div>
    <div>
        <img src="python.jpg">
    </div>
    <a href="books.html">Home</a>
</body>
</html>

2. 爬取網(wǎng)站的復(fù)雜數(shù)據(jù)

服務(wù)器server.py程序還是前面3.2的,如下:

import flask
import os

app = flask.Flask(__name__)


def getFile(fileName):
    data = b""
    if os.path.exists(fileName):
        fobj = open(fileName, "rb")
        data = fobj.read()
        fobj.close()
    return data


@app.route("/")
def index():
    return getFile("books.html")


@app.route("/<section>")
def process(section):
    data = ""
    if section != "":
        data = getFile(section)
    return data


if __name__ == "__main__":
    app.run()

????????爬取網(wǎng)站中的mysql, python, java的簡(jiǎn)介與圖像。我們看到簡(jiǎn)介在網(wǎng)頁(yè)的第一個(gè)<div>中,圖像在<img>中,而且只有這3個(gè)網(wǎng)頁(yè)有這樣的特征,

設(shè)計(jì)客戶端client.py程序如下:

from bs4 import BeautifulSoup
import urllib.request


def spider(url):
    global urls
    if url not in urls:
        urls.append(url)
        try:
            data = urllib.request.urlopen(url)
            data = data.read().decode()
            soup = BeautifulSoup(data, "lxml")
            print(soup.find("h3").text)
            divs = soup.select("div")
            imgs = soup.select("img")
            # 判斷這個(gè)url頁(yè)面是否有<div>與<img>,如果有就獲取第一個(gè)<div>的文字,下載第一個(gè)<img>的圖像
            if len(divs) > 0 and len(imgs) > 0:
                print(divs[0].text)
                url = start_url + "/" + imgs[0]["src"]
                urllib.request.urlretrieve(url, "downloaded-" + imgs[0]["src"])
                print("download-", imgs[0]["src"])
            links = soup.select("a")
            for link in links:
                href = link["href"]
                url = start_url + "/" + href
                spider(url)
        except Exception as err:
            print(err)


start_url = "http://127.0.0.1:5000"
urls = []
spider(start_url)
print("The End")

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

【爬蟲(chóng)】3.4 爬取網(wǎng)站復(fù)雜數(shù)據(jù)

?程序執(zhí)行完畢后還看到下載了3個(gè)文件:

"downloaded-mysql.jpg"、 "downloadedpython.jpg"、"downloaded-java.jpg"

3. 爬取程序的改進(jìn)

(1)服務(wù)器程序

????????由于我們的web網(wǎng)站時(shí)本地的,因此下載圖像非???,而實(shí)際應(yīng)用中 Web網(wǎng)站是遠(yuǎn)程的一個(gè)服務(wù)器,由于網(wǎng)絡(luò)原因可能下載會(huì)比較慢。為了 模擬這個(gè)過(guò)程,

改進(jìn)后的服務(wù)器serverUpdate.py程序如下:

import flask
import os
import random
import time

app = flask.Flask(__name__)


def getFile(fileName):
    data = b""
    if os.path.exists(fileName):
        fobj = open(fileName, "rb")
        data = fobj.read()
        fobj.close()
        # 隨機(jī)等待1-10秒
        time.sleep(random.randint(1, 10))
    return data


@app.route("/")
def index():
    return getFile("books.html")


@app.route("/<section>")
def process(section):
    data = ""
    if section != "":
        data = getFile(section)
    return data


if __name__ == "__main__":
    app.run()

? ? ? ? 該程序在每次返回一個(gè)網(wǎng)頁(yè)或者圖像的函數(shù)getFile中都隨機(jī)等待了1- 10秒,這個(gè)過(guò)程十分類似網(wǎng)絡(luò)條件較差的情景,即訪問(wèn)任何一個(gè)網(wǎng)頁(yè)或 者圖像都有1-10秒的延遲。

(2)客戶端程序

????????從目前的程序來(lái)看這個(gè)程序在下載一個(gè)圖像時(shí)是等待的,如果這個(gè)圖像很大,那么下載時(shí)間很長(zhǎng),程序就必須一直等待,其它網(wǎng)頁(yè)就無(wú)法繼續(xù)訪問(wèn),即卡死在一個(gè)網(wǎng)頁(yè)的圖像下載處。為了避免這個(gè)問(wèn)題,一般可以對(duì)程序做以下改進(jìn):

  • 設(shè)置urllib.request下載圖像的時(shí)間,如果超過(guò)一定時(shí)間還沒(méi)有完 成下載就放棄;
  • 設(shè)置下載過(guò)程是一個(gè)與主線程不同的子線程,子線程完成下載 任務(wù),不影響主線程繼續(xù)訪問(wèn)別的網(wǎng)頁(yè)。????????

改進(jìn)后的客戶端clientUpdate.py程序如下:

from bs4 import BeautifulSoup
import urllib.request
import threading


def download(url, fileName):
    try:
        # 設(shè)置下載時(shí)間最長(zhǎng)100秒
        data = urllib.request.urlopen(url, timeout=100)
        data = data.read()
        fobj = open("download" + fileName, "wb")
        fobj.write(data)
        fobj.close()
        print("download", fileName)
    except Exception as err:
        print(err)


def spider(url):
    global urls
    if url not in urls:
        urls.append(url)
        try:
            data = urllib.request.urlopen(url)
            data = data.read().decode()
            soup = BeautifulSoup(data, "lxml")
            print(soup.find("h3").text)
            links = soup.select("a")
            divs = soup.select("div")
            imgs = soup.select("img")
            # 判斷這個(gè)url頁(yè)面是否有<div>與<img>,如果有就獲取第一個(gè)<div>的文字,下載第一個(gè)<img>的圖像
            if len(divs) > 0 and len(imgs) > 0:
                print(divs[0].text)
                url = start_url + "/" + imgs[0]["src"]
                # 啟動(dòng)一個(gè)下載線程下載圖像
                T = threading.Thread(target=download, args=(url, imgs[0]["src"]))
                T.setDaemon(False)
                T.start()
                threads.append(T)
            for link in links:
                href = link["href"]
                url = start_url + "/" + href
                spider(url)
        except Exception as err:
            print(err)


start_url = "http://127.0.0.1:5000"
urls = []
threads = []
spider(start_url)
# 等待所有線程執(zhí)行完畢
for t in threads:
    t.join()
print("The End")

執(zhí)行結(jié)果如下:

【爬蟲(chóng)】3.4 爬取網(wǎng)站復(fù)雜數(shù)據(jù)

?從結(jié)果看到訪問(wèn)java.htm網(wǎng)頁(yè)后沒(méi)有及時(shí)完成java.jpg的下載,java.jpg是在訪問(wèn) network.htm網(wǎng)頁(yè)后才完成下載的,這就是多線程的過(guò)程。


下一篇文章:3.5 實(shí)踐項(xiàng)目——爬取網(wǎng)站的圖像文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-478898.html

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

本文來(lái)自互聯(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)文章

  • 【爬蟲(chóng)】4.5 實(shí)踐項(xiàng)目——爬取當(dāng)當(dāng)網(wǎng)站圖書(shū)數(shù)據(jù)

    【爬蟲(chóng)】4.5 實(shí)踐項(xiàng)目——爬取當(dāng)當(dāng)網(wǎng)站圖書(shū)數(shù)據(jù)

    目錄 1. 網(wǎng)站圖書(shū)數(shù)據(jù)分析 2. 網(wǎng)站圖書(shū)數(shù)據(jù)提取 3. 網(wǎng)站圖書(shū)數(shù)據(jù)爬取 (1)創(chuàng)建 MySQL 數(shù)據(jù)庫(kù) (2)創(chuàng)建 scrapy 項(xiàng)目 (3)編寫(xiě) items.py 中的數(shù)據(jù)項(xiàng)目類 (4)編寫(xiě) pipelines_1.py 中的數(shù)據(jù)處理類 (5)編寫(xiě) pipelines_2.py 中的數(shù)據(jù)處理類 (6)編寫(xiě) Scrapy 的配置文件 (7)編寫(xiě) Scrapy 爬蟲(chóng)程

    2024年02月07日
    瀏覽(18)
  • Python爬蟲(chóng):實(shí)現(xiàn)爬取、下載網(wǎng)站數(shù)據(jù)的幾種方法

    使用腳本進(jìn)行下載的需求很常見(jiàn),可以是常規(guī)文件、web頁(yè)面、Amazon S3和其他資源。Python 提供了很多模塊從 web 下載文件。下面介紹 requests 模塊是模仿網(wǎng)頁(yè)請(qǐng)求的形式從一個(gè)URL下載文件 示例代碼: 安裝 wget 庫(kù) 示例代碼 有些 URL 會(huì)被重定向到另一個(gè) URL,后者是真正的下載鏈接

    2024年02月05日
    瀏覽(96)
  • server win搭建apache網(wǎng)站服務(wù)器+php網(wǎng)站+MY SQL數(shù)據(jù)庫(kù)調(diào)用電子閱覽室

    server win搭建apache網(wǎng)站服務(wù)器+php網(wǎng)站+MY SQL數(shù)據(jù)庫(kù)調(diào)用電子閱覽室

    1、使用開(kāi)源的免費(fèi)數(shù)據(jù)庫(kù)Mysql; 2、自己建網(wǎng)站的發(fā)布; 3、使用php代碼建網(wǎng)站; 4、使用windows server作為服務(wù)器; 5、使用apache作為網(wǎng)站服務(wù)器。 apache下載地址一:Apache VS17 binaries and modules download apache下載地址二:Apche下載 1、https://httpd.apache.org 2、點(diǎn)Files for Microsoft Windows 3、點(diǎn)

    2024年04月10日
    瀏覽(30)
  • 網(wǎng)站架構(gòu)演變、LNP+Mariadb數(shù)據(jù)庫(kù)分離、Web服務(wù)器集群、Keepalived高可用

    目錄 day02 深入理解程序的數(shù)據(jù)存儲(chǔ) 驗(yàn)證 配置NFS服務(wù)器 配置代理服務(wù)器 配置名稱解析 程序?qū)⑽淖謹(jǐn)?shù)據(jù)保存到數(shù)據(jù)庫(kù)中 程序?qū)⒎俏淖謹(jǐn)?shù)據(jù)(如圖片、視頻、壓縮包等)保存到相應(yīng)的文件目錄中 驗(yàn)證 發(fā)一篇文章,文章內(nèi)容包含文字和圖片 在數(shù)據(jù)庫(kù)中查看文字?jǐn)?shù)據(jù)。在最新的一

    2024年02月20日
    瀏覽(25)
  • 服務(wù)器主機(jī):復(fù)雜理論的視角與SEO策略

    本文分享自天翼云開(kāi)發(fā)者社區(qū)《服務(wù)器主機(jī):復(fù)雜理論的視角與SEO策略》,作者:不知不覺(jué) 在數(shù)字世界的演變中,服務(wù)器主機(jī)在信息存儲(chǔ)和數(shù)據(jù)處理方面發(fā)揮著核心作用。本文將帶你重新認(rèn)識(shí)服務(wù)器主機(jī)的價(jià)值,并通過(guò)復(fù)雜理論解釋其重要性和必要性,同時(shí)結(jié)合SEO布局來(lái)

    2024年02月08日
    瀏覽(13)
  • 使用Python搭建代理服務(wù)器- 爬蟲(chóng)代理服務(wù)器詳細(xì)指南

    使用Python搭建代理服務(wù)器- 爬蟲(chóng)代理服務(wù)器詳細(xì)指南

    搭建一個(gè)Python爬蟲(chóng)代理服務(wù)器可以讓你更方便地管理和使用代理IP。下面是一個(gè)詳細(xì)的教程來(lái)幫助你搭建一個(gè)簡(jiǎn)單的Python爬蟲(chóng)代理服務(wù)器: 1. 首先,確保你已經(jīng)安裝了Python。你可以在官方網(wǎng)站(https://www.python.org/)下載并安裝最新版本的Python。 2. 安裝所需的Python庫(kù)。打開(kāi)終端或

    2024年02月15日
    瀏覽(27)
  • 爬蟲(chóng)機(jī)試題-爬取新聞網(wǎng)站

    爬蟲(chóng)機(jī)試題-爬取新聞網(wǎng)站

    之前投簡(jiǎn)歷時(shí)遇到了這樣的一個(gè)筆試。本以為會(huì)是數(shù)據(jù)結(jié)構(gòu)算法之類的沒(méi)想到直接發(fā)了一個(gè)word直接提需求,感覺(jué)挺有意思就寫(xiě)了這篇文章,感興趣的朋友可以看看。 通過(guò)分析頁(yè)面結(jié)構(gòu)我們得以知道,這個(gè)頁(yè)面本身沒(méi)有新聞信息,是由js代碼執(zhí)行后才將信息插入到html中的,因

    2024年04月25日
    瀏覽(21)
  • 【爬蟲(chóng)】python爬蟲(chóng)爬取網(wǎng)站頁(yè)面(基礎(chǔ)講解)

    【爬蟲(chóng)】python爬蟲(chóng)爬取網(wǎng)站頁(yè)面(基礎(chǔ)講解)

    ??博__主??:米碼收割機(jī) ??技__能??:C++/Python語(yǔ)言 ??公眾號(hào)??:測(cè)試開(kāi)發(fā)自動(dòng)化【獲取源碼+商業(yè)合作】 ??榮__譽(yù)??:阿里云博客專家博主、51CTO技術(shù)博主 ??專__注??:專注主流機(jī)器人、人工智能等相關(guān)領(lǐng)域的開(kāi)發(fā)、測(cè)試技術(shù)。 1. 導(dǎo)入必要的庫(kù) requests 庫(kù)用于發(fā)送HTTP請(qǐng)

    2024年02月08日
    瀏覽(29)
  • 信息收集 - 網(wǎng)站服務(wù)器

    信息收集 - 網(wǎng)站服務(wù)器

    操作系統(tǒng) 區(qū)分大小寫(xiě): 如果修改首頁(yè)或其他頁(yè)面的大小寫(xiě)后,網(wǎng)站返回一個(gè)錯(cuò)誤頁(yè)面,例如報(bào)錯(cuò) \\\"404 Not Found\\\" 或類似的錯(cuò)誤,這可能意味著網(wǎng)站運(yùn)行在 Linux 或類 Unix 操作系統(tǒng)上。這是因?yàn)榇蠖鄶?shù) Linux 系統(tǒng)是區(qū)分大小寫(xiě)的 。 如果修改大小寫(xiě)后,網(wǎng)站頁(yè)面正常顯示,這可能意

    2024年02月21日
    瀏覽(23)
  • 服務(wù)器網(wǎng)站搭建(一)

    服務(wù)器網(wǎng)站搭建(一)

    一臺(tái)服務(wù)器,我買的騰訊云新加坡的。根據(jù)需求選擇配置。 重置密碼: 自己設(shè)置的密碼要記住: 登錄: 安裝寶塔(centos系統(tǒng)),參考官網(wǎng): 執(zhí)行命令: 如下,遇到選擇就輸入y回車: 最后輸出如下,請(qǐng)復(fù)制保存到一個(gè)文檔,下次登錄直接復(fù)制賬號(hào)密碼即可: 回到服務(wù)器,打

    2024年02月08日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包