亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

抓取網(wǎng)頁(yè)生成電子書(shū)

抓取網(wǎng)頁(yè)生成電子書(shū)

抓取網(wǎng)頁(yè)生成電子書(shū)( AI社區搭建出所謂語(yǔ)言模型的前提是學(xué)習數據的原因)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-04-20 10:27 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
AI社區搭建出所謂語(yǔ)言模型的前提是學(xué)習數據的原因)
  
  由大數據文摘出品
  合輯:非、倪妮、什錦甜、錢(qián)天培
  人工智能未來(lái)的一個(gè)主要應用將是構建可以從數據中學(xué)習然后生成原創(chuàng )內容的網(wǎng)絡(luò )。這個(gè)思想已經(jīng)在自然語(yǔ)言處理(NLP)領(lǐng)域得到了充分的應用,這也是為什么AI社區可以構建所謂的語(yǔ)言模型:語(yǔ)言模型的前提是學(xué)習文章@中的句子結構> 段落,從而生成新的內容。
  在這個(gè)文章@>我想嘗試生成類(lèi)似于非常流行的加拿大說(shuō)唱歌手德雷克(又名#6god)風(fēng)格的說(shuō)唱歌詞,一定很有趣。
  另外,我也想分享一下通用的機器學(xué)習項目流水線(xiàn),因為我發(fā)現很多同學(xué)想做一些小項目,但是不知道從哪里開(kāi)始。
  獲取數據
  首先,我們開(kāi)始采集 Drake 的音樂(lè )庫。為了節省時(shí)間,我寫(xiě)了一個(gè)爬蟲(chóng)來(lái)抓取網(wǎng)絡(luò )上的歌詞。
  import urllib.request as urllib2
from bs4 import BeautifulSoup
import pandas as pd
import re
from unidecode import unidecode
quote_page = 'http://metrolyrics.com/{}-lyrics-drake.html'
filename = 'drake-songs.csv'
songs = pd.read_csv(filename)
for index, row in songs.iterrows():
page = urllib2.urlopen(quote_page.format(row['song']))
soup = BeautifulSoup(page, 'html.parser')
verses = soup.find_all('p', attrs={'class': 'verse'})
lyrics = ''
for verse in verses:
text = verse.text.strip()
text = re.sub(r"\[.*\]\n", "", unidecode(text))
if lyrics == '':
lyrics = lyrics + text.replace('\n', '|-|')
else:
lyrics = lyrics + '|-|' + text.replace('\n', '|-|')
songs.at[index, 'lyrics'] = lyrics
print('saving {}'.format(row['song']))
songs.head()
print('writing to .csv')
songs.to_csv(filename, sep=',', encoding='utf-8')
  我使用了一個(gè)著(zhù)名的 Python 包 BeautifulSoup 來(lái)抓取網(wǎng)頁(yè)。我使用了 Justin Yek 的教程,一個(gè)很棒的人,在五分鐘內學(xué)會(huì )了如何使用它。說(shuō)明一下,在上面的代碼中,我在循環(huán)中使用了歌曲的數據格式,因為我提前定義了我想要獲取的歌曲。
  教程:
  
  所有歌詞都存儲在DataFrame中
  運行爬蟲(chóng)后,我得到了一個(gè)csv文件,將歌詞存儲在一個(gè)合適的結構中,接下來(lái)就是對數據進(jìn)行預處理并構建模型。
  型號介紹
  現在讓我們看看模型是如何生成文本的。這部分理解很重要,因為這是真正的干貨。我將從模型設計和生成歌詞模型中的關(guān)鍵組件開(kāi)始,然后我們可以直接進(jìn)入實(shí)現階段。
  構建語(yǔ)言模型主要有兩種方式:
  1.字符級模型,
  2.詞級模型。
  兩者的主要區別在于模型的輸入和輸出。接下來(lái),我將解釋這兩個(gè)模型是如何工作的。
  字符級模型
  在字符級模型中,輸入是一個(gè)字符序列種子(seed),模型負責預測下一個(gè)字符,然后使用種子+new_char組合生成下一個(gè)字符,以此類(lèi)推。請注意,由于我們應該保持每個(gè)輸入的長(cháng)度相同,我們實(shí)際上是在輸入的每次迭代中刪除一個(gè)字符。我們可以看一個(gè)簡(jiǎn)單直觀(guān)的例子:
  
  字符級模型生成單詞的迭代過(guò)程
  在每次迭代中,模型根據給定的種子字符預測下一個(gè)最有可能生成的字符,或者使用條件概率找到概率 P(new_char|seed) 的最大值,其中 new_char 是一個(gè)字母表。
  在這個(gè)例子中,字符表是指所有英文字母和空格的集合。 (注意,字母表可以收錄不同的字母,具體取決于您的需要,主要取決于您生成的語(yǔ)言類(lèi)型)。
  詞法模型
  詞匯級別模型與字符級別模型非常相似,但它用于生成下一個(gè)單詞而不是一個(gè)字符。這是一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明這一點(diǎn):
  
  圖3.詞匯級模型生成的迭代過(guò)程
  現在在這個(gè)模型中,我們期待以單詞為單位的下一個(gè)單詞,而不是字符。因此,我們要找到概率 P(new_word|seed) 的最大值,其中 new_word 是任意詞。
  這里需要注意的是,我們在比字符級別更大的范圍內進(jìn)行搜索。在字符集模型中,我們只需要從字符表中查找大約 30 個(gè)字符,但是每次迭代搜索在詞匯表級別的范圍遠大于這個(gè)數字,所以每次迭代運行速度較慢,但??是由于我們生成了一個(gè)整體單詞而不是一個(gè)字符,所以也不錯。
  關(guān)于詞匯級別模型的最后一點(diǎn)是,我們可以通過(guò)在數據集中搜索獨特詞匯來(lái)生成更多樣化的詞匯(此步驟通常在數據預處理階段完成)。由于詞匯量可以無(wú)限大,我們其實(shí)有很多算法來(lái)提高詞匯生成的性能,比如詞嵌入,不過(guò)我可以在這個(gè)問(wèn)題上再寫(xiě)一個(gè)文章@>。
  本文文章@>主要關(guān)注字符級模型,因為它更容易實(shí)現和理解,也更容易轉化為復雜的詞法級模型。
  數據預處理
  對于字符級模型,我們將進(jìn)行如下數據預處理:
  1.標記字符
  對于字符級模型,輸入應該基于字符而不是字符串。所以,我們先把每一行歌詞變成一個(gè)字符的集合。
  2。定義字符表
  在上一步中,我們得到了歌詞中所有可能的字符,現在我們需要找到所有唯一的字符。由于整個(gè)數據集不大(只有140首歌曲),為簡(jiǎn)單起見(jiàn),我只保留所有英文字母和一些特殊符號(如空格),而忽略數字等信息(因為數據集很小,我寧愿讓模型預測更少的字符)。
  3.創(chuàng )建訓練序列
  這里我們將使用滑動(dòng)窗口的概念。通過(guò)沿著(zhù)句子拖動(dòng)一個(gè)固定長(cháng)度的窗口,我們將構建用于訓練的數據序列。下圖是滑動(dòng)窗口操作的一個(gè)很好的例子:
  
  圖4.使用滑動(dòng)窗口獲取輸入/輸出
  通過(guò)一次翻譯一個(gè)字符,我們得到一個(gè)長(cháng)度為 20 個(gè)字符的模型輸入和一個(gè)長(cháng)度為 1 個(gè)字符的模型輸出。一次只轉換一個(gè)網(wǎng)格的另一個(gè)好處是它極大地擴展了數據集的大小。
  4.帶注釋的編碼訓練序列
  最后,我們不想直接處理原創(chuàng )字符(雖然理論上每個(gè)字符都是一個(gè)數字,所以你也可以說(shuō) ASCII 已經(jīng)為我們完成了每個(gè)字符的編碼)。我們要做的就是用一個(gè)唯一的數字與每個(gè)字符一一對應,這一步就是所謂的標簽編碼。同時(shí),我們要建立兩個(gè)非常重要的映射:character-to-index(字符到索引)和index-to-character(索引到字符)。通過(guò)這兩個(gè)映射,我們可以將字母表中的任意一個(gè)字符編碼成對應的數字,同樣的,我們也可以解碼模型輸出的數字索引,得到對應的字符。
  5.數據集的one-hot編碼
  因為我們使用的是分類(lèi)數據,也就是說(shuō)所有的字符都可以歸為某一類(lèi),所以我們會(huì )將字符編碼成輸入列的形式。
  當我們完成以上五個(gè)步驟后,我們就基本完成了,接下來(lái)我們只需要構建和訓練模型即可。如果您想深入了解更多細節,這里是五個(gè)步驟的代碼供參考。
  
  3.建立模型
  我們將使用循環(huán)神經(jīng)網(wǎng)絡(luò ) (RNN),更具體地說(shuō)是長(cháng)短期記憶 (LSTM) 網(wǎng)絡(luò ),根據先前呈現的字符集預測下一個(gè)字符。如果這兩個(gè)概念聽(tīng)起來(lái)不熟悉,我還提供了相關(guān)概念的快速復習:
  RNN 快速回顧
  通常,您看到的網(wǎng)絡(luò )是一個(gè)網(wǎng)格,從許多點(diǎn)匯聚到一個(gè)輸出。如下圖:
  
  圖5.神經(jīng)網(wǎng)絡(luò )圖
  這里的神經(jīng)網(wǎng)絡(luò )是單點(diǎn)輸入和單點(diǎn)輸出。它適用于輸入不連續的情況,因為輸入的順序不影響輸出。但是在我們的例子中,輸入字符的順序很重要,因為順序決定了對應的單詞。
  RNN可以接收連續輸入,將前一個(gè)節點(diǎn)的輸出作為參數輸入到下一個(gè)節點(diǎn),從而解決輸入順序問(wèn)題。
  
  圖6.簡(jiǎn)單的RNN示意圖
  例如,基于序列 Tryna_keep_it_simple,提取的下一個(gè)字符應該是_。這正是我們希望我們的神經(jīng)網(wǎng)絡(luò )做的事情。神經(jīng)網(wǎng)絡(luò )的輸入會(huì )是 T?—?> x, r -> x, n -> x... e-> x ,對應的輸出字符是空格 y -> _ 。
  LSTM 快速回顧
  簡(jiǎn)單的 RNN 網(wǎng)絡(luò )仍然存在一些問(wèn)題,它不擅長(cháng)將非常前端的單元格信息傳遞給后端單元格。例如,Tryna keep it simple 句子中的最后一個(gè)詞 me 對我來(lái)說(shuō)是一個(gè)掙扎,如果不回顧它之前出現的詞(可能預測為 Baka、cat、potato 等),很難預測。
  LSTM 可以很好地解決這個(gè)問(wèn)題,它在每個(gè)單元格中存儲了部分之前的事件信息(即之前的單詞)。如下圖:
  
  圖7. LSTM 圖,取自 Andrew Ng 的深度學(xué)習課程
  不僅傳遞了前一個(gè)單元格的輸出a,而且收錄前一個(gè)單元格的輸入信息的c也作為下一個(gè)單元格的輸入的一部分。這使 LSTM 能夠更好地保留上下文信息,并且適用于語(yǔ)言建模預測。
  編程建模
  之前學(xué)過(guò)一點(diǎn)Keras,所以這次會(huì )用Keras作為框架來(lái)編程搭建模型。其實(shí)也可以選擇自己搭建模型框架,不過(guò)這樣會(huì )比較費時(shí)間。
  # create sequential network, because we are passing activations
# down the network
model = Sequential()
# add LSTM layer
model.add(LSTM(128, input_shape=(maxlen, len(chars))))
# add Softmax layer to output one character
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
# compile the model and pick the loss and optimizer
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=0.01))
# train the model
model.fit(x, y, batch_size=128, epochs=30)
  從上圖可以看出,我們構建了LSTM模型,使用了批處理,使用數據子集進(jìn)行批量訓練,而不是一次性輸入所有數據,這樣可以稍微提高訓練速度。
  4、生成歌詞
  訓練完模型,我們來(lái)介紹下如何生成下一個(gè)字符。我們首先使用用戶(hù)輸入的簡(jiǎn)單字符串作為隨機種子。接下來(lái),我們使用種子作為網(wǎng)絡(luò )的輸入來(lái)預測下一個(gè)字符,并重復這個(gè)過(guò)程,直到我們生成一些新的歌詞,類(lèi)似于圖 2 所示的歌詞。
  以下是生成歌詞的一些示例。
  注意:這些歌詞均未經(jīng)過(guò)審核,請在閱讀時(shí)自行檢查。
  
  
  
  
  
  您可能會(huì )注意到某些生成的單詞是無(wú)意義的,這是字符級模型的常見(jiàn)問(wèn)題。這是因為輸入序列經(jīng)常在單詞中間被截斷,從而使神經(jīng)網(wǎng)絡(luò )模型能夠學(xué)習并生成對其輸入有意義但對我們來(lái)說(shuō)看起來(lái)很奇怪的新單詞。
  這也是詞法級模型可以解決的問(wèn)題,但是對于僅用200行代碼構建的模型,字符級模型達到的效果還是很可觀(guān)的。
  其他應用
  此處演示的字符級模型的歌詞預測功能可以擴展到其他更有用的應用程序。
  例如,可以使用相同的原理來(lái)預測 iPhone 鍵盤(pán)上要輸入的下一個(gè)單詞。
  
  圖8.鍵盤(pán)輸入預測下一個(gè)單詞
  想象一下,如果你構建一個(gè)高精度的 Python 語(yǔ)言模型,它不僅可以自動(dòng)填寫(xiě) 關(guān)鍵詞 或變量名,還可以填寫(xiě)大段代碼,這將幫助程序員節省大量時(shí)間!
  您可能還注意到文本中的代碼不完整,并且缺少一些片段。請到我的 Github 了解更多詳情并學(xué)習構建自己的項目模型。
  Github 鏈接:
  相關(guān)報道: 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
AI社區搭建出所謂語(yǔ)言模型的前提是學(xué)習數據的原因)
  
  由大數據文摘出品
  合輯:非、倪妮、什錦甜、錢(qián)天培
  人工智能未來(lái)的一個(gè)主要應用將是構建可以從數據中學(xué)習然后生成原創(chuàng )內容的網(wǎng)絡(luò )。這個(gè)思想已經(jīng)在自然語(yǔ)言處理(NLP)領(lǐng)域得到了充分的應用,這也是為什么AI社區可以構建所謂的語(yǔ)言模型:語(yǔ)言模型的前提是學(xué)習文章@中的句子結構> 段落,從而生成新的內容。
  在這個(gè)文章@>我想嘗試生成類(lèi)似于非常流行的加拿大說(shuō)唱歌手德雷克(又名#6god)風(fēng)格的說(shuō)唱歌詞,一定很有趣。
  另外,我也想分享一下通用的機器學(xué)習項目流水線(xiàn),因為我發(fā)現很多同學(xué)想做一些小項目,但是不知道從哪里開(kāi)始。
  獲取數據
  首先,我們開(kāi)始采集 Drake 的音樂(lè )庫。為了節省時(shí)間,我寫(xiě)了一個(gè)爬蟲(chóng)來(lái)抓取網(wǎng)絡(luò )上的歌詞。
  import urllib.request as urllib2
from bs4 import BeautifulSoup
import pandas as pd
import re
from unidecode import unidecode
quote_page = 'http://metrolyrics.com/{}-lyrics-drake.html'
filename = 'drake-songs.csv'
songs = pd.read_csv(filename)
for index, row in songs.iterrows():
page = urllib2.urlopen(quote_page.format(row['song']))
soup = BeautifulSoup(page, 'html.parser')
verses = soup.find_all('p', attrs={'class': 'verse'})
lyrics = ''
for verse in verses:
text = verse.text.strip()
text = re.sub(r"\[.*\]\n", "", unidecode(text))
if lyrics == '':
lyrics = lyrics + text.replace('\n', '|-|')
else:
lyrics = lyrics + '|-|' + text.replace('\n', '|-|')
songs.at[index, 'lyrics'] = lyrics
print('saving {}'.format(row['song']))
songs.head()
print('writing to .csv')
songs.to_csv(filename, sep=',', encoding='utf-8')
  我使用了一個(gè)著(zhù)名的 Python 包 BeautifulSoup 來(lái)抓取網(wǎng)頁(yè)。我使用了 Justin Yek 的教程,一個(gè)很棒的人,在五分鐘內學(xué)會(huì )了如何使用它。說(shuō)明一下,在上面的代碼中,我在循環(huán)中使用了歌曲的數據格式,因為我提前定義了我想要獲取的歌曲。
  教程:
  
  所有歌詞都存儲在DataFrame中
  運行爬蟲(chóng)后,我得到了一個(gè)csv文件,將歌詞存儲在一個(gè)合適的結構中,接下來(lái)就是對數據進(jìn)行預處理并構建模型。
  型號介紹
  現在讓我們看看模型是如何生成文本的。這部分理解很重要,因為這是真正的干貨。我將從模型設計和生成歌詞模型中的關(guān)鍵組件開(kāi)始,然后我們可以直接進(jìn)入實(shí)現階段。
  構建語(yǔ)言模型主要有兩種方式:
  1.字符級模型,
  2.詞級模型。
  兩者的主要區別在于模型的輸入和輸出。接下來(lái),我將解釋這兩個(gè)模型是如何工作的。
  字符級模型
  在字符級模型中,輸入是一個(gè)字符序列種子(seed),模型負責預測下一個(gè)字符,然后使用種子+new_char組合生成下一個(gè)字符,以此類(lèi)推。請注意,由于我們應該保持每個(gè)輸入的長(cháng)度相同,我們實(shí)際上是在輸入的每次迭代中刪除一個(gè)字符。我們可以看一個(gè)簡(jiǎn)單直觀(guān)的例子:
  
  字符級模型生成單詞的迭代過(guò)程
  在每次迭代中,模型根據給定的種子字符預測下一個(gè)最有可能生成的字符,或者使用條件概率找到概率 P(new_char|seed) 的最大值,其中 new_char 是一個(gè)字母表。
  在這個(gè)例子中,字符表是指所有英文字母和空格的集合。 (注意,字母表可以收錄不同的字母,具體取決于您的需要,主要取決于您生成的語(yǔ)言類(lèi)型)。
  詞法模型
  詞匯級別模型與字符級別模型非常相似,但它用于生成下一個(gè)單詞而不是一個(gè)字符。這是一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明這一點(diǎn):
  
  圖3.詞匯級模型生成的迭代過(guò)程
  現在在這個(gè)模型中,我們期待以單詞為單位的下一個(gè)單詞,而不是字符。因此,我們要找到概率 P(new_word|seed) 的最大值,其中 new_word 是任意詞。
  這里需要注意的是,我們在比字符級別更大的范圍內進(jìn)行搜索。在字符集模型中,我們只需要從字符表中查找大約 30 個(gè)字符,但是每次迭代搜索在詞匯表級別的范圍遠大于這個(gè)數字,所以每次迭代運行速度較慢,但??是由于我們生成了一個(gè)整體單詞而不是一個(gè)字符,所以也不錯。
  關(guān)于詞匯級別模型的最后一點(diǎn)是,我們可以通過(guò)在數據集中搜索獨特詞匯來(lái)生成更多樣化的詞匯(此步驟通常在數據預處理階段完成)。由于詞匯量可以無(wú)限大,我們其實(shí)有很多算法來(lái)提高詞匯生成的性能,比如詞嵌入,不過(guò)我可以在這個(gè)問(wèn)題上再寫(xiě)一個(gè)文章@>。
  本文文章@>主要關(guān)注字符級模型,因為它更容易實(shí)現和理解,也更容易轉化為復雜的詞法級模型。
  數據預處理
  對于字符級模型,我們將進(jìn)行如下數據預處理:
  1.標記字符
  對于字符級模型,輸入應該基于字符而不是字符串。所以,我們先把每一行歌詞變成一個(gè)字符的集合。
  2。定義字符表
  在上一步中,我們得到了歌詞中所有可能的字符,現在我們需要找到所有唯一的字符。由于整個(gè)數據集不大(只有140首歌曲),為簡(jiǎn)單起見(jiàn),我只保留所有英文字母和一些特殊符號(如空格),而忽略數字等信息(因為數據集很小,我寧愿讓模型預測更少的字符)。
  3.創(chuàng )建訓練序列
  這里我們將使用滑動(dòng)窗口的概念。通過(guò)沿著(zhù)句子拖動(dòng)一個(gè)固定長(cháng)度的窗口,我們將構建用于訓練的數據序列。下圖是滑動(dòng)窗口操作的一個(gè)很好的例子:
  
  圖4.使用滑動(dòng)窗口獲取輸入/輸出
  通過(guò)一次翻譯一個(gè)字符,我們得到一個(gè)長(cháng)度為 20 個(gè)字符的模型輸入和一個(gè)長(cháng)度為 1 個(gè)字符的模型輸出。一次只轉換一個(gè)網(wǎng)格的另一個(gè)好處是它極大地擴展了數據集的大小。
  4.帶注釋的編碼訓練序列
  最后,我們不想直接處理原創(chuàng )字符(雖然理論上每個(gè)字符都是一個(gè)數字,所以你也可以說(shuō) ASCII 已經(jīng)為我們完成了每個(gè)字符的編碼)。我們要做的就是用一個(gè)唯一的數字與每個(gè)字符一一對應,這一步就是所謂的標簽編碼。同時(shí),我們要建立兩個(gè)非常重要的映射:character-to-index(字符到索引)和index-to-character(索引到字符)。通過(guò)這兩個(gè)映射,我們可以將字母表中的任意一個(gè)字符編碼成對應的數字,同樣的,我們也可以解碼模型輸出的數字索引,得到對應的字符。
  5.數據集的one-hot編碼
  因為我們使用的是分類(lèi)數據,也就是說(shuō)所有的字符都可以歸為某一類(lèi),所以我們會(huì )將字符編碼成輸入列的形式。
  當我們完成以上五個(gè)步驟后,我們就基本完成了,接下來(lái)我們只需要構建和訓練模型即可。如果您想深入了解更多細節,這里是五個(gè)步驟的代碼供參考。
  
  3.建立模型
  我們將使用循環(huán)神經(jīng)網(wǎng)絡(luò ) (RNN),更具體地說(shuō)是長(cháng)短期記憶 (LSTM) 網(wǎng)絡(luò ),根據先前呈現的字符集預測下一個(gè)字符。如果這兩個(gè)概念聽(tīng)起來(lái)不熟悉,我還提供了相關(guān)概念的快速復習:
  RNN 快速回顧
  通常,您看到的網(wǎng)絡(luò )是一個(gè)網(wǎng)格,從許多點(diǎn)匯聚到一個(gè)輸出。如下圖:
  
  圖5.神經(jīng)網(wǎng)絡(luò )圖
  這里的神經(jīng)網(wǎng)絡(luò )是單點(diǎn)輸入和單點(diǎn)輸出。它適用于輸入不連續的情況,因為輸入的順序不影響輸出。但是在我們的例子中,輸入字符的順序很重要,因為順序決定了對應的單詞。
  RNN可以接收連續輸入,將前一個(gè)節點(diǎn)的輸出作為參數輸入到下一個(gè)節點(diǎn),從而解決輸入順序問(wèn)題。
  
  圖6.簡(jiǎn)單的RNN示意圖
  例如,基于序列 Tryna_keep_it_simple,提取的下一個(gè)字符應該是_。這正是我們希望我們的神經(jīng)網(wǎng)絡(luò )做的事情。神經(jīng)網(wǎng)絡(luò )的輸入會(huì )是 T?—?> x, r -> x, n -> x... e-> x ,對應的輸出字符是空格 y -> _ 。
  LSTM 快速回顧
  簡(jiǎn)單的 RNN 網(wǎng)絡(luò )仍然存在一些問(wèn)題,它不擅長(cháng)將非常前端的單元格信息傳遞給后端單元格。例如,Tryna keep it simple 句子中的最后一個(gè)詞 me 對我來(lái)說(shuō)是一個(gè)掙扎,如果不回顧它之前出現的詞(可能預測為 Baka、cat、potato 等),很難預測。
  LSTM 可以很好地解決這個(gè)問(wèn)題,它在每個(gè)單元格中存儲了部分之前的事件信息(即之前的單詞)。如下圖:
  
  圖7. LSTM 圖,取自 Andrew Ng 的深度學(xué)習課程
  不僅傳遞了前一個(gè)單元格的輸出a,而且收錄前一個(gè)單元格的輸入信息的c也作為下一個(gè)單元格的輸入的一部分。這使 LSTM 能夠更好地保留上下文信息,并且適用于語(yǔ)言建模預測。
  編程建模
  之前學(xué)過(guò)一點(diǎn)Keras,所以這次會(huì )用Keras作為框架來(lái)編程搭建模型。其實(shí)也可以選擇自己搭建模型框架,不過(guò)這樣會(huì )比較費時(shí)間。
  # create sequential network, because we are passing activations
# down the network
model = Sequential()
# add LSTM layer
model.add(LSTM(128, input_shape=(maxlen, len(chars))))
# add Softmax layer to output one character
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
# compile the model and pick the loss and optimizer
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=0.01))
# train the model
model.fit(x, y, batch_size=128, epochs=30)
  從上圖可以看出,我們構建了LSTM模型,使用了批處理,使用數據子集進(jìn)行批量訓練,而不是一次性輸入所有數據,這樣可以稍微提高訓練速度。
  4、生成歌詞
  訓練完模型,我們來(lái)介紹下如何生成下一個(gè)字符。我們首先使用用戶(hù)輸入的簡(jiǎn)單字符串作為隨機種子。接下來(lái),我們使用種子作為網(wǎng)絡(luò )的輸入來(lái)預測下一個(gè)字符,并重復這個(gè)過(guò)程,直到我們生成一些新的歌詞,類(lèi)似于圖 2 所示的歌詞。
  以下是生成歌詞的一些示例。
  注意:這些歌詞均未經(jīng)過(guò)審核,請在閱讀時(shí)自行檢查。
  
  
  
  
  
  您可能會(huì )注意到某些生成的單詞是無(wú)意義的,這是字符級模型的常見(jiàn)問(wèn)題。這是因為輸入序列經(jīng)常在單詞中間被截斷,從而使神經(jīng)網(wǎng)絡(luò )模型能夠學(xué)習并生成對其輸入有意義但對我們來(lái)說(shuō)看起來(lái)很奇怪的新單詞。
  這也是詞法級模型可以解決的問(wèn)題,但是對于僅用200行代碼構建的模型,字符級模型達到的效果還是很可觀(guān)的。
  其他應用
  此處演示的字符級模型的歌詞預測功能可以擴展到其他更有用的應用程序。
  例如,可以使用相同的原理來(lái)預測 iPhone 鍵盤(pán)上要輸入的下一個(gè)單詞。
  
  圖8.鍵盤(pán)輸入預測下一個(gè)單詞
  想象一下,如果你構建一個(gè)高精度的 Python 語(yǔ)言模型,它不僅可以自動(dòng)填寫(xiě) 關(guān)鍵詞 或變量名,還可以填寫(xiě)大段代碼,這將幫助程序員節省大量時(shí)間!
  您可能還注意到文本中的代碼不完整,并且缺少一些片段。請到我的 Github 了解更多詳情并學(xué)習構建自己的項目模型。
  Github 鏈接:
  相關(guān)報道:

抓取網(wǎng)頁(yè)生成電子書(shū)(這款網(wǎng)絡(luò )書(shū)籍器綠色版怎么拯救你的網(wǎng)上書(shū)籍下載工具?)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 441 次瀏覽 ? 2022-04-19 06:13 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(這款網(wǎng)絡(luò )書(shū)籍器綠色版怎么拯救你的網(wǎng)上書(shū)籍下載工具?)
  當你喜歡小說(shuō)卻下載不了的時(shí)候,你會(huì )不會(huì )覺(jué)得不舒服?別慌,這款網(wǎng)絡(luò )圖書(shū)采集器綠色版來(lái)救你了,作為一款簡(jiǎn)單好用的網(wǎng)絡(luò )圖書(shū)下載工具,本軟件主要用于采集網(wǎng)絡(luò )小說(shuō)生成文本文件。您可以提取和調整指定小說(shuō)目錄頁(yè)面的章節信息,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。并且爬取過(guò)程可以隨時(shí)中斷,程序關(guān)閉后可以繼續上一個(gè)任務(wù),不用擔心意外原因導致的錯誤。而且,本站提供的在線(xiàn)圖書(shū)抓取器綠色版無(wú)需安裝。解壓運行后即可使用,方便快捷。
  
  特色1、章節調整
  目錄解壓后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響最終的書(shū)籍和調整章節順序的輸出。
  2、自動(dòng)重試
  在爬取過(guò)程中,可能會(huì )因為網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
  3、停止并恢復
  抓取過(guò)程可以隨時(shí)停止,退出程序后仍能保證進(jìn)度(章節信息會(huì )保存在記錄中,下次運行程序后即可恢復抓取。注意:需要退出程序前使用停止鍵中斷程序,直接退出不會(huì )恢復)。
  4、一鍵抓取
  又稱(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的 URL、save bit 等信息(會(huì )有明顯的操作提示)。調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站
  已錄入10個(gè)適用的網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到需要的書(shū)籍),也可自動(dòng)申請相應的代碼,其他小說(shuō)網(wǎng)站 也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中進(jìn)行備份。
  6、輕松制作電子書(shū)
  每個(gè)章節名稱(chēng)的前綴和后綴都可以添加到設置文件中,為后期制作電子書(shū)的編目帶來(lái)了極大的方便。使用方法1、點(diǎn)擊本站下載解壓。
  
  2、點(diǎn)擊應用打開(kāi)。
  3、進(jìn)入要下載的小說(shuō)網(wǎng)頁(yè),輸入書(shū)名,點(diǎn)擊目錄解壓。
  4、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
  
  Changelog Web Book Grabber v1.4 (2020-5-16)
  1、優(yōu)化界面體驗。
  2、修復了一些已知的錯誤。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(這款網(wǎng)絡(luò )書(shū)籍器綠色版怎么拯救你的網(wǎng)上書(shū)籍下載工具?)
  當你喜歡小說(shuō)卻下載不了的時(shí)候,你會(huì )不會(huì )覺(jué)得不舒服?別慌,這款網(wǎng)絡(luò )圖書(shū)采集器綠色版來(lái)救你了,作為一款簡(jiǎn)單好用的網(wǎng)絡(luò )圖書(shū)下載工具,本軟件主要用于采集網(wǎng)絡(luò )小說(shuō)生成文本文件。您可以提取和調整指定小說(shuō)目錄頁(yè)面的章節信息,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。并且爬取過(guò)程可以隨時(shí)中斷,程序關(guān)閉后可以繼續上一個(gè)任務(wù),不用擔心意外原因導致的錯誤。而且,本站提供的在線(xiàn)圖書(shū)抓取器綠色版無(wú)需安裝。解壓運行后即可使用,方便快捷。
  
  特色1、章節調整
  目錄解壓后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響最終的書(shū)籍和調整章節順序的輸出。
  2、自動(dòng)重試
  在爬取過(guò)程中,可能會(huì )因為網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
  3、停止并恢復
  抓取過(guò)程可以隨時(shí)停止,退出程序后仍能保證進(jìn)度(章節信息會(huì )保存在記錄中,下次運行程序后即可恢復抓取。注意:需要退出程序前使用停止鍵中斷程序,直接退出不會(huì )恢復)。
  4、一鍵抓取
  又稱(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的 URL、save bit 等信息(會(huì )有明顯的操作提示)。調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站
  已錄入10個(gè)適用的網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到需要的書(shū)籍),也可自動(dòng)申請相應的代碼,其他小說(shuō)網(wǎng)站 也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中進(jìn)行備份。
  6、輕松制作電子書(shū)
  每個(gè)章節名稱(chēng)的前綴和后綴都可以添加到設置文件中,為后期制作電子書(shū)的編目帶來(lái)了極大的方便。使用方法1、點(diǎn)擊本站下載解壓。
  
  2、點(diǎn)擊應用打開(kāi)。
  3、進(jìn)入要下載的小說(shuō)網(wǎng)頁(yè),輸入書(shū)名,點(diǎn)擊目錄解壓。
  4、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
  
  Changelog Web Book Grabber v1.4 (2020-5-16)
  1、優(yōu)化界面體驗。
  2、修復了一些已知的錯誤。

抓取網(wǎng)頁(yè)生成電子書(shū)(web不再的攻防角度來(lái)講程序是危害web原創(chuàng )生態(tài)的一大元兇)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-04-19 06:12 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(web不再的攻防角度來(lái)講程序是危害web原創(chuàng )生態(tài)的一大元兇)
  網(wǎng)絡(luò )是一個(gè)開(kāi)放的平臺,它為網(wǎng)絡(luò )從1990年代初誕生到今天的蓬勃發(fā)展奠定了基礎。然而,所謂的成敗也很小,開(kāi)放的特性、搜索引擎、簡(jiǎn)單易學(xué)的html和css技術(shù),讓web成為了互聯(lián)網(wǎng)領(lǐng)域最流行、最成熟的信息傳播媒介;但是現在作為商業(yè)軟件,web是平臺上的內容信息的版權是不能保證的,因為與軟件客戶(hù)端相比,你的網(wǎng)頁(yè)內容可以通過(guò)一些爬蟲(chóng)程序以非常低的成本實(shí)現,并且技術(shù)門(mén)檻很低,這也是本系列文章要討論的——網(wǎng)絡(luò )爬蟲(chóng)。
  
  有很多人認為,網(wǎng)絡(luò )應該始終遵循開(kāi)放的精神,頁(yè)面上呈現的信息應該毫無(wú)保留地與整個(gè)互聯(lián)網(wǎng)共享。但是,我認為隨著(zhù)今天IT行業(yè)的發(fā)展,網(wǎng)絡(luò )不再是當年與pdf競爭的所謂“超文本”信息載體。它已經(jīng)基于輕量級客戶(hù)端軟件的思想。存在。隨著(zhù)商業(yè)軟件的發(fā)展,網(wǎng)絡(luò )也不得不面對知識產(chǎn)權保護的問(wèn)題。試想一下,如果原創(chuàng )的優(yōu)質(zhì)內容不受保護,網(wǎng)絡(luò )世界中抄襲盜版猖獗,這其實(shí)有利于網(wǎng)絡(luò )生態(tài)的健康發(fā)展。這是一個(gè)缺點(diǎn),而且它'
  未經(jīng)授權的爬蟲(chóng)程序是危害web原創(chuàng )內容生態(tài)的罪魁禍首。因此,為了保護網(wǎng)站的內容,首先要考慮如何反爬。
  從爬行動(dòng)物的攻防來(lái)看
  最簡(jiǎn)單的爬蟲(chóng)是幾乎所有服務(wù)器端和客戶(hù)端編程語(yǔ)言都支持的 http 請求。只要對目標頁(yè)面的url進(jìn)行http get請求,就可以獲得瀏覽器加載頁(yè)面時(shí)的完整html文檔。我們稱(chēng)之為“同步頁(yè)面”。
  作為防御方,服務(wù)器可以根據http請求頭中的User-Agent檢查客戶(hù)端是合法的瀏覽器程序還是腳本爬蟲(chóng),從而決定是否使用真實(shí)的頁(yè)面信息內容發(fā)送給你。
  這當然是兒科最小的防御方法。作為進(jìn)攻方,爬蟲(chóng)完全可以偽造User-Agent字段。甚至,只要你愿意,在http的get方法中,請求頭的Referrer、Cookie等所有字段都可以被爬蟲(chóng)輕松處理。偽造。
  這時(shí),服務(wù)器就可以根據你聲明的瀏覽器廠(chǎng)商和版本(來(lái)自User-Agent),使用瀏覽器http頭指紋來(lái)識別你http頭中的每個(gè)字段是否符合瀏覽器的特性。如果匹配,它將被視為爬蟲(chóng)。該技術(shù)的一個(gè)典型應用是在 PhantomJS 1.x 版本中,由于底層調用了 Qt 框架的網(wǎng)絡(luò )庫,http 頭具有明顯的 Qt 框架的網(wǎng)絡(luò )請求特征,可以服務(wù)器直接識別。并被攔截。
  另外,還有一個(gè)比較異常的服務(wù)器端爬蟲(chóng)檢測機制,就是在http響應中為所有訪(fǎng)問(wèn)該頁(yè)面的http請求種上一個(gè)cookie token,然后在這個(gè)異步執行的一些ajax接口上學(xué)頁(yè)。檢查訪(fǎng)問(wèn)請求中是否收錄cookie token,返回token表示這是一次合法的瀏覽器訪(fǎng)問(wèn),否則表示剛剛發(fā)出token的用戶(hù)訪(fǎng)問(wèn)了頁(yè)面html但沒(méi)有訪(fǎng)問(wèn)執行js后調用的ajax在 html 請求中,很可能是爬蟲(chóng)。
  如果你不帶token直接訪(fǎng)問(wèn)一個(gè)接口,說(shuō)明你沒(méi)有請求過(guò)html頁(yè)面,而是直接向頁(yè)面中應該通過(guò)ajax訪(fǎng)問(wèn)的接口發(fā)起網(wǎng)絡(luò )請求,這顯然證明你是一個(gè)可疑的爬蟲(chóng)。知名電子商務(wù)公司網(wǎng)站亞馬遜采用了這種防御策略。
  以上是基于服務(wù)器端驗證爬蟲(chóng)程序可以玩的一些套路。
  基于客戶(hù)端js運行時(shí)的檢測
  現代瀏覽器賦予 JavaScript 強大的能力,所以我們可以將頁(yè)面的所有核心內容作為 js 異步請求 ajax 獲取數據然后渲染到頁(yè)面中,這顯然提高了爬取內容的門(mén)檻。這樣,我們就將爬蟲(chóng)和反爬的戰斗從服務(wù)端轉移到了客戶(hù)端瀏覽器中的js運行時(shí)。接下來(lái)說(shuō)一下結合客戶(hù)端js運行時(shí)的爬取技術(shù)。
  剛才提到的各種服務(wù)器端驗證,對于普通的python和java語(yǔ)言編寫(xiě)的HTTP爬蟲(chóng)程序,都有一定的技術(shù)門(mén)檻。畢竟,Web 應用程序是未經(jīng)授權的抓取工具的黑匣子。很多東西都需要一點(diǎn)一點(diǎn)的去嘗試,而一套耗費大量人力物力開(kāi)發(fā)的爬蟲(chóng)程序,只要網(wǎng)站作為防御者可以輕松調整一些策略,攻擊者也需要花費同樣的時(shí)間再次修改爬蟲(chóng)的爬取邏輯。
  此時(shí),您需要使用無(wú)頭瀏覽器。這是什么技術(shù)?其實(shí)說(shuō)白了就是程序可以操作瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè),這樣寫(xiě)爬蟲(chóng)的人就可以通過(guò)調用瀏覽器暴露給程序的API來(lái)實(shí)現復雜的爬取業(yè)務(wù)邏輯。
  事實(shí)上,這并不是近年來(lái)的新技術(shù)。曾經(jīng)有基于webkit內核的PhantomJS,基于火狐瀏覽器內核的SlimerJS,甚至還有基于IE內核的trifleJS。如果你有興趣,可以看看這里和這里有兩個(gè)無(wú)頭瀏覽器采集列表。
  這些無(wú)頭瀏覽器程序的原理其實(shí)就是對一些開(kāi)源瀏覽器內核C++代碼進(jìn)行改造和封裝,實(shí)現一個(gè)無(wú)需GUI界面渲染的簡(jiǎn)單瀏覽器程序。但是這些項目的通病是因為他們的代碼是基于fork官方webkit和其他內核的某個(gè)版本的trunk代碼,所以跟不上一些最新的css屬性和js語(yǔ)法,還有一些兼容性問(wèn)題,不如真實(shí)的GUI瀏覽器發(fā)行版運行穩定。
  其中,最成熟、用得最多的應該是PhantonJS。之前寫(xiě)過(guò)一篇關(guān)于這種爬蟲(chóng)識別的博客,這里不再贅述。PhantomJS 有很多問(wèn)題,因為它是單進(jìn)程模型,沒(méi)有必要的沙箱保護,瀏覽器內核的安全性較差。此外,該項目的作者已經(jīng)宣布他們將停止維護這個(gè)項目。
  現在谷歌瀏覽器團隊已經(jīng)在 Chrome 59 發(fā)布版本中開(kāi)放了 headless mode api,并開(kāi)源了一個(gè)基于 Node.js 調用的 headless chromium dirver 庫。我還為這個(gè)庫貢獻了一個(gè)centos環(huán)境部署依賴(lài)安裝列表。
  Headless Chrome 可以說(shuō)是 Headless Browser 中獨一無(wú)二的殺手锏。由于它本身就是一個(gè) chrome 瀏覽器,它支持各種新的 CSS 渲染特性和 js 運行時(shí)語(yǔ)法。
  基于這種方法,爬蟲(chóng)作為攻擊方可以繞過(guò)幾乎所有的服務(wù)器端驗證邏輯,但是這些爬蟲(chóng)在客戶(hù)端js運行時(shí)仍然存在一些缺陷,例如:
  基于插件對象的檢查
  if(navigator.plugins.length === 0) {
console.log('It may be Chrome headless');
}
復制代碼
  基于語(yǔ)言的檢查
  if(navigator.languages === '') {
console.log('Chrome headless detected');
}
復制代碼
  基于 webgl 的檢查
  var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if(vendor == 'Brian Paul' && renderer == 'Mesa OffScreen') {
console.log('Chrome headless detected');
}
復制代碼
  基于瀏覽器細線(xiàn)屬性的檢查
  if(!Modernizr['hairline']) {
console.log('It may be Chrome headless');
}
復制代碼
  檢查基于錯誤的img src屬性生成的img對象
  var body = document.getElementsByTagName('body')[0];
var image = document.createElement('img');
image.src = 'http://iloveponeydotcom32188.jg';
image.setAttribute('id', 'fakeimage');
body.appendChild(image);
image.onerror = function(){
if(image.width == 0 && image.height == 0) {
console.log('Chrome headless detected');
}
}
復制代碼
  基于以上一些瀏覽器特性的判斷,它基本上可以秒殺市面上大部分的Headless Browser程序。在這個(gè)層面上,網(wǎng)頁(yè)爬蟲(chóng)的門(mén)檻其實(shí)是提高了,要求編寫(xiě)爬蟲(chóng)程序的開(kāi)發(fā)者不得不修改瀏覽器內核的C++代碼,重新編譯一個(gè)瀏覽器,而以上特性對瀏覽器來(lái)說(shuō)是很重要的。內核的改動(dòng)其實(shí)不小,如果你嘗試過(guò)編譯Blink內核或者Gecko內核你就會(huì )明白對于一個(gè)“腳本小子”來(lái)說(shuō)是多么的難了~
  此外,我們還可以根據瀏覽器的UserAgent字段中描述的瀏覽器品牌、版本、型號信息,檢查js運行時(shí)、DOM和BOM的各個(gè)native對象的屬性和方法,觀(guān)察特性是否符合瀏覽器這個(gè)版本。設備應具備的功能。
  這種方法稱(chēng)為瀏覽器指紋識別技術(shù),它依賴(lài)于大型網(wǎng)站對各類(lèi)瀏覽器的api信息的采集。作為編寫(xiě)爬蟲(chóng)程序的攻擊者,你可以在無(wú)頭瀏覽器運行時(shí)預先注入一些js邏輯來(lái)偽造瀏覽器的特性。
  另外,在研究Robots Browser Detect using js api在瀏覽器端的時(shí)候,我們發(fā)現了一個(gè)有趣的trick??梢詫㈩A先注入的js函數偽裝成Native Function,看一下下面的代碼:
  var fakeAlert = (function(){}).bind(null);
console.log(window.alert.toString()); // function alert() { [native code] }
console.log(fakeAlert.toString()); // function () { [native code] }
復制代碼
  爬蟲(chóng)攻擊者可能會(huì )預先注入一些js方法,用一層代理函數作為鉤子包裹一些原生api,然后用這個(gè)假的js api覆蓋原生api。如果防御者在函數 toString 之后基于對 [native code] 的檢查來(lái)檢查這一點(diǎn),它將被繞過(guò)。所以需要更嚴格的檢查,因為bind(null) fake方法在toString之后沒(méi)有函數名,所以需要檢查toString之后的函數名是否為空。
  這個(gè)技巧有什么用?在這里延伸一下,反爬蟲(chóng)防御者有一個(gè)Robot Detect方法,就是在js運行的時(shí)候主動(dòng)拋出一個(gè)alert。文案可以寫(xiě)一些業(yè)務(wù)邏輯相關(guān)的。當普通用戶(hù)點(diǎn)擊OK按鈕時(shí),肯定會(huì )有1s甚至是alert。對于更長(cháng)的延遲,由于瀏覽器中的alert會(huì )阻塞js代碼的運行(其實(shí)在v8中,他會(huì )以類(lèi)似進(jìn)程掛起的方式掛起isolate context的執行),所以爬蟲(chóng)作為攻擊者可以選擇使用上面的竅門(mén),就是在頁(yè)面所有js運行前預先注入一段js代碼,偽造alert、prompt、confirm等所有彈窗方法。如果防御者在彈出代碼之前檢查他調用的alert方法是否仍然是原生的,則這種方式被阻止。
  對付爬行動(dòng)物的靈丹妙藥
  目前最可靠的反爬蟲(chóng)和機器人巡檢手段是驗證碼技術(shù)。但是,驗證碼并不意味著(zhù)必須強制用戶(hù)輸入一系列字母數字。還有很多基于用戶(hù)鼠標、觸摸屏(移動(dòng)端)等行為的行為驗證技術(shù)。其中,最成熟的是基于機器學(xué)習的谷歌reCAPTCHA。區分用戶(hù)和爬蟲(chóng)。
  基于以上對用戶(hù)和爬蟲(chóng)的識別和區分技術(shù),網(wǎng)站的防御者需要做的就是對該IP地址進(jìn)行封鎖或者對該IP的訪(fǎng)問(wèn)用戶(hù)施加高強度的驗證碼策略。這樣攻擊者就不得不購買(mǎi)IP代理池來(lái)捕獲網(wǎng)站信息內容,否則單個(gè)IP地址很容易被封殺,無(wú)法被捕獲。爬取和反爬取的門(mén)檻已經(jīng)提升到IP代理池的經(jīng)濟成本水平。
  機器人協(xié)議
  此外,在爬蟲(chóng)爬取技術(shù)領(lǐng)域,還有一種叫做robots協(xié)議的“白道”方式。您可以訪(fǎng)問(wèn) 網(wǎng)站 根目錄中的 /robots.txt。比如我們看一下github的robot協(xié)議。Allow 和 Disallow 聲明每個(gè) UA 爬蟲(chóng)的授權。
  然而,這只是君子之約。雖然它有法律上的好處,但它只能限制那些商業(yè)搜索引擎的蜘蛛程序,你不能限制那些“野爬愛(ài)好者”。
  寫(xiě)在最后
  網(wǎng)頁(yè)內容的爬取與對抗,注定是一場(chǎng)魔高道高的貓捉老鼠游戲。你永遠不可能用某種技術(shù)完全擋住爬蟲(chóng)的去路,你能做的就是增加攻擊。用戶(hù)爬取的成本,以及關(guān)于未經(jīng)授權的爬取行為的更準確信息。
  這篇文章中提到的驗證碼攻防其實(shí)是一個(gè)比較復雜的技術(shù)難點(diǎn)。我在這里留下一個(gè)懸念。有興趣的可以多加關(guān)注,期待后續文章的詳細闡述。
  另外,歡迎對爬蟲(chóng)感興趣的朋友關(guān)注我的開(kāi)源項目webster。該項目以Node.js結合Chrome無(wú)頭模式實(shí)現了一個(gè)高可用的網(wǎng)絡(luò )爬蟲(chóng)爬取框架。一個(gè)頁(yè)面中js和ajax渲染的所有異步內容;結合redis,實(shí)現了一個(gè)任務(wù)隊列,讓爬蟲(chóng)輕松進(jìn)行橫向和縱向分布式擴展。很容易部署,我已經(jīng)為webster提供了一個(gè)正式版的base runtime docker鏡像,如果你想先睹為快,你也可以試試這個(gè)webster demo docker image。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(web不再的攻防角度來(lái)講程序是危害web原創(chuàng )生態(tài)的一大元兇)
  網(wǎng)絡(luò )是一個(gè)開(kāi)放的平臺,它為網(wǎng)絡(luò )從1990年代初誕生到今天的蓬勃發(fā)展奠定了基礎。然而,所謂的成敗也很小,開(kāi)放的特性、搜索引擎、簡(jiǎn)單易學(xué)的html和css技術(shù),讓web成為了互聯(lián)網(wǎng)領(lǐng)域最流行、最成熟的信息傳播媒介;但是現在作為商業(yè)軟件,web是平臺上的內容信息的版權是不能保證的,因為與軟件客戶(hù)端相比,你的網(wǎng)頁(yè)內容可以通過(guò)一些爬蟲(chóng)程序以非常低的成本實(shí)現,并且技術(shù)門(mén)檻很低,這也是本系列文章要討論的——網(wǎng)絡(luò )爬蟲(chóng)。
  
  有很多人認為,網(wǎng)絡(luò )應該始終遵循開(kāi)放的精神,頁(yè)面上呈現的信息應該毫無(wú)保留地與整個(gè)互聯(lián)網(wǎng)共享。但是,我認為隨著(zhù)今天IT行業(yè)的發(fā)展,網(wǎng)絡(luò )不再是當年與pdf競爭的所謂“超文本”信息載體。它已經(jīng)基于輕量級客戶(hù)端軟件的思想。存在。隨著(zhù)商業(yè)軟件的發(fā)展,網(wǎng)絡(luò )也不得不面對知識產(chǎn)權保護的問(wèn)題。試想一下,如果原創(chuàng )的優(yōu)質(zhì)內容不受保護,網(wǎng)絡(luò )世界中抄襲盜版猖獗,這其實(shí)有利于網(wǎng)絡(luò )生態(tài)的健康發(fā)展。這是一個(gè)缺點(diǎn),而且它'
  未經(jīng)授權的爬蟲(chóng)程序是危害web原創(chuàng )內容生態(tài)的罪魁禍首。因此,為了保護網(wǎng)站的內容,首先要考慮如何反爬。
  從爬行動(dòng)物的攻防來(lái)看
  最簡(jiǎn)單的爬蟲(chóng)是幾乎所有服務(wù)器端和客戶(hù)端編程語(yǔ)言都支持的 http 請求。只要對目標頁(yè)面的url進(jìn)行http get請求,就可以獲得瀏覽器加載頁(yè)面時(shí)的完整html文檔。我們稱(chēng)之為“同步頁(yè)面”。
  作為防御方,服務(wù)器可以根據http請求頭中的User-Agent檢查客戶(hù)端是合法的瀏覽器程序還是腳本爬蟲(chóng),從而決定是否使用真實(shí)的頁(yè)面信息內容發(fā)送給你。
  這當然是兒科最小的防御方法。作為進(jìn)攻方,爬蟲(chóng)完全可以偽造User-Agent字段。甚至,只要你愿意,在http的get方法中,請求頭的Referrer、Cookie等所有字段都可以被爬蟲(chóng)輕松處理。偽造。
  這時(shí),服務(wù)器就可以根據你聲明的瀏覽器廠(chǎng)商和版本(來(lái)自User-Agent),使用瀏覽器http頭指紋來(lái)識別你http頭中的每個(gè)字段是否符合瀏覽器的特性。如果匹配,它將被視為爬蟲(chóng)。該技術(shù)的一個(gè)典型應用是在 PhantomJS 1.x 版本中,由于底層調用了 Qt 框架的網(wǎng)絡(luò )庫,http 頭具有明顯的 Qt 框架的網(wǎng)絡(luò )請求特征,可以服務(wù)器直接識別。并被攔截。
  另外,還有一個(gè)比較異常的服務(wù)器端爬蟲(chóng)檢測機制,就是在http響應中為所有訪(fǎng)問(wèn)該頁(yè)面的http請求種上一個(gè)cookie token,然后在這個(gè)異步執行的一些ajax接口上學(xué)頁(yè)。檢查訪(fǎng)問(wèn)請求中是否收錄cookie token,返回token表示這是一次合法的瀏覽器訪(fǎng)問(wèn),否則表示剛剛發(fā)出token的用戶(hù)訪(fǎng)問(wèn)了頁(yè)面html但沒(méi)有訪(fǎng)問(wèn)執行js后調用的ajax在 html 請求中,很可能是爬蟲(chóng)。
  如果你不帶token直接訪(fǎng)問(wèn)一個(gè)接口,說(shuō)明你沒(méi)有請求過(guò)html頁(yè)面,而是直接向頁(yè)面中應該通過(guò)ajax訪(fǎng)問(wèn)的接口發(fā)起網(wǎng)絡(luò )請求,這顯然證明你是一個(gè)可疑的爬蟲(chóng)。知名電子商務(wù)公司網(wǎng)站亞馬遜采用了這種防御策略。
  以上是基于服務(wù)器端驗證爬蟲(chóng)程序可以玩的一些套路。
  基于客戶(hù)端js運行時(shí)的檢測
  現代瀏覽器賦予 JavaScript 強大的能力,所以我們可以將頁(yè)面的所有核心內容作為 js 異步請求 ajax 獲取數據然后渲染到頁(yè)面中,這顯然提高了爬取內容的門(mén)檻。這樣,我們就將爬蟲(chóng)和反爬的戰斗從服務(wù)端轉移到了客戶(hù)端瀏覽器中的js運行時(shí)。接下來(lái)說(shuō)一下結合客戶(hù)端js運行時(shí)的爬取技術(shù)。
  剛才提到的各種服務(wù)器端驗證,對于普通的python和java語(yǔ)言編寫(xiě)的HTTP爬蟲(chóng)程序,都有一定的技術(shù)門(mén)檻。畢竟,Web 應用程序是未經(jīng)授權的抓取工具的黑匣子。很多東西都需要一點(diǎn)一點(diǎn)的去嘗試,而一套耗費大量人力物力開(kāi)發(fā)的爬蟲(chóng)程序,只要網(wǎng)站作為防御者可以輕松調整一些策略,攻擊者也需要花費同樣的時(shí)間再次修改爬蟲(chóng)的爬取邏輯。
  此時(shí),您需要使用無(wú)頭瀏覽器。這是什么技術(shù)?其實(shí)說(shuō)白了就是程序可以操作瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè),這樣寫(xiě)爬蟲(chóng)的人就可以通過(guò)調用瀏覽器暴露給程序的API來(lái)實(shí)現復雜的爬取業(yè)務(wù)邏輯。
  事實(shí)上,這并不是近年來(lái)的新技術(shù)。曾經(jīng)有基于webkit內核的PhantomJS,基于火狐瀏覽器內核的SlimerJS,甚至還有基于IE內核的trifleJS。如果你有興趣,可以看看這里和這里有兩個(gè)無(wú)頭瀏覽器采集列表。
  這些無(wú)頭瀏覽器程序的原理其實(shí)就是對一些開(kāi)源瀏覽器內核C++代碼進(jìn)行改造和封裝,實(shí)現一個(gè)無(wú)需GUI界面渲染的簡(jiǎn)單瀏覽器程序。但是這些項目的通病是因為他們的代碼是基于fork官方webkit和其他內核的某個(gè)版本的trunk代碼,所以跟不上一些最新的css屬性和js語(yǔ)法,還有一些兼容性問(wèn)題,不如真實(shí)的GUI瀏覽器發(fā)行版運行穩定。
  其中,最成熟、用得最多的應該是PhantonJS。之前寫(xiě)過(guò)一篇關(guān)于這種爬蟲(chóng)識別的博客,這里不再贅述。PhantomJS 有很多問(wèn)題,因為它是單進(jìn)程模型,沒(méi)有必要的沙箱保護,瀏覽器內核的安全性較差。此外,該項目的作者已經(jīng)宣布他們將停止維護這個(gè)項目。
  現在谷歌瀏覽器團隊已經(jīng)在 Chrome 59 發(fā)布版本中開(kāi)放了 headless mode api,并開(kāi)源了一個(gè)基于 Node.js 調用的 headless chromium dirver 庫。我還為這個(gè)庫貢獻了一個(gè)centos環(huán)境部署依賴(lài)安裝列表。
  Headless Chrome 可以說(shuō)是 Headless Browser 中獨一無(wú)二的殺手锏。由于它本身就是一個(gè) chrome 瀏覽器,它支持各種新的 CSS 渲染特性和 js 運行時(shí)語(yǔ)法。
  基于這種方法,爬蟲(chóng)作為攻擊方可以繞過(guò)幾乎所有的服務(wù)器端驗證邏輯,但是這些爬蟲(chóng)在客戶(hù)端js運行時(shí)仍然存在一些缺陷,例如:
  基于插件對象的檢查
  if(navigator.plugins.length === 0) {
console.log('It may be Chrome headless');
}
復制代碼
  基于語(yǔ)言的檢查
  if(navigator.languages === '') {
console.log('Chrome headless detected');
}
復制代碼
  基于 webgl 的檢查
  var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if(vendor == 'Brian Paul' && renderer == 'Mesa OffScreen') {
console.log('Chrome headless detected');
}
復制代碼
  基于瀏覽器細線(xiàn)屬性的檢查
  if(!Modernizr['hairline']) {
console.log('It may be Chrome headless');
}
復制代碼
  檢查基于錯誤的img src屬性生成的img對象
  var body = document.getElementsByTagName('body')[0];
var image = document.createElement('img');
image.src = 'http://iloveponeydotcom32188.jg';
image.setAttribute('id', 'fakeimage');
body.appendChild(image);
image.onerror = function(){
if(image.width == 0 && image.height == 0) {
console.log('Chrome headless detected');
}
}
復制代碼
  基于以上一些瀏覽器特性的判斷,它基本上可以秒殺市面上大部分的Headless Browser程序。在這個(gè)層面上,網(wǎng)頁(yè)爬蟲(chóng)的門(mén)檻其實(shí)是提高了,要求編寫(xiě)爬蟲(chóng)程序的開(kāi)發(fā)者不得不修改瀏覽器內核的C++代碼,重新編譯一個(gè)瀏覽器,而以上特性對瀏覽器來(lái)說(shuō)是很重要的。內核的改動(dòng)其實(shí)不小,如果你嘗試過(guò)編譯Blink內核或者Gecko內核你就會(huì )明白對于一個(gè)“腳本小子”來(lái)說(shuō)是多么的難了~
  此外,我們還可以根據瀏覽器的UserAgent字段中描述的瀏覽器品牌、版本、型號信息,檢查js運行時(shí)、DOM和BOM的各個(gè)native對象的屬性和方法,觀(guān)察特性是否符合瀏覽器這個(gè)版本。設備應具備的功能。
  這種方法稱(chēng)為瀏覽器指紋識別技術(shù),它依賴(lài)于大型網(wǎng)站對各類(lèi)瀏覽器的api信息的采集。作為編寫(xiě)爬蟲(chóng)程序的攻擊者,你可以在無(wú)頭瀏覽器運行時(shí)預先注入一些js邏輯來(lái)偽造瀏覽器的特性。
  另外,在研究Robots Browser Detect using js api在瀏覽器端的時(shí)候,我們發(fā)現了一個(gè)有趣的trick??梢詫㈩A先注入的js函數偽裝成Native Function,看一下下面的代碼:
  var fakeAlert = (function(){}).bind(null);
console.log(window.alert.toString()); // function alert() { [native code] }
console.log(fakeAlert.toString()); // function () { [native code] }
復制代碼
  爬蟲(chóng)攻擊者可能會(huì )預先注入一些js方法,用一層代理函數作為鉤子包裹一些原生api,然后用這個(gè)假的js api覆蓋原生api。如果防御者在函數 toString 之后基于對 [native code] 的檢查來(lái)檢查這一點(diǎn),它將被繞過(guò)。所以需要更嚴格的檢查,因為bind(null) fake方法在toString之后沒(méi)有函數名,所以需要檢查toString之后的函數名是否為空。
  這個(gè)技巧有什么用?在這里延伸一下,反爬蟲(chóng)防御者有一個(gè)Robot Detect方法,就是在js運行的時(shí)候主動(dòng)拋出一個(gè)alert。文案可以寫(xiě)一些業(yè)務(wù)邏輯相關(guān)的。當普通用戶(hù)點(diǎn)擊OK按鈕時(shí),肯定會(huì )有1s甚至是alert。對于更長(cháng)的延遲,由于瀏覽器中的alert會(huì )阻塞js代碼的運行(其實(shí)在v8中,他會(huì )以類(lèi)似進(jìn)程掛起的方式掛起isolate context的執行),所以爬蟲(chóng)作為攻擊者可以選擇使用上面的竅門(mén),就是在頁(yè)面所有js運行前預先注入一段js代碼,偽造alert、prompt、confirm等所有彈窗方法。如果防御者在彈出代碼之前檢查他調用的alert方法是否仍然是原生的,則這種方式被阻止。
  對付爬行動(dòng)物的靈丹妙藥
  目前最可靠的反爬蟲(chóng)和機器人巡檢手段是驗證碼技術(shù)。但是,驗證碼并不意味著(zhù)必須強制用戶(hù)輸入一系列字母數字。還有很多基于用戶(hù)鼠標、觸摸屏(移動(dòng)端)等行為的行為驗證技術(shù)。其中,最成熟的是基于機器學(xué)習的谷歌reCAPTCHA。區分用戶(hù)和爬蟲(chóng)。
  基于以上對用戶(hù)和爬蟲(chóng)的識別和區分技術(shù),網(wǎng)站的防御者需要做的就是對該IP地址進(jìn)行封鎖或者對該IP的訪(fǎng)問(wèn)用戶(hù)施加高強度的驗證碼策略。這樣攻擊者就不得不購買(mǎi)IP代理池來(lái)捕獲網(wǎng)站信息內容,否則單個(gè)IP地址很容易被封殺,無(wú)法被捕獲。爬取和反爬取的門(mén)檻已經(jīng)提升到IP代理池的經(jīng)濟成本水平。
  機器人協(xié)議
  此外,在爬蟲(chóng)爬取技術(shù)領(lǐng)域,還有一種叫做robots協(xié)議的“白道”方式。您可以訪(fǎng)問(wèn) 網(wǎng)站 根目錄中的 /robots.txt。比如我們看一下github的robot協(xié)議。Allow 和 Disallow 聲明每個(gè) UA 爬蟲(chóng)的授權。
  然而,這只是君子之約。雖然它有法律上的好處,但它只能限制那些商業(yè)搜索引擎的蜘蛛程序,你不能限制那些“野爬愛(ài)好者”。
  寫(xiě)在最后
  網(wǎng)頁(yè)內容的爬取與對抗,注定是一場(chǎng)魔高道高的貓捉老鼠游戲。你永遠不可能用某種技術(shù)完全擋住爬蟲(chóng)的去路,你能做的就是增加攻擊。用戶(hù)爬取的成本,以及關(guān)于未經(jīng)授權的爬取行為的更準確信息。
  這篇文章中提到的驗證碼攻防其實(shí)是一個(gè)比較復雜的技術(shù)難點(diǎn)。我在這里留下一個(gè)懸念。有興趣的可以多加關(guān)注,期待后續文章的詳細闡述。
  另外,歡迎對爬蟲(chóng)感興趣的朋友關(guān)注我的開(kāi)源項目webster。該項目以Node.js結合Chrome無(wú)頭模式實(shí)現了一個(gè)高可用的網(wǎng)絡(luò )爬蟲(chóng)爬取框架。一個(gè)頁(yè)面中js和ajax渲染的所有異步內容;結合redis,實(shí)現了一個(gè)任務(wù)隊列,讓爬蟲(chóng)輕松進(jìn)行橫向和縱向分布式擴展。很容易部署,我已經(jīng)為webster提供了一個(gè)正式版的base runtime docker鏡像,如果你想先睹為快,你也可以試試這個(gè)webster demo docker image。

抓取網(wǎng)頁(yè)生成電子書(shū)(如何用PowerBI的PowerQuery批量采集多個(gè)網(wǎng)頁(yè)的數據(圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 195 次瀏覽 ? 2022-04-19 01:39 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何用PowerBI的PowerQuery批量采集多個(gè)網(wǎng)頁(yè)的數據(圖))
  前面介紹PowerBI數據獲取的時(shí)候,我舉了一個(gè)從網(wǎng)頁(yè)獲取數據的例子,但是當時(shí)只爬取了一頁(yè)數據。本篇文章將介紹如何使用PowerBI的Power Query批處理采集Data為多個(gè)網(wǎng)頁(yè)。Excel 中的操作類(lèi)似。磷
  本文以智聯(lián)招聘網(wǎng)站為例,采集上海招聘信息。
  以下是詳細步驟:
  (一)分析 URL 結構
  打開(kāi)智聯(lián)招聘網(wǎng)站,搜索上海工作地點(diǎn)的資料,
  
  將頁(yè)面拉到最底部,找到顯示頁(yè)碼的地方,點(diǎn)擊前三頁(yè),網(wǎng)址如下,
  %e4%b8%8a%e6%b5%b7&sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=1
  %e4%b8%8a%e6%b5%b7&sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=2
  %e4%b8%8a%e6%b5%b7&sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=3
  可以看出,最后一個(gè)數字是頁(yè)碼的ID,是一個(gè)控制分頁(yè)數據的變量。
  (二)使用 PowerBI采集第一頁(yè)的數據
  打開(kāi)PowerBI Desktop,從網(wǎng)頁(yè)獲取數據,在彈窗中選擇【高級】,根據上面分析的URL結構,第一行輸入除最后一頁(yè)ID外的URL,第二行輸入頁(yè)碼.
  
  從 URL 預覽可以看出,上面兩行的 URL 已經(jīng)自動(dòng)合并在一起了;這里的單獨輸入只是為了以后更清楚地區分頁(yè)碼變量,其實(shí)直接輸入完整的URL也是可以的。
 ?。ㄈ绻?yè)碼變量不是最后一位,而是在中間,則網(wǎng)址要分三行輸入)
  點(diǎn)擊OK后,發(fā)現很多表,
  
  從中可以看出智聯(lián)招聘網(wǎng)站上的每個(gè)招聘信息都是一個(gè)表,不用管它,隨便選一個(gè)表,比如勾選Table0,點(diǎn)擊編輯進(jìn)入Power Query編輯器。
  在PQ編輯器中,直接刪除[source]后面的所有步驟,然后展開(kāi)數據,刪除前面幾列的數據。
  
  這樣第一頁(yè)采集的數據就來(lái)了。然后整理這個(gè)頁(yè)面的數據,刪除無(wú)用的信息,添加字段名??梢钥吹?,一頁(yè)有60條招聘信息。
  在這里完成第一頁(yè)的數據后,當你轉到采集的其他頁(yè)面時(shí),數據結構將與第一頁(yè)完成后的數據結構相同,采集的數據可以直接使用;沒(méi)關(guān)系,你可以等到采集所有網(wǎng)頁(yè)數據都排序在一起。
  如果要大量抓取網(wǎng)頁(yè)數據,為了節省時(shí)間,可以不用對第一頁(yè)的數據進(jìn)行排序,直接進(jìn)行下一步。
  (三)根據頁(yè)碼參數設置自定義功能
  這是最重要的一步。
  還是剛才第一頁(yè)數據的PQ編輯器窗口,打開(kāi)【高級編輯器】,在let之前輸入:
  
  并且在let后面第一行的URL中,&后面的“1”變成了(這是第二步使用高級選項分兩行輸入URL的好處):
  修改后 [source] 的 URL 變?yōu)椋?br />   確認后,剛才第一頁(yè)數據的查詢(xún)窗口變成了自定義函數的輸入參數窗口,Table0表也變成了函數的樣式。為了更直觀(guān),將此函數重命名為Data_Zhaopin。
  至此,自定義功能完成。p是函數的變量,用來(lái)控制頁(yè)碼。如果輸入數字,例如 7,將捕獲第 7 頁(yè)的數據。
  
  輸入參數一次只能抓取一個(gè)網(wǎng)頁(yè)。批量爬取需要執行以下步驟。
  (四)批量調用自定義函數
  首先,使用一個(gè)空查詢(xún)來(lái)創(chuàng )建一個(gè)數字序列。如果要獲取前 100 頁(yè)數據,請創(chuàng )建一個(gè)從 1 到 100 的序列并輸入空查詢(xún)。
  回車(chē)生成一個(gè)從1到100的序列,然后變成表格。gif操作圖如下:
  
  然后調用自定義函數,
  
  在彈出的窗口中,點(diǎn)擊【函數查詢(xún)】下拉框,選擇剛剛創(chuàng )建的自定義函數Data_Zhaopin。
  單擊“確定”開(kāi)始批量抓取網(wǎng)頁(yè)。因為100頁(yè)數據比較多,大概需要5分鐘。這也是我提前進(jìn)行第二步數據排序的結果,導致爬取慢。展開(kāi)這張表,就是這100頁(yè)的數據,
  
  至此,已經(jīng)完成了100頁(yè)智聯(lián)招聘信息的批量抓取。上面的步驟似乎很多。其實(shí)掌握之后,10分鐘左右就可以搞定。最大的時(shí)間塊仍然是最后一步。捕獲數據的過(guò)程非常耗時(shí)。
  網(wǎng)頁(yè)上的數據不斷更新。完成以上步驟后,在PQ中點(diǎn)擊刷新,即可隨時(shí)一鍵提取網(wǎng)站實(shí)時(shí)數據。做一次,受益終生!
  以上主要使用了PowerBI中的Power Query功能,在能使用PQ功能的Excel中也可以進(jìn)行同樣的操作。
  當然,PowerBI 不是專(zhuān)業(yè)的爬蟲(chóng)工具。如果網(wǎng)頁(yè)比較復雜或者有反爬機制,還是得使用專(zhuān)業(yè)的工具,比如R或者Python。在使用PowerBI批量抓取某個(gè)網(wǎng)站數據之前,先嘗試采集一個(gè)頁(yè)面,如果可以采集獲取,則使用上述步驟,如果采集不行當您到達時(shí),您無(wú)需再浪費時(shí)間。
  如果您是 Power BI 新手,可以前往微信公眾號:“PowerBI 星球”,回復“PowerBI”,獲取《PowerBI 七天入門(mén)》電子書(shū),幫助您快速提高工作效率。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何用PowerBI的PowerQuery批量采集多個(gè)網(wǎng)頁(yè)的數據(圖))
  前面介紹PowerBI數據獲取的時(shí)候,我舉了一個(gè)從網(wǎng)頁(yè)獲取數據的例子,但是當時(shí)只爬取了一頁(yè)數據。本篇文章將介紹如何使用PowerBI的Power Query批處理采集Data為多個(gè)網(wǎng)頁(yè)。Excel 中的操作類(lèi)似。磷
  本文以智聯(lián)招聘網(wǎng)站為例,采集上海招聘信息。
  以下是詳細步驟:
  (一)分析 URL 結構
  打開(kāi)智聯(lián)招聘網(wǎng)站,搜索上海工作地點(diǎn)的資料,
  
  將頁(yè)面拉到最底部,找到顯示頁(yè)碼的地方,點(diǎn)擊前三頁(yè),網(wǎng)址如下,
  %e4%b8%8a%e6%b5%b7&sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=1
  %e4%b8%8a%e6%b5%b7&sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=2
  %e4%b8%8a%e6%b5%b7&sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=3
  可以看出,最后一個(gè)數字是頁(yè)碼的ID,是一個(gè)控制分頁(yè)數據的變量。
  (二)使用 PowerBI采集第一頁(yè)的數據
  打開(kāi)PowerBI Desktop,從網(wǎng)頁(yè)獲取數據,在彈窗中選擇【高級】,根據上面分析的URL結構,第一行輸入除最后一頁(yè)ID外的URL,第二行輸入頁(yè)碼.
  
  從 URL 預覽可以看出,上面兩行的 URL 已經(jīng)自動(dòng)合并在一起了;這里的單獨輸入只是為了以后更清楚地區分頁(yè)碼變量,其實(shí)直接輸入完整的URL也是可以的。
 ?。ㄈ绻?yè)碼變量不是最后一位,而是在中間,則網(wǎng)址要分三行輸入)
  點(diǎn)擊OK后,發(fā)現很多表,
  
  從中可以看出智聯(lián)招聘網(wǎng)站上的每個(gè)招聘信息都是一個(gè)表,不用管它,隨便選一個(gè)表,比如勾選Table0,點(diǎn)擊編輯進(jìn)入Power Query編輯器。
  在PQ編輯器中,直接刪除[source]后面的所有步驟,然后展開(kāi)數據,刪除前面幾列的數據。
  
  這樣第一頁(yè)采集的數據就來(lái)了。然后整理這個(gè)頁(yè)面的數據,刪除無(wú)用的信息,添加字段名??梢钥吹?,一頁(yè)有60條招聘信息。
  在這里完成第一頁(yè)的數據后,當你轉到采集的其他頁(yè)面時(shí),數據結構將與第一頁(yè)完成后的數據結構相同,采集的數據可以直接使用;沒(méi)關(guān)系,你可以等到采集所有網(wǎng)頁(yè)數據都排序在一起。
  如果要大量抓取網(wǎng)頁(yè)數據,為了節省時(shí)間,可以不用對第一頁(yè)的數據進(jìn)行排序,直接進(jìn)行下一步。
  (三)根據頁(yè)碼參數設置自定義功能
  這是最重要的一步。
  還是剛才第一頁(yè)數據的PQ編輯器窗口,打開(kāi)【高級編輯器】,在let之前輸入:
  
  并且在let后面第一行的URL中,&后面的“1”變成了(這是第二步使用高級選項分兩行輸入URL的好處):
  修改后 [source] 的 URL 變?yōu)椋?br />   確認后,剛才第一頁(yè)數據的查詢(xún)窗口變成了自定義函數的輸入參數窗口,Table0表也變成了函數的樣式。為了更直觀(guān),將此函數重命名為Data_Zhaopin。
  至此,自定義功能完成。p是函數的變量,用來(lái)控制頁(yè)碼。如果輸入數字,例如 7,將捕獲第 7 頁(yè)的數據。
  
  輸入參數一次只能抓取一個(gè)網(wǎng)頁(yè)。批量爬取需要執行以下步驟。
  (四)批量調用自定義函數
  首先,使用一個(gè)空查詢(xún)來(lái)創(chuàng )建一個(gè)數字序列。如果要獲取前 100 頁(yè)數據,請創(chuàng )建一個(gè)從 1 到 100 的序列并輸入空查詢(xún)。
  回車(chē)生成一個(gè)從1到100的序列,然后變成表格。gif操作圖如下:
  
  然后調用自定義函數,
  
  在彈出的窗口中,點(diǎn)擊【函數查詢(xún)】下拉框,選擇剛剛創(chuàng )建的自定義函數Data_Zhaopin。
  單擊“確定”開(kāi)始批量抓取網(wǎng)頁(yè)。因為100頁(yè)數據比較多,大概需要5分鐘。這也是我提前進(jìn)行第二步數據排序的結果,導致爬取慢。展開(kāi)這張表,就是這100頁(yè)的數據,
  
  至此,已經(jīng)完成了100頁(yè)智聯(lián)招聘信息的批量抓取。上面的步驟似乎很多。其實(shí)掌握之后,10分鐘左右就可以搞定。最大的時(shí)間塊仍然是最后一步。捕獲數據的過(guò)程非常耗時(shí)。
  網(wǎng)頁(yè)上的數據不斷更新。完成以上步驟后,在PQ中點(diǎn)擊刷新,即可隨時(shí)一鍵提取網(wǎng)站實(shí)時(shí)數據。做一次,受益終生!
  以上主要使用了PowerBI中的Power Query功能,在能使用PQ功能的Excel中也可以進(jìn)行同樣的操作。
  當然,PowerBI 不是專(zhuān)業(yè)的爬蟲(chóng)工具。如果網(wǎng)頁(yè)比較復雜或者有反爬機制,還是得使用專(zhuān)業(yè)的工具,比如R或者Python。在使用PowerBI批量抓取某個(gè)網(wǎng)站數據之前,先嘗試采集一個(gè)頁(yè)面,如果可以采集獲取,則使用上述步驟,如果采集不行當您到達時(shí),您無(wú)需再浪費時(shí)間。
  如果您是 Power BI 新手,可以前往微信公眾號:“PowerBI 星球”,回復“PowerBI”,獲取《PowerBI 七天入門(mén)》電子書(shū),幫助您快速提高工作效率。

抓取網(wǎng)頁(yè)生成電子書(shū)(大牛與搬運工的差距——學(xué)習Python的正確姿勢(組圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 111 次瀏覽 ? 2022-04-19 01:38 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(大牛與搬運工的差距——學(xué)習Python的正確姿勢(組圖))
  阿里云 > 云棲社區 > 主題地圖 > Z > 自己動(dòng)手爬蟲(chóng)電子書(shū)
  
  推薦活動(dòng):
  更多優(yōu)惠>
  Current Topic: DIY Web Crawler 電子書(shū)加入采集
  相關(guān)話(huà)題:
  自己動(dòng)手 網(wǎng)絡(luò )爬蟲(chóng) 電子書(shū) 相關(guān)博客 查看更多博客
  2018優(yōu)秀譯者評選,快來(lái)挑選你心中獨一無(wú)二的人選吧,2018異步暢銷(xiāo)新書(shū)都在這里
  
  
  作者:異步社區 3713 瀏覽評論:03年前
  人能通過(guò)一本書(shū)了解世界和時(shí)代嗎?當然!任何優(yōu)秀的作家都可以通過(guò)創(chuàng )新的學(xué)術(shù)研究,以文學(xué)作品展現自己的生命力和價(jià)值,成為讀者窺視世界、了解事物的窗口。一個(gè)優(yōu)秀的作家和他獨特的藝術(shù)創(chuàng )作總是會(huì )被人津津樂(lè )道。當然,由于各種原因,一些優(yōu)秀的
  閱讀全文
  干貨 | 學(xué)習Python的正確姿勢
  
  
  作者:gavin_hsueh4122 瀏覽評論:03年前
  前段時(shí)間和大家分享了一篇關(guān)于學(xué)習方法的文章《丹尼爾和波特的差距——學(xué)習方法的力量》。我們將學(xué)習過(guò)程分為八個(gè)步驟,借鑒敏捷開(kāi)發(fā)的迭代思想,達到自我迭代學(xué)習的效果。行動(dòng)勝于雄辯,理論結合實(shí)踐才是王道,所以在這篇文章中,我將在之前的學(xué)習方法的基礎上,分享我是如何學(xué)習python的。
  閱讀全文
  后端架構師技術(shù)圖
  
  
  作者:jackcooper20156238 瀏覽評論:03年前
  數據結構隊列集合鏈表、數組字典、關(guān)聯(lián)數組堆棧樹(shù)二叉樹(shù)完全二叉樹(shù)平衡二叉樹(shù)二叉搜索樹(shù)(BST)紅黑樹(shù)B-、B+、B*樹(shù)LSM樹(shù)BitSet常用算法排序、搜索算法選擇冒泡排序 插入排序 快速排序 合并排序 希爾排序 堆排序
  閱讀全文
  如何使用 Python 抓取數據?(一)網(wǎng)頁(yè)抓取
  
  
  作者:王淑儀2089 瀏覽評論:04年前
  你期待已久的 Python 網(wǎng)絡(luò )數據爬蟲(chóng)教程就在這里。本文向您展示了如何從網(wǎng)頁(yè)中查找感興趣的鏈接和描述,并在 Excel 中抓取和存儲它們。我需要在公眾號后臺,經(jīng)??梢允盏阶x者的消息。許多評論是讀者的問(wèn)題。只要我有時(shí)間,我會(huì )嘗試回答它。但是有些消息乍一看似乎不清楚
  閱讀全文
  第一次了解 Scrapy,并在一個(gè)充滿(mǎn)爬行動(dòng)物的世界中成為一個(gè)好公民
  
  
  作者:異步社區 2481 瀏覽評論:04年前
  歡迎來(lái)到你的 Scrapy 之旅。通過(guò)這篇文章,我們的目標是讓您從一個(gè)經(jīng)驗很少或沒(méi)有經(jīng)驗的 Scrapy 初學(xué)者到有信心使用這個(gè)強大的框架從網(wǎng)絡(luò )或其他來(lái)源抓取大型數據集的 Scrapy 專(zhuān)家。這篇文章將介紹 Scrapy 并向你展示一些你可以用它做的很酷的事情。1.1
  閱讀全文
  阿里巴巴飛天大數據平臺MaxCompute(原ODPS)完整指南(持續更新20200109)
  
  
  作者:隱秘森林 123771 瀏覽評論:34年前
  阿里巴巴飛天大數據平臺MaxCompute不斷演進(jìn);概述 大數據計算服務(wù)(MaxCompute,原名ODPS,產(chǎn)品地址:)是一種快速、全托管的TB/PB級數據倉庫解決方案。麥克斯公司
  閱讀全文
  網(wǎng)絡(luò )爬蟲(chóng) - 原理 (一)
  
  
  作者:crazyacking1276 瀏覽評論:06年前
  介紹:我們在百度首頁(yè)輸入關(guān)鍵詞,點(diǎn)擊百度,相關(guān)內容會(huì )立即顯示。這個(gè)動(dòng)作背后隱藏著(zhù)哪些操作?事實(shí)上,百度的核心搜索引擎是一個(gè)大型分布式網(wǎng)絡(luò )爬蟲(chóng)程序。什么是網(wǎng)絡(luò )爬蟲(chóng)?詳情請參考:1.百度百科2.維基百科網(wǎng)絡(luò )爬蟲(chóng)的主要用途
  閱讀全文 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(大牛與搬運工的差距——學(xué)習Python的正確姿勢(組圖))
  阿里云 > 云棲社區 > 主題地圖 > Z > 自己動(dòng)手爬蟲(chóng)電子書(shū)
  
  推薦活動(dòng):
  更多優(yōu)惠>
  Current Topic: DIY Web Crawler 電子書(shū)加入采集
  相關(guān)話(huà)題:
  自己動(dòng)手 網(wǎng)絡(luò )爬蟲(chóng) 電子書(shū) 相關(guān)博客 查看更多博客
  2018優(yōu)秀譯者評選,快來(lái)挑選你心中獨一無(wú)二的人選吧,2018異步暢銷(xiāo)新書(shū)都在這里
  
  
  作者:異步社區 3713 瀏覽評論:03年前
  人能通過(guò)一本書(shū)了解世界和時(shí)代嗎?當然!任何優(yōu)秀的作家都可以通過(guò)創(chuàng )新的學(xué)術(shù)研究,以文學(xué)作品展現自己的生命力和價(jià)值,成為讀者窺視世界、了解事物的窗口。一個(gè)優(yōu)秀的作家和他獨特的藝術(shù)創(chuàng )作總是會(huì )被人津津樂(lè )道。當然,由于各種原因,一些優(yōu)秀的
  閱讀全文
  干貨 | 學(xué)習Python的正確姿勢
  
  
  作者:gavin_hsueh4122 瀏覽評論:03年前
  前段時(shí)間和大家分享了一篇關(guān)于學(xué)習方法的文章《丹尼爾和波特的差距——學(xué)習方法的力量》。我們將學(xué)習過(guò)程分為八個(gè)步驟,借鑒敏捷開(kāi)發(fā)的迭代思想,達到自我迭代學(xué)習的效果。行動(dòng)勝于雄辯,理論結合實(shí)踐才是王道,所以在這篇文章中,我將在之前的學(xué)習方法的基礎上,分享我是如何學(xué)習python的。
  閱讀全文
  后端架構師技術(shù)圖
  
  
  作者:jackcooper20156238 瀏覽評論:03年前
  數據結構隊列集合鏈表、數組字典、關(guān)聯(lián)數組堆棧樹(shù)二叉樹(shù)完全二叉樹(shù)平衡二叉樹(shù)二叉搜索樹(shù)(BST)紅黑樹(shù)B-、B+、B*樹(shù)LSM樹(shù)BitSet常用算法排序、搜索算法選擇冒泡排序 插入排序 快速排序 合并排序 希爾排序 堆排序
  閱讀全文
  如何使用 Python 抓取數據?(一)網(wǎng)頁(yè)抓取
  
  
  作者:王淑儀2089 瀏覽評論:04年前
  你期待已久的 Python 網(wǎng)絡(luò )數據爬蟲(chóng)教程就在這里。本文向您展示了如何從網(wǎng)頁(yè)中查找感興趣的鏈接和描述,并在 Excel 中抓取和存儲它們。我需要在公眾號后臺,經(jīng)??梢允盏阶x者的消息。許多評論是讀者的問(wèn)題。只要我有時(shí)間,我會(huì )嘗試回答它。但是有些消息乍一看似乎不清楚
  閱讀全文
  第一次了解 Scrapy,并在一個(gè)充滿(mǎn)爬行動(dòng)物的世界中成為一個(gè)好公民
  
  
  作者:異步社區 2481 瀏覽評論:04年前
  歡迎來(lái)到你的 Scrapy 之旅。通過(guò)這篇文章,我們的目標是讓您從一個(gè)經(jīng)驗很少或沒(méi)有經(jīng)驗的 Scrapy 初學(xué)者到有信心使用這個(gè)強大的框架從網(wǎng)絡(luò )或其他來(lái)源抓取大型數據集的 Scrapy 專(zhuān)家。這篇文章將介紹 Scrapy 并向你展示一些你可以用它做的很酷的事情。1.1
  閱讀全文
  阿里巴巴飛天大數據平臺MaxCompute(原ODPS)完整指南(持續更新20200109)
  
  
  作者:隱秘森林 123771 瀏覽評論:34年前
  阿里巴巴飛天大數據平臺MaxCompute不斷演進(jìn);概述 大數據計算服務(wù)(MaxCompute,原名ODPS,產(chǎn)品地址:)是一種快速、全托管的TB/PB級數據倉庫解決方案。麥克斯公司
  閱讀全文
  網(wǎng)絡(luò )爬蟲(chóng) - 原理 (一)
  
  
  作者:crazyacking1276 瀏覽評論:06年前
  介紹:我們在百度首頁(yè)輸入關(guān)鍵詞,點(diǎn)擊百度,相關(guān)內容會(huì )立即顯示。這個(gè)動(dòng)作背后隱藏著(zhù)哪些操作?事實(shí)上,百度的核心搜索引擎是一個(gè)大型分布式網(wǎng)絡(luò )爬蟲(chóng)程序。什么是網(wǎng)絡(luò )爬蟲(chóng)?詳情請參考:1.百度百科2.維基百科網(wǎng)絡(luò )爬蟲(chóng)的主要用途
  閱讀全文

抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 111 次瀏覽 ? 2022-04-18 13:48 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
  我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
  Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
  
  真的很好的閱讀體驗
  Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
  由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
  
  將網(wǎng)頁(yè) 文章 制作成電子書(shū)
  Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
  
  以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
  
  其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
  
  要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
  首先,根據Doocer個(gè)人設置頁(yè)面的提示,打開(kāi)Amazon Kindle的個(gè)人文檔設置,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
  
  最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
  
  仍有一些問(wèn)題需要注意
  Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
  自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
  目前,Doocer 的所有功能都可以免費使用。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
  我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
  Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
  
  真的很好的閱讀體驗
  Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
  由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
  
  將網(wǎng)頁(yè) 文章 制作成電子書(shū)
  Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
  
  以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
  
  其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
  
  要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
  首先,根據Doocer個(gè)人設置頁(yè)面的提示,打開(kāi)Amazon Kindle的個(gè)人文檔設置,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
  
  最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
  
  仍有一些問(wèn)題需要注意
  Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
  自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
  目前,Doocer 的所有功能都可以免費使用。

抓取網(wǎng)頁(yè)生成電子書(shū)(《后期制作》自動(dòng)重試怎么做?怎么提??? )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 106 次瀏覽 ? 2022-04-17 21:34 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(《后期制作》自動(dòng)重試怎么做?怎么提???
)
  主要功能:可以提取和調整指定小說(shuō)目錄頁(yè)的章節信息,然后按照章節順序抓取小說(shuō)內容,然后合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
  
  特色功能1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
  2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
  3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
  4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(huì )有明顯的操作提示),調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站:已輸入10個(gè)適用網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到想要的書(shū)),以及相應的代碼也可以自動(dòng)應用,其他小說(shuō)網(wǎng)站也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中備份。
  6、輕松制作電子書(shū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
   查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(《后期制作》自動(dòng)重試怎么做?怎么提???
)
  主要功能:可以提取和調整指定小說(shuō)目錄頁(yè)的章節信息,然后按照章節順序抓取小說(shuō)內容,然后合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
  
  特色功能1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
  2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
  3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
  4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(huì )有明顯的操作提示),調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站:已輸入10個(gè)適用網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到想要的書(shū)),以及相應的代碼也可以自動(dòng)應用,其他小說(shuō)網(wǎng)站也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中備份。
  6、輕松制作電子書(shū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
  

抓取網(wǎng)頁(yè)生成電子書(shū)(PostedJanuary14,安裝Bash官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2022-04-17 15:00 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(PostedJanuary14,安裝Bash官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單)
  Scrapy 抓取熱門(mén)短書(shū)生成電子書(shū)發(fā)送到 Kindle 發(fā)表于 2016 年 1 月 14 日
  簡(jiǎn)書(shū)是個(gè)很好的學(xué)習者網(wǎng)站,我大多只關(guān)注首頁(yè)的人文章,但是最近因為忙,錯過(guò)了很多首頁(yè)的文章,所以我有個(gè)想法,把每日熱門(mén)Top生成mobi并推送到kindle。這樣一來(lái),在地鐵上就能很快搞定。
  環(huán)境準備:
  關(guān)于口徑安裝
  重擊
  sudo -v && wget -nv -O- https://raw.githubusercontent. ... er.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
  官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單,執行后即可安裝使用,但調用ebook-convert時(shí)gitbook會(huì )報錯。這里報的錯誤應該是QT錯誤(至少我遇到過(guò),具體錯誤信息忘記截圖了)如果遇到這個(gè)錯誤,直接安裝QT pyQT即可。calibre安裝頁(yè)面有依賴(lài)表
  安裝 Gitbook
  需要安裝 nodejs 和 npm 然后執行 npm install -g gitbook-cli
  安裝建樹(shù)熱
  需要強調的是,這部分需要解決很多依賴(lài),
  scrapy依賴(lài)的python包有很多,這些依賴(lài)的python大部分都需要一些系統庫。如有需要,需要安裝apt-get和yum,如python-devel libffi-devel libxml-devel等...
  peewee(數據庫ORM)需要mysql-devel,上面的例子都知道,這個(gè)是我部署后寫(xiě)的,部署過(guò)程就不詳細記錄了,現在只能憑記憶寫(xiě)這一章了。
  重擊
  $ git clone https://github.com/jackeyGao/jianshuHot
$ cd jianshuHot
$ pip install -r requirements.txt
  初始化器
  重擊
  $ sh init.sh
  郵件配置
  這是用于發(fā)送電子郵件的 sendEmail 和下載地址。解壓后將解壓后的sendEmail重命名為/usr/local/bin/sendEmail。理論上可以安裝成功。這是免編譯的,只需要在機器上安裝 perl。
  然后修改start.sh郵箱配置,寫(xiě)成自己的163郵箱,也可以用其他品牌郵箱,如果用其他品牌別忘了改,改到對應的smtp服務(wù)器就好了。
  注意:無(wú)論您使用哪個(gè)電子郵件地址,您都必須將此電子郵件帳戶(hù)添加到亞馬遜的批準發(fā)件人電子郵件列表中,以確保您發(fā)送的文件可以到達亞馬遜云
  重擊
  $ vim start.sh
....
YOURKINDLE_MAIL_ADDRESS="[email?protected]"
YOUR_SEND_MAIL_USERNAME="[email?protected]"
YOUR_SEND_MAIL_SECRET = 'xxxxxxxxxxxx'
MOBI_BOOK_PATH='./output/book.mobi'
...
  開(kāi)始爬行
  重擊
  $ sh start.sh
  執行后會(huì )自動(dòng)抓取頁(yè)面生成markdown,下載每個(gè)文章的圖片,然后gitbook會(huì )通過(guò)markdown生成這個(gè)文檔列表的book.mobi(output/book.mobi),并在start.sh 的末尾有一個(gè)備份操作會(huì )將這個(gè) mobi 備份到 output/books。然后發(fā)送到指定kindle地址郵箱。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(PostedJanuary14,安裝Bash官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單)
  Scrapy 抓取熱門(mén)短書(shū)生成電子書(shū)發(fā)送到 Kindle 發(fā)表于 2016 年 1 月 14 日
  簡(jiǎn)書(shū)是個(gè)很好的學(xué)習者網(wǎng)站,我大多只關(guān)注首頁(yè)的人文章,但是最近因為忙,錯過(guò)了很多首頁(yè)的文章,所以我有個(gè)想法,把每日熱門(mén)Top生成mobi并推送到kindle。這樣一來(lái),在地鐵上就能很快搞定。
  環(huán)境準備:
  關(guān)于口徑安裝
  重擊
  sudo -v && wget -nv -O- https://raw.githubusercontent. ... er.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
  官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單,執行后即可安裝使用,但調用ebook-convert時(shí)gitbook會(huì )報錯。這里報的錯誤應該是QT錯誤(至少我遇到過(guò),具體錯誤信息忘記截圖了)如果遇到這個(gè)錯誤,直接安裝QT pyQT即可。calibre安裝頁(yè)面有依賴(lài)表
  安裝 Gitbook
  需要安裝 nodejs 和 npm 然后執行 npm install -g gitbook-cli
  安裝建樹(shù)熱
  需要強調的是,這部分需要解決很多依賴(lài),
  scrapy依賴(lài)的python包有很多,這些依賴(lài)的python大部分都需要一些系統庫。如有需要,需要安裝apt-get和yum,如python-devel libffi-devel libxml-devel等...
  peewee(數據庫ORM)需要mysql-devel,上面的例子都知道,這個(gè)是我部署后寫(xiě)的,部署過(guò)程就不詳細記錄了,現在只能憑記憶寫(xiě)這一章了。
  重擊
  $ git clone https://github.com/jackeyGao/jianshuHot
$ cd jianshuHot
$ pip install -r requirements.txt
  初始化器
  重擊
  $ sh init.sh
  郵件配置
  這是用于發(fā)送電子郵件的 sendEmail 和下載地址。解壓后將解壓后的sendEmail重命名為/usr/local/bin/sendEmail。理論上可以安裝成功。這是免編譯的,只需要在機器上安裝 perl。
  然后修改start.sh郵箱配置,寫(xiě)成自己的163郵箱,也可以用其他品牌郵箱,如果用其他品牌別忘了改,改到對應的smtp服務(wù)器就好了。
  注意:無(wú)論您使用哪個(gè)電子郵件地址,您都必須將此電子郵件帳戶(hù)添加到亞馬遜的批準發(fā)件人電子郵件列表中,以確保您發(fā)送的文件可以到達亞馬遜云
  重擊
  $ vim start.sh
....
YOURKINDLE_MAIL_ADDRESS="[email?protected]"
YOUR_SEND_MAIL_USERNAME="[email?protected]"
YOUR_SEND_MAIL_SECRET = 'xxxxxxxxxxxx'
MOBI_BOOK_PATH='./output/book.mobi'
...
  開(kāi)始爬行
  重擊
  $ sh start.sh
  執行后會(huì )自動(dòng)抓取頁(yè)面生成markdown,下載每個(gè)文章的圖片,然后gitbook會(huì )通過(guò)markdown生成這個(gè)文檔列表的book.mobi(output/book.mobi),并在start.sh 的末尾有一個(gè)備份操作會(huì )將這個(gè) mobi 備份到 output/books。然后發(fā)送到指定kindle地址郵箱。

抓取網(wǎng)頁(yè)生成電子書(shū)(ireadbook使用KindEditor編輯器以所見(jiàn)所得)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 138 次瀏覽 ? 2022-04-17 10:34 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(ireadbook使用KindEditor編輯器以所見(jiàn)所得)
  ireadbook reader是一款簡(jiǎn)單實(shí)用的電子書(shū)制作軟件??梢詭椭脩?hù)快速制作出高質(zhì)量的有聲電子書(shū),軟件界面簡(jiǎn)潔、小巧、好用,有需要的用戶(hù)不要錯過(guò)。
  
  【軟件特色】
  1. 快速添加章節并編輯標題以顯示在目錄樹(shù)中。
  2. 使用 KindEditor 編輯器以所見(jiàn)即所得的方式編輯頁(yè)面內容,包括修改字體大小和格式。
  3. 可以插入jpg/gif/png等多種格式的圖片。
  4. 支持mp3/wma等音頻格式,閱讀器提供內置播放器。
  5. 免費使用,綠色軟件,無(wú)需安裝。
  【使用說(shuō)明】
  1.txt文本格式:ansi,utf-8、unicode格式自動(dòng)識別;
  2.網(wǎng)頁(yè)內容:與網(wǎng)頁(yè)瀏覽器集成,可以直接從瀏覽的網(wǎng)頁(yè)中抓取文字內容,放入新的章節;
  3. 字格式;
  智能拆分章節,自定義拆分規則,可以根據設定的規則拆分大源文件。
  按固定長(cháng)度拆分章節,拆分的章節保持段落完整。
  支持插入圖片。epub 支持的圖片格式有 gif、jpg、jpeg 和 bmp。
  支持章節順序調整。
  多種輸出格式:epub、內嵌字體的epub格式(可在sony閱讀器上瀏覽)、txt格式(分章節)、html格式(utf-8編碼)、pdf格式;
  上傳epub書(shū)籍到iphone、ipod touch,上傳的書(shū)籍可以直接用stanza打開(kāi)(帶縮略圖、封面、書(shū)籍介紹)
  注意:需要在 iPhone 和 iPod touch 上安裝 OPEN SSH。
  修復了合并章節軟件崩潰的BUG;修復生成的epub在部分??閱讀器上有重疊段落的問(wèn)題 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(ireadbook使用KindEditor編輯器以所見(jiàn)所得)
  ireadbook reader是一款簡(jiǎn)單實(shí)用的電子書(shū)制作軟件??梢詭椭脩?hù)快速制作出高質(zhì)量的有聲電子書(shū),軟件界面簡(jiǎn)潔、小巧、好用,有需要的用戶(hù)不要錯過(guò)。
  
  【軟件特色】
  1. 快速添加章節并編輯標題以顯示在目錄樹(shù)中。
  2. 使用 KindEditor 編輯器以所見(jiàn)即所得的方式編輯頁(yè)面內容,包括修改字體大小和格式。
  3. 可以插入jpg/gif/png等多種格式的圖片。
  4. 支持mp3/wma等音頻格式,閱讀器提供內置播放器。
  5. 免費使用,綠色軟件,無(wú)需安裝。
  【使用說(shuō)明】
  1.txt文本格式:ansi,utf-8、unicode格式自動(dòng)識別;
  2.網(wǎng)頁(yè)內容:與網(wǎng)頁(yè)瀏覽器集成,可以直接從瀏覽的網(wǎng)頁(yè)中抓取文字內容,放入新的章節;
  3. 字格式;
  智能拆分章節,自定義拆分規則,可以根據設定的規則拆分大源文件。
  按固定長(cháng)度拆分章節,拆分的章節保持段落完整。
  支持插入圖片。epub 支持的圖片格式有 gif、jpg、jpeg 和 bmp。
  支持章節順序調整。
  多種輸出格式:epub、內嵌字體的epub格式(可在sony閱讀器上瀏覽)、txt格式(分章節)、html格式(utf-8編碼)、pdf格式;
  上傳epub書(shū)籍到iphone、ipod touch,上傳的書(shū)籍可以直接用stanza打開(kāi)(帶縮略圖、封面、書(shū)籍介紹)
  注意:需要在 iPhone 和 iPod touch 上安裝 OPEN SSH。
  修復了合并章節軟件崩潰的BUG;修復生成的epub在部分??閱讀器上有重疊段落的問(wèn)題

抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)頁(yè)設計師有時(shí)使用屏幕抓取的另一個(gè)常見(jiàn)用法是什么)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-04-17 10:32 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)頁(yè)設計師有時(shí)使用屏幕抓取的另一個(gè)常見(jiàn)用法是什么)
  屏幕抓取是計算機顯示器上顯示的任何內容的靜止圖像。這些圖像有很多用途,從產(chǎn)品推廣到軟件故障排除,大多數計算機都能夠快速生成屏幕抓取,讓用戶(hù)更輕松地使用它們
  
  大多數操作系統允許用戶(hù)通過(guò)按下命令鍵和鍵盤(pán)上的一兩個(gè)其他鍵來(lái)抓取屏幕。抓取時(shí),計算機會(huì )捕獲當時(shí)顯示器上顯示的圖像,并保留所有可見(jiàn)的細節。生成的圖像通常與顯示器大小相同;如果需要,用戶(hù)可以減小圖像的大小以使其更易于使用。屏幕抓取最常見(jiàn)的用途之一是用于軟件的宣傳材料。例如,許多電腦游戲使用屏幕抓取來(lái)做廣告,展示游戲的圖像質(zhì)量和顯示效果,以試圖讓用戶(hù)對外觀(guān)感興趣。您還可以看到其他類(lèi)型軟件的廣告抓取,顯示軟件的功能和外觀(guān)。許多公司還在其用戶(hù)手冊中使用這些圖片來(lái)直觀(guān)地向用戶(hù)展示如何做事。屏幕抓取的另一個(gè)常見(jiàn)用途是故障排除。當用戶(hù)遇到程序錯誤或問(wèn)題時(shí),他或她可以截屏來(lái)說(shuō)明情況。人們有時(shí)還使用屏幕截圖來(lái)記錄其他內容,例如他們完成任務(wù)所采取的步驟。人們使用幽默的抓圖來(lái)說(shuō)明他們周?chē)挠腥で闆r或事件也并不少見(jiàn)。這些圖像還有許多其他用途。例如,博主有時(shí)會(huì )在鏈接到其他 網(wǎng)站 時(shí)使用屏幕抓取來(lái)吸引人們加入有趣的視覺(jué)內容。人們也可能會(huì )抓取抄襲或被盜的內容,因此即使內容后來(lái)被刪除,他們也有證據。網(wǎng)頁(yè)設計師有時(shí)也使用這種方法來(lái)記錄網(wǎng)絡(luò )上視覺(jué)上有趣或有趣的網(wǎng)頁(yè),以供以后參考 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)頁(yè)設計師有時(shí)使用屏幕抓取的另一個(gè)常見(jiàn)用法是什么)
  屏幕抓取是計算機顯示器上顯示的任何內容的靜止圖像。這些圖像有很多用途,從產(chǎn)品推廣到軟件故障排除,大多數計算機都能夠快速生成屏幕抓取,讓用戶(hù)更輕松地使用它們
  
  大多數操作系統允許用戶(hù)通過(guò)按下命令鍵和鍵盤(pán)上的一兩個(gè)其他鍵來(lái)抓取屏幕。抓取時(shí),計算機會(huì )捕獲當時(shí)顯示器上顯示的圖像,并保留所有可見(jiàn)的細節。生成的圖像通常與顯示器大小相同;如果需要,用戶(hù)可以減小圖像的大小以使其更易于使用。屏幕抓取最常見(jiàn)的用途之一是用于軟件的宣傳材料。例如,許多電腦游戲使用屏幕抓取來(lái)做廣告,展示游戲的圖像質(zhì)量和顯示效果,以試圖讓用戶(hù)對外觀(guān)感興趣。您還可以看到其他類(lèi)型軟件的廣告抓取,顯示軟件的功能和外觀(guān)。許多公司還在其用戶(hù)手冊中使用這些圖片來(lái)直觀(guān)地向用戶(hù)展示如何做事。屏幕抓取的另一個(gè)常見(jiàn)用途是故障排除。當用戶(hù)遇到程序錯誤或問(wèn)題時(shí),他或她可以截屏來(lái)說(shuō)明情況。人們有時(shí)還使用屏幕截圖來(lái)記錄其他內容,例如他們完成任務(wù)所采取的步驟。人們使用幽默的抓圖來(lái)說(shuō)明他們周?chē)挠腥で闆r或事件也并不少見(jiàn)。這些圖像還有許多其他用途。例如,博主有時(shí)會(huì )在鏈接到其他 網(wǎng)站 時(shí)使用屏幕抓取來(lái)吸引人們加入有趣的視覺(jué)內容。人們也可能會(huì )抓取抄襲或被盜的內容,因此即使內容后來(lái)被刪除,他們也有證據。網(wǎng)頁(yè)設計師有時(shí)也使用這種方法來(lái)記錄網(wǎng)絡(luò )上視覺(jué)上有趣或有趣的網(wǎng)頁(yè),以供以后參考

抓取網(wǎng)頁(yè)生成電子書(shū)(大數據技術(shù)前幾年成就了很多科技公司的爬蟲(chóng)技術(shù))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 94 次瀏覽 ? 2022-04-14 18:31 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(大數據技術(shù)前幾年成就了很多科技公司的爬蟲(chóng)技術(shù))
  開(kāi)幕
  大數據技術(shù)這幾年成就了很多科技公司。至于成就有多大,很難說(shuō)爬蟲(chóng)技術(shù)火了。因為很多大數據公司都有爬蟲(chóng)爬取、清洗、分析、銷(xiāo)售的數據。比如很多網(wǎng)絡(luò )輿情系統、網(wǎng)絡(luò )熱點(diǎn)監控系統等等。我工作的公司以前負責過(guò)這樣的項目。當然,這些系統的核心是爬蟲(chóng)技術(shù)。今天,我將調試這樣一個(gè)項目。需要開(kāi)源項目地址的同學(xué),請移到文章的末尾,有開(kāi)源作者的鏈接。
  
  履帶技術(shù)介紹
  什么是爬行動(dòng)物?實(shí)際上,網(wǎng)絡(luò )爬蟲(chóng)是一種自動(dòng)提取網(wǎng)頁(yè)的程序。它被搜索引擎、大數據公司和許多灰色地帶使用,例如尋找漏洞的黑客。爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。對于大數據公司來(lái)說(shuō),通過(guò)爬取互聯(lián)網(wǎng)上的公開(kāi)數據可以獲得一些有價(jià)值的結果,可供決策者使用。當然,過(guò)程中得到的分析結果也可以對后續的爬取過(guò)程給予反饋和指導。
  我曾經(jīng)為我現在的公司抓取了一個(gè) 8 年的公共數據的天氣網(wǎng)站,用于分析農業(yè)天氣數據,例如什么時(shí)候種什么,什么時(shí)候不種。當然,今天的話(huà)題不是這些,它是一個(gè)開(kāi)源項目。
  
  技術(shù)是好是壞
  現在很多網(wǎng)站都有反爬蟲(chóng)技術(shù)了,當然很多爬蟲(chóng)技術(shù)也在迭代升級。我們不會(huì )在本文中討論爬蟲(chóng)技術(shù)的質(zhì)量。我認為技術(shù)沒(méi)有好壞之分,只有使用技術(shù)的人才有好有壞。爬蟲(chóng)技術(shù)是很多企業(yè)的核心技術(shù),也是攻城獅要學(xué)習的技術(shù)。
  核心調試
  1、Forever IDEA從開(kāi)源地址導入
  
  導入后是這樣的
  
  2、介紹爬蟲(chóng)sql,當然這個(gè)爬蟲(chóng)項目有很多插件可用,我這里只調試最小可運行單元。有興趣的可以自己調試。插件包括 selenium、redis、mongodb、oss、ocr 和 IP 代理池插件。
  
  
  3、運行項目,這個(gè)項目的開(kāi)源主頁(yè)有詳細介紹,這里我只運行看看效果,系統圖自帶兩個(gè)例子。
  
  
  
  結語(yǔ)
  這個(gè)開(kāi)源項目是gitee的GVP項目,是學(xué)習爬蟲(chóng)的一個(gè)很好的例子。當然,如果不懂技術(shù)的同學(xué)可以自己學(xué)用,不用看代碼也可以用。但如果你了解這項技術(shù),你最好看看。畢竟爬蟲(chóng)的技術(shù)還是比較好學(xué)的。許多公司依靠它來(lái)發(fā)財。感謝開(kāi)源作者,開(kāi)源讓世界變得更美好。如果覺(jué)得有用,請采集、轉發(fā)、關(guān)注。如需爬蟲(chóng)項目地址,請私信“爬蟲(chóng)”,我發(fā)給你作者的開(kāi)源地址。
  我還調試了很多其他的開(kāi)源項目,如果你覺(jué)得有用,就看看吧:
  花了三個(gè)小時(shí)調試了近50個(gè)常用小工具開(kāi)源項目的合集
  Java Springboot開(kāi)源微服務(wù)架構管理后臺搭建實(shí)戰
  京東SSO調試開(kāi)源單點(diǎn)登錄項目實(shí)戰
  Java史上集成最全的第三方登錄開(kāi)源項目的調試實(shí)踐
  Java分布式架構開(kāi)源支付項目調試
  Java 100%開(kāi)源基于Spring boot的ERP系統調試實(shí)踐
  開(kāi)源OA項目調試實(shí)踐 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(大數據技術(shù)前幾年成就了很多科技公司的爬蟲(chóng)技術(shù))
  開(kāi)幕
  大數據技術(shù)這幾年成就了很多科技公司。至于成就有多大,很難說(shuō)爬蟲(chóng)技術(shù)火了。因為很多大數據公司都有爬蟲(chóng)爬取、清洗、分析、銷(xiāo)售的數據。比如很多網(wǎng)絡(luò )輿情系統、網(wǎng)絡(luò )熱點(diǎn)監控系統等等。我工作的公司以前負責過(guò)這樣的項目。當然,這些系統的核心是爬蟲(chóng)技術(shù)。今天,我將調試這樣一個(gè)項目。需要開(kāi)源項目地址的同學(xué),請移到文章的末尾,有開(kāi)源作者的鏈接。
  
  履帶技術(shù)介紹
  什么是爬行動(dòng)物?實(shí)際上,網(wǎng)絡(luò )爬蟲(chóng)是一種自動(dòng)提取網(wǎng)頁(yè)的程序。它被搜索引擎、大數據公司和許多灰色地帶使用,例如尋找漏洞的黑客。爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。對于大數據公司來(lái)說(shuō),通過(guò)爬取互聯(lián)網(wǎng)上的公開(kāi)數據可以獲得一些有價(jià)值的結果,可供決策者使用。當然,過(guò)程中得到的分析結果也可以對后續的爬取過(guò)程給予反饋和指導。
  我曾經(jīng)為我現在的公司抓取了一個(gè) 8 年的公共數據的天氣網(wǎng)站,用于分析農業(yè)天氣數據,例如什么時(shí)候種什么,什么時(shí)候不種。當然,今天的話(huà)題不是這些,它是一個(gè)開(kāi)源項目。
  
  技術(shù)是好是壞
  現在很多網(wǎng)站都有反爬蟲(chóng)技術(shù)了,當然很多爬蟲(chóng)技術(shù)也在迭代升級。我們不會(huì )在本文中討論爬蟲(chóng)技術(shù)的質(zhì)量。我認為技術(shù)沒(méi)有好壞之分,只有使用技術(shù)的人才有好有壞。爬蟲(chóng)技術(shù)是很多企業(yè)的核心技術(shù),也是攻城獅要學(xué)習的技術(shù)。
  核心調試
  1、Forever IDEA從開(kāi)源地址導入
  
  導入后是這樣的
  
  2、介紹爬蟲(chóng)sql,當然這個(gè)爬蟲(chóng)項目有很多插件可用,我這里只調試最小可運行單元。有興趣的可以自己調試。插件包括 selenium、redis、mongodb、oss、ocr 和 IP 代理池插件。
  
  
  3、運行項目,這個(gè)項目的開(kāi)源主頁(yè)有詳細介紹,這里我只運行看看效果,系統圖自帶兩個(gè)例子。
  
  
  
  結語(yǔ)
  這個(gè)開(kāi)源項目是gitee的GVP項目,是學(xué)習爬蟲(chóng)的一個(gè)很好的例子。當然,如果不懂技術(shù)的同學(xué)可以自己學(xué)用,不用看代碼也可以用。但如果你了解這項技術(shù),你最好看看。畢竟爬蟲(chóng)的技術(shù)還是比較好學(xué)的。許多公司依靠它來(lái)發(fā)財。感謝開(kāi)源作者,開(kāi)源讓世界變得更美好。如果覺(jué)得有用,請采集、轉發(fā)、關(guān)注。如需爬蟲(chóng)項目地址,請私信“爬蟲(chóng)”,我發(fā)給你作者的開(kāi)源地址。
  我還調試了很多其他的開(kāi)源項目,如果你覺(jué)得有用,就看看吧:
  花了三個(gè)小時(shí)調試了近50個(gè)常用小工具開(kāi)源項目的合集
  Java Springboot開(kāi)源微服務(wù)架構管理后臺搭建實(shí)戰
  京東SSO調試開(kāi)源單點(diǎn)登錄項目實(shí)戰
  Java史上集成最全的第三方登錄開(kāi)源項目的調試實(shí)踐
  Java分布式架構開(kāi)源支付項目調試
  Java 100%開(kāi)源基于Spring boot的ERP系統調試實(shí)踐
  開(kāi)源OA項目調試實(shí)踐

抓取網(wǎng)頁(yè)生成電子書(shū)(用Sigil加Calibre,支持Windows,Mac,Linux(組圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 121 次瀏覽 ? 2022-04-14 04:20 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(用Sigil加Calibre,支持Windows,Mac,Linux(組圖))
  因為看慣了??kindle pw,在電腦屏幕上看一大段文章很難專(zhuān)心,感覺(jué)很累。
  能夠為kpw帶來(lái)好的文章、博客、文檔、自組織材料等,真是太高興了??梢哉f(shuō),制作電子書(shū)已經(jīng)成為剛需,所以谷歌告訴我用Sigil加Calibre,就是用Sigil做一個(gè)標準的ePub格式,然后用Calibre轉換成你想要的任何格式。
  這里是 Sigil,它托管在 Google 代碼上,但源代碼現在在 github 上,支持 Windows、Mac、Linux。用戶(hù)指南非常詳細。
  這是界面,支持多種語(yǔ)言:
  
  圖一
  不好意思說(shuō)最近才學(xué)git,所以找到了這個(gè)ProGit??上Ч俜街挥衑pub格式的英文版下載??戳酥?,中文只有網(wǎng)頁(yè)版,所以想自己做一個(gè)。以下是如何執行此操作的示例。
  ePub格式歸根結底就是一個(gè)zip格式的壓縮包,里面定義了每個(gè)文件夾,里面收錄了文字、圖片等各種素材,如圖2
  
  圖2
  在Text下右擊“Add Blank HTML File”,會(huì )自動(dòng)創(chuàng )建一個(gè)名為Seciton0001.xhtml的空白文件。然后只需復制您想要的內容,它可以是純文本或網(wǎng)絡(luò )格式。見(jiàn)圖3
  
  圖 3
  它實(shí)際上是所見(jiàn)即所得(所見(jiàn)即所得),您可以查看它的各種元素。見(jiàn)圖4
  
  圖 4
  然后將要放到每個(gè)xhtml文件上的內容一個(gè)一個(gè)地放上去,可以在格式菜單中進(jìn)行粗體、斜體等修改。
  需要注意的是標題h1、h2、h3等(圖4)是用來(lái)定義書(shū)的??章節的,從小到大是收錄關(guān)系,p定義段落,定義好每一頁(yè)的標題后,我們就可以為我們的書(shū)創(chuàng )建一個(gè)目錄了,菜單工具->目錄->生成目錄(如圖5),確定目錄級別通過(guò)level選項來(lái)收錄,然后OK,會(huì )自動(dòng)生成目錄(如圖6).
  
  圖 4
  
  圖 5
  
  圖 6
  接下來(lái),添加封面,不然會(huì )尷尬:菜單工具->生成封面,將準備好的圖片添加到素材中。
  
  圖 7
  最后我們來(lái)潤色一下書(shū),菜單Tools -> Element Data Editor,添加title、author等參數。
  
  圖 8
  至此,一本書(shū)所需的基本東西都已經(jīng)完成,保存完畢,并自動(dòng)生成了一個(gè)標準的epub格式文件。
  有了它,添加到calibre后,選擇把書(shū)轉換成你需要的任何格式。
  
  圖 9
  完成。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(用Sigil加Calibre,支持Windows,Mac,Linux(組圖))
  因為看慣了??kindle pw,在電腦屏幕上看一大段文章很難專(zhuān)心,感覺(jué)很累。
  能夠為kpw帶來(lái)好的文章、博客、文檔、自組織材料等,真是太高興了??梢哉f(shuō),制作電子書(shū)已經(jīng)成為剛需,所以谷歌告訴我用Sigil加Calibre,就是用Sigil做一個(gè)標準的ePub格式,然后用Calibre轉換成你想要的任何格式。
  這里是 Sigil,它托管在 Google 代碼上,但源代碼現在在 github 上,支持 Windows、Mac、Linux。用戶(hù)指南非常詳細。
  這是界面,支持多種語(yǔ)言:
  
  圖一
  不好意思說(shuō)最近才學(xué)git,所以找到了這個(gè)ProGit??上Ч俜街挥衑pub格式的英文版下載??戳酥?,中文只有網(wǎng)頁(yè)版,所以想自己做一個(gè)。以下是如何執行此操作的示例。
  ePub格式歸根結底就是一個(gè)zip格式的壓縮包,里面定義了每個(gè)文件夾,里面收錄了文字、圖片等各種素材,如圖2
  
  圖2
  在Text下右擊“Add Blank HTML File”,會(huì )自動(dòng)創(chuàng )建一個(gè)名為Seciton0001.xhtml的空白文件。然后只需復制您想要的內容,它可以是純文本或網(wǎng)絡(luò )格式。見(jiàn)圖3
  
  圖 3
  它實(shí)際上是所見(jiàn)即所得(所見(jiàn)即所得),您可以查看它的各種元素。見(jiàn)圖4
  
  圖 4
  然后將要放到每個(gè)xhtml文件上的內容一個(gè)一個(gè)地放上去,可以在格式菜單中進(jìn)行粗體、斜體等修改。
  需要注意的是標題h1、h2、h3等(圖4)是用來(lái)定義書(shū)的??章節的,從小到大是收錄關(guān)系,p定義段落,定義好每一頁(yè)的標題后,我們就可以為我們的書(shū)創(chuàng )建一個(gè)目錄了,菜單工具->目錄->生成目錄(如圖5),確定目錄級別通過(guò)level選項來(lái)收錄,然后OK,會(huì )自動(dòng)生成目錄(如圖6).
  
  圖 4
  
  圖 5
  
  圖 6
  接下來(lái),添加封面,不然會(huì )尷尬:菜單工具->生成封面,將準備好的圖片添加到素材中。
  
  圖 7
  最后我們來(lái)潤色一下書(shū),菜單Tools -> Element Data Editor,添加title、author等參數。
  
  圖 8
  至此,一本書(shū)所需的基本東西都已經(jīng)完成,保存完畢,并自動(dòng)生成了一個(gè)標準的epub格式文件。
  有了它,添加到calibre后,選擇把書(shū)轉換成你需要的任何格式。
  
  圖 9
  完成。

抓取網(wǎng)頁(yè)生成電子書(shū)(易天下科技:網(wǎng)站建設需要注意的幾個(gè)注意事項)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-04-12 02:36 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(易天下科技:網(wǎng)站建設需要注意的幾個(gè)注意事項)
  億天下科技位于美麗的蘇州,專(zhuān)業(yè)從事網(wǎng)站建設。SEO經(jīng)過(guò)多年的優(yōu)化,已經(jīng)形成了自己的一套方法。今天就來(lái)說(shuō)說(shuō)網(wǎng)站的構建需要注意的幾點(diǎn):
  
  一、顯式網(wǎng)站主題
  我們通常做任何事情都有一定的目的。網(wǎng)站我們在建造時(shí)也是如此。網(wǎng)站在建設初期,要分析競爭對手,差異化內容定位,確定我們的目標人群,確定,后期網(wǎng)站建設會(huì )圍繞這個(gè)進(jìn)行。
  網(wǎng)站構建的時(shí)候一定要注重自己的強項,網(wǎng)站定位內容也應該是自己的專(zhuān)長(cháng)。抓住這一點(diǎn)聚合網(wǎng)站資源是網(wǎng)站成功的關(guān)鍵。
  二、url 的唯一性
  我們要保證網(wǎng)站的每一頁(yè)的唯一性,即一頁(yè)對應一個(gè)url,同時(shí)設置網(wǎng)站301來(lái)判斷頁(yè)面url的唯一性,準備好網(wǎng)站鏈接的設置可以保證每個(gè)頁(yè)面的權重集中而不分散,從而提高網(wǎng)站的排名。
  三、目錄結構規范化
  網(wǎng)站目錄結構的規范化可以提高爬蟲(chóng)的爬取效率,層級不宜過(guò)深以提高頁(yè)面的爬取概率。
  四、內鏈構建
  從一個(gè)新的 網(wǎng)站 開(kāi)始并不多。從構建前期就必須做好,比如內容頁(yè)的上一頁(yè)和下一頁(yè),側邊欄的相關(guān)調用等等,都必須在內循環(huán)的構建中完成,合理的內鏈結構可以大大縮短。頁(yè)面的收錄時(shí)間,所以需要了解網(wǎng)站生態(tài)內部鏈規則。
  五、網(wǎng)站地圖
  網(wǎng)站如果地圖配置了很多后臺程序自然生成的地圖,就可以了。這是非常簡(jiǎn)單和必要的。
  六、404 頁(yè)
  404頁(yè)面我想大部分站長(cháng)朋友都知道它的用途。站點(diǎn)中不存在或將不存在的所有頁(yè)面都應指向該頁(yè)面。404頁(yè)面的設置是搜索引擎友好的一種形式。, 所以 網(wǎng)站 必須在開(kāi)始構建時(shí)考慮在內。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(易天下科技:網(wǎng)站建設需要注意的幾個(gè)注意事項)
  億天下科技位于美麗的蘇州,專(zhuān)業(yè)從事網(wǎng)站建設。SEO經(jīng)過(guò)多年的優(yōu)化,已經(jīng)形成了自己的一套方法。今天就來(lái)說(shuō)說(shuō)網(wǎng)站的構建需要注意的幾點(diǎn):
  
  一、顯式網(wǎng)站主題
  我們通常做任何事情都有一定的目的。網(wǎng)站我們在建造時(shí)也是如此。網(wǎng)站在建設初期,要分析競爭對手,差異化內容定位,確定我們的目標人群,確定,后期網(wǎng)站建設會(huì )圍繞這個(gè)進(jìn)行。
  網(wǎng)站構建的時(shí)候一定要注重自己的強項,網(wǎng)站定位內容也應該是自己的專(zhuān)長(cháng)。抓住這一點(diǎn)聚合網(wǎng)站資源是網(wǎng)站成功的關(guān)鍵。
  二、url 的唯一性
  我們要保證網(wǎng)站的每一頁(yè)的唯一性,即一頁(yè)對應一個(gè)url,同時(shí)設置網(wǎng)站301來(lái)判斷頁(yè)面url的唯一性,準備好網(wǎng)站鏈接的設置可以保證每個(gè)頁(yè)面的權重集中而不分散,從而提高網(wǎng)站的排名。
  三、目錄結構規范化
  網(wǎng)站目錄結構的規范化可以提高爬蟲(chóng)的爬取效率,層級不宜過(guò)深以提高頁(yè)面的爬取概率。
  四、內鏈構建
  從一個(gè)新的 網(wǎng)站 開(kāi)始并不多。從構建前期就必須做好,比如內容頁(yè)的上一頁(yè)和下一頁(yè),側邊欄的相關(guān)調用等等,都必須在內循環(huán)的構建中完成,合理的內鏈結構可以大大縮短。頁(yè)面的收錄時(shí)間,所以需要了解網(wǎng)站生態(tài)內部鏈規則。
  五、網(wǎng)站地圖
  網(wǎng)站如果地圖配置了很多后臺程序自然生成的地圖,就可以了。這是非常簡(jiǎn)單和必要的。
  六、404 頁(yè)
  404頁(yè)面我想大部分站長(cháng)朋友都知道它的用途。站點(diǎn)中不存在或將不存在的所有頁(yè)面都應指向該頁(yè)面。404頁(yè)面的設置是搜索引擎友好的一種形式。, 所以 網(wǎng)站 必須在開(kāi)始構建時(shí)考慮在內。

抓取網(wǎng)頁(yè)生成電子書(shū)(Gitbook生成電子書(shū)的完整過(guò)程及安裝、命令、配置、文檔結構)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2022-04-11 06:19 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(Gitbook生成電子書(shū)的完整過(guò)程及安裝、命令、配置、文檔結構)
  本文詳細講解了從Gitbook生成電子書(shū)的完整流程,包括:安裝、命令、配置、文檔結構、電子書(shū)生成、部署。
  限于篇幅,本文不介紹任何Gitbook定制頁(yè)面的內容。
  如果想看Gitbook在線(xiàn)電子書(shū)的效果,請點(diǎn)這里:gitbook-notes
  概述
  GitBook 是一個(gè)命令行工具(和 Node.js 庫),用于使用 GitHub/Git 和 Markdown(或 AsciiDoc)構建精美的書(shū)籍。
  GitBook 可以將您的內容輸出為 網(wǎng)站(可自定義和可擴展)或電子書(shū)(PDF、ePub 或 Mobi)。
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  
  GitBook安裝本地安裝環(huán)境要求
  安裝 GitBook 很簡(jiǎn)單。您的系統只需要滿(mǎn)足這兩個(gè)要求:
  通過(guò) npm 安裝
  安裝 GitBook 的最佳方式是通過(guò) NPM。在終端提示符下,只需運行以下命令即可安裝 GitBook:
  $ npm install gitbook-cli -g
  gitbook-cli 是 GitBook 的命令行工具。它將自動(dòng)安裝所需版本的 GitBook 來(lái)構建一本書(shū)。
  執行以下命令檢查GitBook版本,驗證安裝成功。
  $ gitbook -V
  安裝歷史版本
  gitbook-cli 可以輕松下載和安裝其他版本的 GitBook 以測試您的書(shū)籍:
  $ gitbook fetch beta
  使用 gitbook ls-remote 將列出可下載的版本。
  創(chuàng )建圖書(shū)初始化
  GitBook 可以設置樣板書(shū):
  $ gitbook init
  如果你想將這本書(shū)創(chuàng )建到一個(gè)新目錄中,你可以通過(guò)運行 gitbook init ./directory 來(lái)實(shí)現。
  構造
  使用如下命令會(huì )在項目目錄下生成一個(gè)_book目錄,里面收錄了靜態(tài)站點(diǎn)的資源文件:
  $ gitbook build
  調試
  您可以使用選項 --log=debug 和 --debug 來(lái)獲得更好的錯誤消息(帶有堆棧跟蹤)。例如:
  $ gitbook build ./ --log=debug --debug
  啟動(dòng)服務(wù)
  使用以下命令將運行一個(gè)可以通過(guò) :4000/ 預覽書(shū)籍的 Web 服務(wù)
  $ gitbook serve
  GitBook 命令
  這里主要介紹GitBook的命令行工具gitbook-cli的一些命令。首先說(shuō)明兩點(diǎn):
  列出所有 gitbook 命令
  gitbook help
  輸出 gitbook-cli 的幫助信息
  gitbook --help
  生成靜態(tài)網(wǎng)頁(yè)
  gitbook build
  生成靜態(tài)網(wǎng)頁(yè)并運行服務(wù)器
  gitbook serve
  生成時(shí)指定gitbook的版本,不會(huì )先下載到本地
  gitbook build --gitbook=2.0.1
  列出所有本地 gitbook 版本
  gitbook ls
  列出遠程可用的 gitbook 版本
  gitbook ls-remote
  安裝對應的gitbook版本
  gitbook fetch 標簽/版本號
  更新到最新版本的 gitbook
  gitbook update
  卸載對應的gitbook版本
  gitbook uninstall 2.0.1
  指定日志級別
  gitbook build --log=debug
  輸出錯誤信息
  gitbook builid --debug
  Gitbook 目錄結構 GitBook 項目結構
  GitBook 使用簡(jiǎn)單的目錄結構。Summary 中列出的所有 Markdown / Asciidoc 文件(即 Summary.md 文件)都將轉換為 HTML。多語(yǔ)種書(shū)籍的結構略有不同。
  一個(gè)基本的 GitBook 電子書(shū)結構通常如下所示:
  .
├── book.json
├── README.md
├── SUMMARY.md
├── chapter-1/
| ├── README.md
| └── something.md
└── chapter-2/
├── README.md
└── something.md
  GitBook 特殊文件的特點(diǎn):
  文件描述
  book.json
  配置數據(可選)
  自述文件.md
  電子書(shū)的前言或介紹(必填)
  摘要.md
  電子書(shū)目錄(可選)
  詞匯表.md
  詞匯表/評論術(shù)語(yǔ)列表(可選)
  靜態(tài)文件和圖像
  靜態(tài)文件是未在 Summary.md 中列出的文件。除非被忽略,否則所有靜態(tài)文件都將復制到輸出路徑。
  忽略文件和文件夾
  GitBook 將讀取 .gitignore、.bookignore 和 .ignore 文件來(lái)過(guò)濾文件和文件夾。這些文件中的格式遵循 .gitignore 的規則:
  # This is a comment
# Ignore the file test.md
test.md
# Ignore everything in the directory "bin"
bin/*
  項目和子目錄集成
  對于軟件項目,您可以使用 docs/ 等子目錄來(lái)存儲項目的書(shū)籍文檔。您可以配置 root 選項以指示 GitBook 可以在其中找到圖書(shū)文件的文件夾:
  .
├── book.json
└── docs/
├── README.md
└── SUMMARY.md
  在 book.json 中配置以下內容:
  {
"root": "./docs"
}
  概括
  GitBook 使用SUMMARY.md 文件來(lái)定義本書(shū)的章節和子章節結構。Summary.md 文件用于生成本書(shū)的目錄。
  Summary.md 的格式是一個(gè)鏈表。鏈接的標題將是章節的標題,鏈接的目標是該章節文件的路徑。
  將嵌套列表添加到父章節將創(chuàng )建子章節。
  簡(jiǎn)單的例子:
  # Summary
* [Part I](part1/README.md)
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
* [Part II](part2/README.md)
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
  每章都有一個(gè)專(zhuān)門(mén)的頁(yè)面(part#/README.md)并分為小節。
  錨
  目錄中的章節可以使用錨點(diǎn)來(lái)指向文件的特定部分。
  # Summary
### Part I
* [Part I](part1/README.md)
* [Writing is nice](part1/README.md#writing)
* [GitBook is nice](part1/README.md#gitbook)
* [Part II](part2/README.md)
* [We love feedback](part2/README.md#feedback)
* [Better tools for authors](part2/README.md#tools)
  部分
  目錄可以分為由標題或水平線(xiàn)分隔的部分----:
  # Summary
### Part I
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
### Part II
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
----
* [Last part without title](part3/title.md)
  部分只是章節組,沒(méi)有專(zhuān)門(mén)的頁(yè)面,但根據主題,它會(huì )顯示在導航中。
  頁(yè)
  降價(jià)語(yǔ)法
  默認情況下,GitBook 的大部分文件都使用 Markdown 語(yǔ)法。GitBook 推薦這種語(yǔ)法。使用的語(yǔ)法類(lèi)似于 GitHub Flavored Markdown 語(yǔ)法。
  此外,您可以選擇 AsciiDoc 語(yǔ)法。
  頁(yè)面內容示例:
  # Title of the chapter
This is a great introduction.
## Section 1
Markdown will dictates _most_ of your **book's structure**
## Section 2
...
  頁(yè)前言
  頁(yè)面可以收錄可選的前言。它可以用來(lái)定義頁(yè)面的描述。前面的內容必須是文件中的第一個(gè)內容,并且必須采用在三段虛線(xiàn)之間設置的有效 YAML 的形式。這是一個(gè)基本示例:
  ---
description: This is a short description of my page
---
# The content of my page
...
  詞匯表
  允許您指定術(shù)語(yǔ)及其各自的定義以顯示為注釋?;谶@些術(shù)語(yǔ),GitBook 將自動(dòng)構建索引并突出顯示它們。
  GLOSSARY.md 的格式是 h2 標題列表和描述段落:
  ## Term
Definition for this term
## Another term
With it's definition, this can contain bold text
and all other kinds of inline markup ...
  Gitbook 配置
  GitBook 允許您使用靈活的配置自定義您的電子書(shū)。
  這些選項在 book.json 文件中指定。對于不熟悉 JSON 語(yǔ)法的作者,可以使用 JSONlint 等工具來(lái)驗證語(yǔ)法。
  常規設置變量描述
  根
  收錄除 book.json 之外的所有書(shū)籍文件的根文件夾的路徑
  結構體
  指定自述文件、摘要、詞匯表等參考的路徑。
  標題
  您的書(shū)名,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  描述
  你的書(shū)的描述,默認值是從自述文件中提取的。在 上,此字段已預先填寫(xiě)。
  作者
  作者姓名。在 上,此字段已預先填寫(xiě)。
  伊斯本
  國際標準書(shū)號 ISBN
  語(yǔ)言
  本書(shū)的語(yǔ)言類(lèi)型——ISO 代碼。默認值為 en
  方向
  文本閱讀順序??梢允?rtl(從右到左)或 ltr(從左到右),默認值取決于語(yǔ)言的值。
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范并接受 ">= 3.0.0" 之類(lèi)的條件。
  作者
  作者姓名,on ,該字段是預填的。
  例子:
  "author" : "victor zhang"
  描述
  eBook 的描述,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "description" : "Gitbook 教程"
  方向
  文本的方向??梢允?rtl 或 ltr,默認值取決于語(yǔ)言值。
  例子:
  "direction" : "ltr"
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范,接受 >=3.0.0 之類(lèi)的條件。
  例子:
  "gitbook" : "3.0.0",
"gitbook" : ">=3.0.0"
  語(yǔ)言
  Gitbook使用的語(yǔ)言,2.6.4版本可選語(yǔ)言如下:
  en, ar, bn, cs, de, en, es, fa, fi, fr, he, it, ja, ko, no, pl, pt, ro, ru, sv, uk, vi, zh-hans, zh-tw
  例子:
  "language" : "zh-hans",
  鏈接
  在左側導航欄中添加鏈接信息
  例子:
  "links" : {
"sidebar" : {
"Home" : "https://github.com/atlantis102 ... ot%3B
}
}
  根
  收錄所有書(shū)籍文件的根文件夾的路徑,除了 book.json 文件。
  例子:
  "root" : "./docs",
  結構體
  指定自述文件、摘要、詞匯表和語(yǔ)言的文件名。
  風(fēng)格
  自定義頁(yè)面樣式,默認每個(gè)生成器對應的css文件
  例子:
  "styles": {
"website": "styles/website.css",
"ebook": "styles/ebook.css",
"pdf": "styles/pdf.css",
"mobi": "styles/mobi.css",
"epub": "styles/epub.css"
}
  例如,要讓 h1、h2 標簽有下邊框,可以在 website.css 中設置
  h1 , h2{
border-bottom: 1px solid #EFEAEA;
}
  標題
  電子書(shū)的標題,默認值是從README中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "title" : "gitbook-notes",
  插件
  插件及其配置在 book.json 中指定。了解更多信息。
  GitBook 可以使用自版本 3.0.0 起的主題。有關(guān)詳細信息,請參閱主題部分。
  變量描述
  插件
  要加載的插件列表
  插件配置
  插件配置
  添加插件
  "plugins": [
"splitter"
]
  添加新插件后,需要運行 gitbook install 來(lái)安裝新插件
  刪除內置插件
  Gitbook 默認自帶 5 個(gè)插件:
  "plugins": [
"-search"
]
  結構體
  除了root屬性,還可以指定Readme、Summary、Glossary、Languages的名稱(chēng)(而不是使用默認名稱(chēng),比如README.md)。這些文件必須位于項目的根目錄(或根目錄,如果您在 book.json 中配置了 root 屬性)。不可接受的路徑,例如:dir/MY_README.md。
  變量描述
  結構.readme
  自述文件名(默認為 README.md)
  結構.摘要
  摘要文件名(默認為SUMMARY.md)
  結構.詞匯表
  詞匯表文件名(默認為 GLOSSARY.md)
  結構語(yǔ)言
  語(yǔ)言文件名(默認為 LANGS.md)
  pdf
  可以使用 book.json 中的一組選項自定義 PDF 輸出:
  變量描述
  pdf.pageNumbers
  在每頁(yè)底部添加頁(yè)碼(默認為 true)
  pdf.fontSize
  基本字體大?。J為 12)
  pdf.fontFamily
  基本字體樣式(默認為 Arial)
  pdf.paperSize
  頁(yè)面大小,選項有:'a0'、'a1'、'a2'、'a3'、'a4'、'a5'、'a6'、'b0'、'b1'、'b2'、'b3'、 'b4', 'b5', 'b6', 'legal', 'letter' (默認是a4)
  上限(默認為 56)
  pdf.margin.bottom
  下限(默認為 56)
  pdf.margin.right
  右邊框(默認為 62)
  pdf.margin.left
  左邊框(默認為 62)
  生成電子書(shū)
  GitBook 可以生成 網(wǎng)站,但也可以將內容輸出為電子書(shū)(ePub、Mobi、PDF)。
  # Generate a PDF file
$ gitbook pdf ./ ./mybook.pdf
# Generate an ePub file
$ gitbook epub ./ ./mybook.epub
# Generate a Mobi file
$ gitbook mobi ./ ./mybook.mobi
  安裝電子書(shū)轉換
  ebook-convert 可用于生成電子書(shū)(epub、mobi、pdf)。
  GNU/Linux
  安裝口徑應用程序。
  $ sudo aptitude install calibre
  在某些 GNU/Linux 發(fā)行版上,node 安裝為 nodejs,您需要手動(dòng)創(chuàng )建符號鏈接:
  $sudo ln -s /usr/bin/nodejs /usr/bin/node
  操作系統
  下載口徑應用程序。將 calibre.app 移動(dòng)到應用程序文件夾后,創(chuàng )建指向 ebook-convert 工具的符號鏈接:
  $ sudo ln -s ~/Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin
  您可以將 /usr/bin 替換為 $PATH 中的任何目錄。
  覆蓋
  封面用于所有電子書(shū)格式。您可以自己提供一個(gè)或使用自動(dòng)覆蓋插件生成一個(gè)。
  要提供封面,請將 cover.jpg 文件放在本書(shū)的根目錄中。添加一個(gè)cover_small.jpg 將指定一個(gè)較小版本的封面。封面應該是 JPEG 文件。
  一個(gè)好的封面應該遵循以下準則:
  Gitbook 部署托管到
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  創(chuàng )建新書(shū)
  如下圖所示,根據您的個(gè)人需求,選擇一個(gè)模板來(lái)創(chuàng )建您的電子書(shū)。
  
  設置圖書(shū)基本信息
  
  克隆到本地
  將為每本書(shū)創(chuàng )建一個(gè) git 存儲庫。
  如下圖,復制git地址,然后git clone到本地。
  
  釋放
  根據 Gitbook 規范在本地編輯電子書(shū),然后 git push 到 Gitbook 遠程倉庫。
  默認訪(fǎng)問(wèn)地址為:username.gitbooks.io/projectname/content/
  例如:我的用戶(hù)名為atlantis1024,一個(gè)電子書(shū)項目名為test,那么訪(fǎng)問(wèn)路徑為:
  當然,如果你有自己的域名,你也可以設置 Domains 選項來(lái)指定你的域的訪(fǎng)問(wèn)路徑。
  托管在 Github 上
  如果你不想使用 Gitbook 的倉庫,但想直接使用 Github 的倉庫,也是可以的。
  首先,你需要綁定你的 Github 賬號。最簡(jiǎn)單的方法當然是在登錄的時(shí)候使用Github賬號登錄方式,否則也可以在A(yíng)ccount Settings中的Github設置選項中進(jìn)行綁定。
  
  綁定 Github 賬號后,您可以在創(chuàng )建電子書(shū)時(shí)選擇從指定的 Github 倉庫導入電子書(shū)項目。請參考下圖:
  
  只要您指定的 Github 倉庫中的文檔內容符合 Gitbook 規范,Gitbook 就會(huì )根據您的每次更新自動(dòng)構建并生成電子書(shū)網(wǎng)站。
  默認訪(fǎng)問(wèn)地址為:
  https://Github用戶(hù)名.gitbooks.io/Github 倉庫/content/
  例如:我的用戶(hù)名是atlantis1024,Github倉庫名是gitbook-notes,那么訪(fǎng)問(wèn)路徑是:
  托管到 Github 頁(yè)面
  或許你之前也知道 Github 的一個(gè)特性:GitHub Pages。它允許用戶(hù)在 GitHub 存儲庫中托管您的個(gè)人、組織或項目的靜態(tài)頁(yè)面(自動(dòng)識別 html、css、javascript)。
  構建 xxx.github.io 倉庫
  要使用這個(gè)功能,首先要創(chuàng )建一個(gè)嚴格遵循命名要求的倉庫:Github賬號名.github.io 比如我的Github賬號是atlantis1024,那么這個(gè)倉庫應該叫atlantis1024.github.io . 通常,此存儲庫用作個(gè)人或組織博客。
  創(chuàng )建 gh-pages 分支
  完成步驟 1 后,在任何 Github 存儲庫中創(chuàng )建一個(gè)名為 gh-pages 的分支。只要 gh-pages 中的內容滿(mǎn)足靜態(tài)站點(diǎn)要求,就可以在如下地址訪(fǎng)問(wèn):username.gitbooks.io/Github 倉庫。例如:我的 Github 倉庫之一名為 react-notes,訪(fǎng)問(wèn)路徑為:
  自動(dòng)發(fā)布到 gh-pages
  如果每次手動(dòng) git push 到遠程的 gh-pages 分支,就有點(diǎn)麻煩了。
  如何實(shí)現自動(dòng)發(fā)布?
  有兩種方法:
  使用 gh-pages 插件
  如果您了解 Nodejs,最簡(jiǎn)單的發(fā)布方式是使用 gh-pages 插件。
  先在本地安裝插件
  $ npm i -D gh-pages
  然后,在 package.json 文件中添加腳本命令:
  如下: -d 命令參數后跟要發(fā)布的靜態(tài)站點(diǎn)內容的目錄
  "scripts": {
"deploy": "gh-pages -d build"
},
  腳本
  編寫(xiě)一個(gè)執行 git 命令的腳本,你就完成了。
  以下腳本可以在 bat 或 sh 腳本中執行。
  cd build
git init
git checkout -b gh-pages
git add .
git commit -am "Update"
git push git@github.com:atlantis1024/gitbook-notes gh-pages --force"
  資源 官方資源 教程 資源工具 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(Gitbook生成電子書(shū)的完整過(guò)程及安裝、命令、配置、文檔結構)
  本文詳細講解了從Gitbook生成電子書(shū)的完整流程,包括:安裝、命令、配置、文檔結構、電子書(shū)生成、部署。
  限于篇幅,本文不介紹任何Gitbook定制頁(yè)面的內容。
  如果想看Gitbook在線(xiàn)電子書(shū)的效果,請點(diǎn)這里:gitbook-notes
  概述
  GitBook 是一個(gè)命令行工具(和 Node.js 庫),用于使用 GitHub/Git 和 Markdown(或 AsciiDoc)構建精美的書(shū)籍。
  GitBook 可以將您的內容輸出為 網(wǎng)站(可自定義和可擴展)或電子書(shū)(PDF、ePub 或 Mobi)。
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  
  GitBook安裝本地安裝環(huán)境要求
  安裝 GitBook 很簡(jiǎn)單。您的系統只需要滿(mǎn)足這兩個(gè)要求:
  通過(guò) npm 安裝
  安裝 GitBook 的最佳方式是通過(guò) NPM。在終端提示符下,只需運行以下命令即可安裝 GitBook:
  $ npm install gitbook-cli -g
  gitbook-cli 是 GitBook 的命令行工具。它將自動(dòng)安裝所需版本的 GitBook 來(lái)構建一本書(shū)。
  執行以下命令檢查GitBook版本,驗證安裝成功。
  $ gitbook -V
  安裝歷史版本
  gitbook-cli 可以輕松下載和安裝其他版本的 GitBook 以測試您的書(shū)籍:
  $ gitbook fetch beta
  使用 gitbook ls-remote 將列出可下載的版本。
  創(chuàng )建圖書(shū)初始化
  GitBook 可以設置樣板書(shū):
  $ gitbook init
  如果你想將這本書(shū)創(chuàng )建到一個(gè)新目錄中,你可以通過(guò)運行 gitbook init ./directory 來(lái)實(shí)現。
  構造
  使用如下命令會(huì )在項目目錄下生成一個(gè)_book目錄,里面收錄了靜態(tài)站點(diǎn)的資源文件:
  $ gitbook build
  調試
  您可以使用選項 --log=debug 和 --debug 來(lái)獲得更好的錯誤消息(帶有堆棧跟蹤)。例如:
  $ gitbook build ./ --log=debug --debug
  啟動(dòng)服務(wù)
  使用以下命令將運行一個(gè)可以通過(guò) :4000/ 預覽書(shū)籍的 Web 服務(wù)
  $ gitbook serve
  GitBook 命令
  這里主要介紹GitBook的命令行工具gitbook-cli的一些命令。首先說(shuō)明兩點(diǎn):
  列出所有 gitbook 命令
  gitbook help
  輸出 gitbook-cli 的幫助信息
  gitbook --help
  生成靜態(tài)網(wǎng)頁(yè)
  gitbook build
  生成靜態(tài)網(wǎng)頁(yè)并運行服務(wù)器
  gitbook serve
  生成時(shí)指定gitbook的版本,不會(huì )先下載到本地
  gitbook build --gitbook=2.0.1
  列出所有本地 gitbook 版本
  gitbook ls
  列出遠程可用的 gitbook 版本
  gitbook ls-remote
  安裝對應的gitbook版本
  gitbook fetch 標簽/版本號
  更新到最新版本的 gitbook
  gitbook update
  卸載對應的gitbook版本
  gitbook uninstall 2.0.1
  指定日志級別
  gitbook build --log=debug
  輸出錯誤信息
  gitbook builid --debug
  Gitbook 目錄結構 GitBook 項目結構
  GitBook 使用簡(jiǎn)單的目錄結構。Summary 中列出的所有 Markdown / Asciidoc 文件(即 Summary.md 文件)都將轉換為 HTML。多語(yǔ)種書(shū)籍的結構略有不同。
  一個(gè)基本的 GitBook 電子書(shū)結構通常如下所示:
  .
├── book.json
├── README.md
├── SUMMARY.md
├── chapter-1/
| ├── README.md
| └── something.md
└── chapter-2/
├── README.md
└── something.md
  GitBook 特殊文件的特點(diǎn):
  文件描述
  book.json
  配置數據(可選)
  自述文件.md
  電子書(shū)的前言或介紹(必填)
  摘要.md
  電子書(shū)目錄(可選)
  詞匯表.md
  詞匯表/評論術(shù)語(yǔ)列表(可選)
  靜態(tài)文件和圖像
  靜態(tài)文件是未在 Summary.md 中列出的文件。除非被忽略,否則所有靜態(tài)文件都將復制到輸出路徑。
  忽略文件和文件夾
  GitBook 將讀取 .gitignore、.bookignore 和 .ignore 文件來(lái)過(guò)濾文件和文件夾。這些文件中的格式遵循 .gitignore 的規則:
  # This is a comment
# Ignore the file test.md
test.md
# Ignore everything in the directory "bin"
bin/*
  項目和子目錄集成
  對于軟件項目,您可以使用 docs/ 等子目錄來(lái)存儲項目的書(shū)籍文檔。您可以配置 root 選項以指示 GitBook 可以在其中找到圖書(shū)文件的文件夾:
  .
├── book.json
└── docs/
├── README.md
└── SUMMARY.md
  在 book.json 中配置以下內容:
  {
"root": "./docs"
}
  概括
  GitBook 使用SUMMARY.md 文件來(lái)定義本書(shū)的章節和子章節結構。Summary.md 文件用于生成本書(shū)的目錄。
  Summary.md 的格式是一個(gè)鏈表。鏈接的標題將是章節的標題,鏈接的目標是該章節文件的路徑。
  將嵌套列表添加到父章節將創(chuàng )建子章節。
  簡(jiǎn)單的例子:
  # Summary
* [Part I](part1/README.md)
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
* [Part II](part2/README.md)
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
  每章都有一個(gè)專(zhuān)門(mén)的頁(yè)面(part#/README.md)并分為小節。
  錨
  目錄中的章節可以使用錨點(diǎn)來(lái)指向文件的特定部分。
  # Summary
### Part I
* [Part I](part1/README.md)
* [Writing is nice](part1/README.md#writing)
* [GitBook is nice](part1/README.md#gitbook)
* [Part II](part2/README.md)
* [We love feedback](part2/README.md#feedback)
* [Better tools for authors](part2/README.md#tools)
  部分
  目錄可以分為由標題或水平線(xiàn)分隔的部分----:
  # Summary
### Part I
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
### Part II
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
----
* [Last part without title](part3/title.md)
  部分只是章節組,沒(méi)有專(zhuān)門(mén)的頁(yè)面,但根據主題,它會(huì )顯示在導航中。
  頁(yè)
  降價(jià)語(yǔ)法
  默認情況下,GitBook 的大部分文件都使用 Markdown 語(yǔ)法。GitBook 推薦這種語(yǔ)法。使用的語(yǔ)法類(lèi)似于 GitHub Flavored Markdown 語(yǔ)法。
  此外,您可以選擇 AsciiDoc 語(yǔ)法。
  頁(yè)面內容示例:
  # Title of the chapter
This is a great introduction.
## Section 1
Markdown will dictates _most_ of your **book's structure**
## Section 2
...
  頁(yè)前言
  頁(yè)面可以收錄可選的前言。它可以用來(lái)定義頁(yè)面的描述。前面的內容必須是文件中的第一個(gè)內容,并且必須采用在三段虛線(xiàn)之間設置的有效 YAML 的形式。這是一個(gè)基本示例:
  ---
description: This is a short description of my page
---
# The content of my page
...
  詞匯表
  允許您指定術(shù)語(yǔ)及其各自的定義以顯示為注釋?;谶@些術(shù)語(yǔ),GitBook 將自動(dòng)構建索引并突出顯示它們。
  GLOSSARY.md 的格式是 h2 標題列表和描述段落:
  ## Term
Definition for this term
## Another term
With it's definition, this can contain bold text
and all other kinds of inline markup ...
  Gitbook 配置
  GitBook 允許您使用靈活的配置自定義您的電子書(shū)。
  這些選項在 book.json 文件中指定。對于不熟悉 JSON 語(yǔ)法的作者,可以使用 JSONlint 等工具來(lái)驗證語(yǔ)法。
  常規設置變量描述
  根
  收錄除 book.json 之外的所有書(shū)籍文件的根文件夾的路徑
  結構體
  指定自述文件、摘要、詞匯表等參考的路徑。
  標題
  您的書(shū)名,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  描述
  你的書(shū)的描述,默認值是從自述文件中提取的。在 上,此字段已預先填寫(xiě)。
  作者
  作者姓名。在 上,此字段已預先填寫(xiě)。
  伊斯本
  國際標準書(shū)號 ISBN
  語(yǔ)言
  本書(shū)的語(yǔ)言類(lèi)型——ISO 代碼。默認值為 en
  方向
  文本閱讀順序??梢允?rtl(從右到左)或 ltr(從左到右),默認值取決于語(yǔ)言的值。
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范并接受 ">= 3.0.0" 之類(lèi)的條件。
  作者
  作者姓名,on ,該字段是預填的。
  例子:
  "author" : "victor zhang"
  描述
  eBook 的描述,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "description" : "Gitbook 教程"
  方向
  文本的方向??梢允?rtl 或 ltr,默認值取決于語(yǔ)言值。
  例子:
  "direction" : "ltr"
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范,接受 >=3.0.0 之類(lèi)的條件。
  例子:
  "gitbook" : "3.0.0",
"gitbook" : ">=3.0.0"
  語(yǔ)言
  Gitbook使用的語(yǔ)言,2.6.4版本可選語(yǔ)言如下:
  en, ar, bn, cs, de, en, es, fa, fi, fr, he, it, ja, ko, no, pl, pt, ro, ru, sv, uk, vi, zh-hans, zh-tw
  例子:
  "language" : "zh-hans",
  鏈接
  在左側導航欄中添加鏈接信息
  例子:
  "links" : {
"sidebar" : {
"Home" : "https://github.com/atlantis102 ... ot%3B
}
}
  根
  收錄所有書(shū)籍文件的根文件夾的路徑,除了 book.json 文件。
  例子:
  "root" : "./docs",
  結構體
  指定自述文件、摘要、詞匯表和語(yǔ)言的文件名。
  風(fēng)格
  自定義頁(yè)面樣式,默認每個(gè)生成器對應的css文件
  例子:
  "styles": {
"website": "styles/website.css",
"ebook": "styles/ebook.css",
"pdf": "styles/pdf.css",
"mobi": "styles/mobi.css",
"epub": "styles/epub.css"
}
  例如,要讓 h1、h2 標簽有下邊框,可以在 website.css 中設置
  h1 , h2{
border-bottom: 1px solid #EFEAEA;
}
  標題
  電子書(shū)的標題,默認值是從README中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "title" : "gitbook-notes",
  插件
  插件及其配置在 book.json 中指定。了解更多信息。
  GitBook 可以使用自版本 3.0.0 起的主題。有關(guān)詳細信息,請參閱主題部分。
  變量描述
  插件
  要加載的插件列表
  插件配置
  插件配置
  添加插件
  "plugins": [
"splitter"
]
  添加新插件后,需要運行 gitbook install 來(lái)安裝新插件
  刪除內置插件
  Gitbook 默認自帶 5 個(gè)插件:
  "plugins": [
"-search"
]
  結構體
  除了root屬性,還可以指定Readme、Summary、Glossary、Languages的名稱(chēng)(而不是使用默認名稱(chēng),比如README.md)。這些文件必須位于項目的根目錄(或根目錄,如果您在 book.json 中配置了 root 屬性)。不可接受的路徑,例如:dir/MY_README.md。
  變量描述
  結構.readme
  自述文件名(默認為 README.md)
  結構.摘要
  摘要文件名(默認為SUMMARY.md)
  結構.詞匯表
  詞匯表文件名(默認為 GLOSSARY.md)
  結構語(yǔ)言
  語(yǔ)言文件名(默認為 LANGS.md)
  pdf
  可以使用 book.json 中的一組選項自定義 PDF 輸出:
  變量描述
  pdf.pageNumbers
  在每頁(yè)底部添加頁(yè)碼(默認為 true)
  pdf.fontSize
  基本字體大?。J為 12)
  pdf.fontFamily
  基本字體樣式(默認為 Arial)
  pdf.paperSize
  頁(yè)面大小,選項有:'a0'、'a1'、'a2'、'a3'、'a4'、'a5'、'a6'、'b0'、'b1'、'b2'、'b3'、 'b4', 'b5', 'b6', 'legal', 'letter' (默認是a4)
  上限(默認為 56)
  pdf.margin.bottom
  下限(默認為 56)
  pdf.margin.right
  右邊框(默認為 62)
  pdf.margin.left
  左邊框(默認為 62)
  生成電子書(shū)
  GitBook 可以生成 網(wǎng)站,但也可以將內容輸出為電子書(shū)(ePub、Mobi、PDF)。
  # Generate a PDF file
$ gitbook pdf ./ ./mybook.pdf
# Generate an ePub file
$ gitbook epub ./ ./mybook.epub
# Generate a Mobi file
$ gitbook mobi ./ ./mybook.mobi
  安裝電子書(shū)轉換
  ebook-convert 可用于生成電子書(shū)(epub、mobi、pdf)。
  GNU/Linux
  安裝口徑應用程序。
  $ sudo aptitude install calibre
  在某些 GNU/Linux 發(fā)行版上,node 安裝為 nodejs,您需要手動(dòng)創(chuàng )建符號鏈接:
  $sudo ln -s /usr/bin/nodejs /usr/bin/node
  操作系統
  下載口徑應用程序。將 calibre.app 移動(dòng)到應用程序文件夾后,創(chuàng )建指向 ebook-convert 工具的符號鏈接:
  $ sudo ln -s ~/Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin
  您可以將 /usr/bin 替換為 $PATH 中的任何目錄。
  覆蓋
  封面用于所有電子書(shū)格式。您可以自己提供一個(gè)或使用自動(dòng)覆蓋插件生成一個(gè)。
  要提供封面,請將 cover.jpg 文件放在本書(shū)的根目錄中。添加一個(gè)cover_small.jpg 將指定一個(gè)較小版本的封面。封面應該是 JPEG 文件。
  一個(gè)好的封面應該遵循以下準則:
  Gitbook 部署托管到
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  創(chuàng )建新書(shū)
  如下圖所示,根據您的個(gè)人需求,選擇一個(gè)模板來(lái)創(chuàng )建您的電子書(shū)。
  
  設置圖書(shū)基本信息
  
  克隆到本地
  將為每本書(shū)創(chuàng )建一個(gè) git 存儲庫。
  如下圖,復制git地址,然后git clone到本地。
  
  釋放
  根據 Gitbook 規范在本地編輯電子書(shū),然后 git push 到 Gitbook 遠程倉庫。
  默認訪(fǎng)問(wèn)地址為:username.gitbooks.io/projectname/content/
  例如:我的用戶(hù)名為atlantis1024,一個(gè)電子書(shū)項目名為test,那么訪(fǎng)問(wèn)路徑為:
  當然,如果你有自己的域名,你也可以設置 Domains 選項來(lái)指定你的域的訪(fǎng)問(wèn)路徑。
  托管在 Github 上
  如果你不想使用 Gitbook 的倉庫,但想直接使用 Github 的倉庫,也是可以的。
  首先,你需要綁定你的 Github 賬號。最簡(jiǎn)單的方法當然是在登錄的時(shí)候使用Github賬號登錄方式,否則也可以在A(yíng)ccount Settings中的Github設置選項中進(jìn)行綁定。
  
  綁定 Github 賬號后,您可以在創(chuàng )建電子書(shū)時(shí)選擇從指定的 Github 倉庫導入電子書(shū)項目。請參考下圖:
  
  只要您指定的 Github 倉庫中的文檔內容符合 Gitbook 規范,Gitbook 就會(huì )根據您的每次更新自動(dòng)構建并生成電子書(shū)網(wǎng)站。
  默認訪(fǎng)問(wèn)地址為:
  https://Github用戶(hù)名.gitbooks.io/Github 倉庫/content/
  例如:我的用戶(hù)名是atlantis1024,Github倉庫名是gitbook-notes,那么訪(fǎng)問(wèn)路徑是:
  托管到 Github 頁(yè)面
  或許你之前也知道 Github 的一個(gè)特性:GitHub Pages。它允許用戶(hù)在 GitHub 存儲庫中托管您的個(gè)人、組織或項目的靜態(tài)頁(yè)面(自動(dòng)識別 html、css、javascript)。
  構建 xxx.github.io 倉庫
  要使用這個(gè)功能,首先要創(chuàng )建一個(gè)嚴格遵循命名要求的倉庫:Github賬號名.github.io 比如我的Github賬號是atlantis1024,那么這個(gè)倉庫應該叫atlantis1024.github.io . 通常,此存儲庫用作個(gè)人或組織博客。
  創(chuàng )建 gh-pages 分支
  完成步驟 1 后,在任何 Github 存儲庫中創(chuàng )建一個(gè)名為 gh-pages 的分支。只要 gh-pages 中的內容滿(mǎn)足靜態(tài)站點(diǎn)要求,就可以在如下地址訪(fǎng)問(wèn):username.gitbooks.io/Github 倉庫。例如:我的 Github 倉庫之一名為 react-notes,訪(fǎng)問(wèn)路徑為:
  自動(dòng)發(fā)布到 gh-pages
  如果每次手動(dòng) git push 到遠程的 gh-pages 分支,就有點(diǎn)麻煩了。
  如何實(shí)現自動(dòng)發(fā)布?
  有兩種方法:
  使用 gh-pages 插件
  如果您了解 Nodejs,最簡(jiǎn)單的發(fā)布方式是使用 gh-pages 插件。
  先在本地安裝插件
  $ npm i -D gh-pages
  然后,在 package.json 文件中添加腳本命令:
  如下: -d 命令參數后跟要發(fā)布的靜態(tài)站點(diǎn)內容的目錄
  "scripts": {
"deploy": "gh-pages -d build"
},
  腳本
  編寫(xiě)一個(gè)執行 git 命令的腳本,你就完成了。
  以下腳本可以在 bat 或 sh 腳本中執行。
  cd build
git init
git checkout -b gh-pages
git add .
git commit -am "Update"
git push git@github.com:atlantis1024/gitbook-notes gh-pages --force"
  資源 官方資源 教程 資源工具

抓取網(wǎng)頁(yè)生成電子書(shū)( 的“我的E站”設計制作)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2022-04-11 04:24 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
的“我的E站”設計制作)
  
  本書(shū)采用的“我的E站”項目的設計與制作,為讀者全面展示了網(wǎng)站設計與網(wǎng)頁(yè)制作的基礎知識,讓沒(méi)有網(wǎng)頁(yè)制作基礎知識的讀者也能輕松上手。發(fā)展和產(chǎn)生自己的想法。網(wǎng)站 的。本書(shū)遵循網(wǎng)站開(kāi)發(fā)的大致流程,主要介紹網(wǎng)站前期規劃;網(wǎng)站結構創(chuàng )建;網(wǎng)頁(yè)界面設計;簡(jiǎn)單的圖像處理;圖像和文本、列表、表格、模板和表單 DIV+CSS 標準布局;CSS 樣式應用程序;多媒體和 Flash 應用程序;JavaScript 基礎應用;網(wǎng)站創(chuàng )建和上傳;網(wǎng)站 兼容性測試;文書(shū)寫(xiě)作;響應式設計等。本書(shū)免費提供書(shū)中所有資料。此外,全國計算機信息高技術(shù)考試高級網(wǎng)頁(yè)制作人員網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。
  ·點(diǎn)擊進(jìn)入下載地址
  這本書(shū)有電子版。如果無(wú)法下載,請加入我們的Q群:972703811聯(lián)系獲取。
  · 圍觀(guān):下載的電子書(shū)丟失或不完整怎么辦?
  ·干貨:哪里可以下載電子書(shū)資源?
  尖端: 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
的“我的E站”設計制作)
  
  本書(shū)采用的“我的E站”項目的設計與制作,為讀者全面展示了網(wǎng)站設計與網(wǎng)頁(yè)制作的基礎知識,讓沒(méi)有網(wǎng)頁(yè)制作基礎知識的讀者也能輕松上手。發(fā)展和產(chǎn)生自己的想法。網(wǎng)站 的。本書(shū)遵循網(wǎng)站開(kāi)發(fā)的大致流程,主要介紹網(wǎng)站前期規劃;網(wǎng)站結構創(chuàng )建;網(wǎng)頁(yè)界面設計;簡(jiǎn)單的圖像處理;圖像和文本、列表、表格、模板和表單 DIV+CSS 標準布局;CSS 樣式應用程序;多媒體和 Flash 應用程序;JavaScript 基礎應用;網(wǎng)站創(chuàng )建和上傳;網(wǎng)站 兼容性測試;文書(shū)寫(xiě)作;響應式設計等。本書(shū)免費提供書(shū)中所有資料。此外,全國計算機信息高技術(shù)考試高級網(wǎng)頁(yè)制作人員網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。
  ·點(diǎn)擊進(jìn)入下載地址
  這本書(shū)有電子版。如果無(wú)法下載,請加入我們的Q群:972703811聯(lián)系獲取。
  · 圍觀(guān):下載的電子書(shū)丟失或不完整怎么辦?
  ·干貨:哪里可以下載電子書(shū)資源?
  尖端:

抓取網(wǎng)頁(yè)生成電子書(shū)( Android移動(dòng)開(kāi)發(fā)基礎案例教程-爬取電子書(shū))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-04-11 03:30 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
Android移動(dòng)開(kāi)發(fā)基礎案例教程-爬取電子書(shū))
  
  
  前言
  為了省錢(qián),小編找了一本電子書(shū)網(wǎng)站,“學(xué)霸”,小編搜了一下,找到了“學(xué)霸清華”
  
  但不是唯一的,還有“學(xué)術(shù)北京師范大學(xué)珠海分?!?,應該是學(xué)校后綴的。
  
  一旦我們注冊了一個(gè)帳戶(hù),我們就可以開(kāi)始抓取我們想要的電子書(shū)了。
  這兩個(gè)網(wǎng)站結構相似。
  爬取分析
  編輯選擇這個(gè)url作為爬蟲(chóng)
  我們以爬取《Android移動(dòng)開(kāi)發(fā)基礎案例教程》為例
  
  打開(kāi)開(kāi)發(fā)者工具,翻了幾頁(yè)發(fā)現是動(dòng)態(tài)加載的,url如下
  
  我們看到url中有一個(gè)參數t,說(shuō)明在請求的時(shí)候需要構造這個(gè)參數t,并拼接url來(lái)請求它
  
  視覺(jué)上可能是時(shí)間戳,我們可以使用 time.time() 來(lái)生成時(shí)間戳
  
  與參數t相比,python代碼生成小數,長(cháng)度不同。乘以 1000 然后使用 int() 函數使其長(cháng)度與參數 t 相同,但 int() 直接丟棄小數點(diǎn)。是的,我們不知道t是否取整,所以為了保證一次性請求成功,編輯器直接執行生成參數t的js代碼,生成對應的參數t,即絕對正確。
  js生成時(shí)間戳的代碼如下
  
  在python中使用execjs執行js代碼
  
  這樣,我們爬取請求的必要參數就解決了。
  其余的可以根據爬蟲(chóng)邏輯直接寫(xiě)。
  注意pdf只能瀏覽前十頁(yè)。如果你想全部瀏覽,你需要登錄并在請求頭中放一個(gè)cookie。
  pdf合并
  爬下來(lái)后是pdf文件,文件名以頁(yè)碼命名,我們需要全部合并成pdf,代碼如下:
  
  綜合結果如下:
  
  合并完成后,我們就有了電子書(shū)。
  吃飽喝足的感覺(jué)真好,這樣我就可以省錢(qián)買(mǎi)皮了。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
Android移動(dòng)開(kāi)發(fā)基礎案例教程-爬取電子書(shū))
  
  
  前言
  為了省錢(qián),小編找了一本電子書(shū)網(wǎng)站,“學(xué)霸”,小編搜了一下,找到了“學(xué)霸清華”
  
  但不是唯一的,還有“學(xué)術(shù)北京師范大學(xué)珠海分?!?,應該是學(xué)校后綴的。
  
  一旦我們注冊了一個(gè)帳戶(hù),我們就可以開(kāi)始抓取我們想要的電子書(shū)了。
  這兩個(gè)網(wǎng)站結構相似。
  爬取分析
  編輯選擇這個(gè)url作為爬蟲(chóng)
  我們以爬取《Android移動(dòng)開(kāi)發(fā)基礎案例教程》為例
  
  打開(kāi)開(kāi)發(fā)者工具,翻了幾頁(yè)發(fā)現是動(dòng)態(tài)加載的,url如下
  
  我們看到url中有一個(gè)參數t,說(shuō)明在請求的時(shí)候需要構造這個(gè)參數t,并拼接url來(lái)請求它
  
  視覺(jué)上可能是時(shí)間戳,我們可以使用 time.time() 來(lái)生成時(shí)間戳
  
  與參數t相比,python代碼生成小數,長(cháng)度不同。乘以 1000 然后使用 int() 函數使其長(cháng)度與參數 t 相同,但 int() 直接丟棄小數點(diǎn)。是的,我們不知道t是否取整,所以為了保證一次性請求成功,編輯器直接執行生成參數t的js代碼,生成對應的參數t,即絕對正確。
  js生成時(shí)間戳的代碼如下
  
  在python中使用execjs執行js代碼
  
  這樣,我們爬取請求的必要參數就解決了。
  其余的可以根據爬蟲(chóng)邏輯直接寫(xiě)。
  注意pdf只能瀏覽前十頁(yè)。如果你想全部瀏覽,你需要登錄并在請求頭中放一個(gè)cookie。
  pdf合并
  爬下來(lái)后是pdf文件,文件名以頁(yè)碼命名,我們需要全部合并成pdf,代碼如下:
  
  綜合結果如下:
  
  合并完成后,我們就有了電子書(shū)。
  吃飽喝足的感覺(jué)真好,這樣我就可以省錢(qián)買(mǎi)皮了。

抓取網(wǎng)頁(yè)生成電子書(shū)(【,】)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 150 次瀏覽 ? 2022-04-05 03:11 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(【,】)
  網(wǎng)絡(luò )視頻采集工具正式版通過(guò)/fileview_2523891.html上傳到126下載網(wǎng)免費下載。
  [color=#008000]================================= === ====[/color][color=#f00000]重要提示:【網(wǎng)絡(luò )視頻爬蟲(chóng)】已更新至最新穩定版! [/color][color=#f00000]功能更穩定更強大!永遠免費!其他版本已過(guò)期,請下載最新版本↓↓[/color][color=#008000]最新穩定版可以高速下載:[ /color][ /b][b][color=#0000f0]點(diǎn)擊這里立即下載[/color] [color=#008000]電信用戶(hù)高速下載:[/color][color=#0000f0]電信下載一個(gè)[/color][color=#0000f0]電信下載2[/color] [color=#008000]高速下載來(lái)自其他網(wǎng)絡(luò ):[/color][color=#0000f0]高速下載一個(gè)[/color][color=#0000f0]高速下載二[/color] [color=#008000]==== ==== ================================[/color] 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(【,】)
  網(wǎng)絡(luò )視頻采集工具正式版通過(guò)/fileview_2523891.html上傳到126下載網(wǎng)免費下載。
  [color=#008000]================================= === ====[/color][color=#f00000]重要提示:【網(wǎng)絡(luò )視頻爬蟲(chóng)】已更新至最新穩定版! [/color][color=#f00000]功能更穩定更強大!永遠免費!其他版本已過(guò)期,請下載最新版本↓↓[/color][color=#008000]最新穩定版可以高速下載:[ /color][ /b][b][color=#0000f0]點(diǎn)擊這里立即下載[/color] [color=#008000]電信用戶(hù)高速下載:[/color][color=#0000f0]電信下載一個(gè)[/color][color=#0000f0]電信下載2[/color] [color=#008000]高速下載來(lái)自其他網(wǎng)絡(luò ):[/color][color=#0000f0]高速下載一個(gè)[/color][color=#0000f0]高速下載二[/color] [color=#008000]==== ==== ================================[/color]

抓取網(wǎng)頁(yè)生成電子書(shū)( 全篇的實(shí)現思路分析網(wǎng)頁(yè)學(xué)會(huì )使用BeautifulSoup庫爬取并導出參考資料)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-03-31 16:00 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
全篇的實(shí)現思路分析網(wǎng)頁(yè)學(xué)會(huì )使用BeautifulSoup庫爬取并導出參考資料)
  Python 抓取網(wǎng)頁(yè)并將其轉換為 PDF 文件
  爬行動(dòng)物的成因
  雖然可以查閱官方文件或手冊,但如果是紙質(zhì)的,是不是更容易閱讀和記憶。如果是簡(jiǎn)單的復制粘貼,不知道什么時(shí)候能完成。于是我開(kāi)始考慮爬下安卓官方手冊。
  整篇文章的實(shí)現思路
  分析網(wǎng)頁(yè),學(xué)習使用BeautifulSoup庫爬取導出
  參考:
  * 將廖雪峰的教程轉換成PDF電子書(shū)
  * 請求文件
  * 美麗的湯文檔
  配置
  Ubuntu下使用Pycharm成功運行
  要轉換PDF,您需要下載wkhtmltopdf
  具體流程
  網(wǎng)頁(yè)分析
  如下圖的一個(gè)網(wǎng)頁(yè),要做的就是獲取網(wǎng)頁(yè)的body和title,以及左側導航欄的所有url
  
  接下來(lái)的工作是找到這些標簽......
  關(guān)于請求的使用
  詳細參考文檔,這里只是簡(jiǎn)單的使用Requests獲取html并使用代理翻墻(網(wǎng)站不能直接訪(fǎng)問(wèn),需要VPN)
  
proxies={
"http":"http://vpn的IP:port",
"https":"https://vpn的IP:port",
}
response=requests.get(url,proxies=proxies)
  美湯的使用
  參考資料中有一個(gè) Beautiful Soup 文檔??赐昕梢灾烙袃杉拢阂皇钦覙撕?,二是修改標簽。
  這篇文章需要做的是:
  1. 獲取標題和所有url,這涉及到查找標簽
  
#對標簽進(jìn)行判斷,一個(gè)標簽含有href而不含有description,則返回true
#而我希望獲取的是含有href屬性而不含有description屬性的<a>標簽,(且只有a標簽含有href)
def has_href_but_no_des(tag):
return tag.has_attr('href') and not tag.has_attr('description')
#網(wǎng)頁(yè)分析,獲取網(wǎng)址和標題
def parse_url_to_html(url):
response=requests.get(url,proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
s=[]#獲取所有的網(wǎng)址
title=[]#獲取對應的標題
tag=soup.find(id="nav")#獲取第一個(gè)id為"nav"的標簽,這個(gè)里面包含了網(wǎng)址和標題
for i in tag.find_all(has_href_but_no_des):
s.append(i['href'])
title.append(i.text)
#獲取的只是標簽集,需要加html前綴
htmls = ""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  解析上面得到的URL,獲取文本,取出圖片保存在本地;它涉及查找標簽和修改屬性
  
#網(wǎng)頁(yè)操作,獲取正文及圖片
def get_htmls(urls,title):
for i in range(len(urls)):
response=requests.get(urls[i],proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
htmls=""+str(i)+"."+title[i]+""
tag=soup.find(class_='jd-descr')
#為image添加相對路徑,并下載圖片
for img in tag.find_all('img'):
im = requests.get(img['src'], proxies=proxies)
filename = os.path.split(img['src'])[1]
with open('image/' + filename, 'wb') as f:
f.write(im.content)
img['src']='image/'+filename
htmls=htmls+str(tag)
with open("android_training_3.html",'a') as f:
f.write(htmls)
print(" (%s) [%s] download end"%(i,title[i]))
htmls=""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  2.轉換為PDF
  這一步需要下載wkhtmltopdf,在Windows下執行程序總是報錯。你可以在 Ubuntu 下完成
  
def save_pdf(html):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(html, "android_training_3.pdf", options=options)
  最終效果圖
  
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持來(lái)客網(wǎng)。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
全篇的實(shí)現思路分析網(wǎng)頁(yè)學(xué)會(huì )使用BeautifulSoup庫爬取并導出參考資料)
  Python 抓取網(wǎng)頁(yè)并將其轉換為 PDF 文件
  爬行動(dòng)物的成因
  雖然可以查閱官方文件或手冊,但如果是紙質(zhì)的,是不是更容易閱讀和記憶。如果是簡(jiǎn)單的復制粘貼,不知道什么時(shí)候能完成。于是我開(kāi)始考慮爬下安卓官方手冊。
  整篇文章的實(shí)現思路
  分析網(wǎng)頁(yè),學(xué)習使用BeautifulSoup庫爬取導出
  參考:
  * 將廖雪峰的教程轉換成PDF電子書(shū)
  * 請求文件
  * 美麗的湯文檔
  配置
  Ubuntu下使用Pycharm成功運行
  要轉換PDF,您需要下載wkhtmltopdf
  具體流程
  網(wǎng)頁(yè)分析
  如下圖的一個(gè)網(wǎng)頁(yè),要做的就是獲取網(wǎng)頁(yè)的body和title,以及左側導航欄的所有url
  
  接下來(lái)的工作是找到這些標簽......
  關(guān)于請求的使用
  詳細參考文檔,這里只是簡(jiǎn)單的使用Requests獲取html并使用代理翻墻(網(wǎng)站不能直接訪(fǎng)問(wèn),需要VPN)
  
proxies={
"http":"http://vpn的IP:port",
"https":"https://vpn的IP:port",
}
response=requests.get(url,proxies=proxies)
  美湯的使用
  參考資料中有一個(gè) Beautiful Soup 文檔??赐昕梢灾烙袃杉拢阂皇钦覙撕?,二是修改標簽。
  這篇文章需要做的是:
  1. 獲取標題和所有url,這涉及到查找標簽
  
#對標簽進(jìn)行判斷,一個(gè)標簽含有href而不含有description,則返回true
#而我希望獲取的是含有href屬性而不含有description屬性的<a>標簽,(且只有a標簽含有href)
def has_href_but_no_des(tag):
return tag.has_attr('href') and not tag.has_attr('description')
#網(wǎng)頁(yè)分析,獲取網(wǎng)址和標題
def parse_url_to_html(url):
response=requests.get(url,proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
s=[]#獲取所有的網(wǎng)址
title=[]#獲取對應的標題
tag=soup.find(id="nav")#獲取第一個(gè)id為"nav"的標簽,這個(gè)里面包含了網(wǎng)址和標題
for i in tag.find_all(has_href_but_no_des):
s.append(i['href'])
title.append(i.text)
#獲取的只是標簽集,需要加html前綴
htmls = ""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  解析上面得到的URL,獲取文本,取出圖片保存在本地;它涉及查找標簽和修改屬性
  
#網(wǎng)頁(yè)操作,獲取正文及圖片
def get_htmls(urls,title):
for i in range(len(urls)):
response=requests.get(urls[i],proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
htmls=""+str(i)+"."+title[i]+""
tag=soup.find(class_='jd-descr')
#為image添加相對路徑,并下載圖片
for img in tag.find_all('img'):
im = requests.get(img['src'], proxies=proxies)
filename = os.path.split(img['src'])[1]
with open('image/' + filename, 'wb') as f:
f.write(im.content)
img['src']='image/'+filename
htmls=htmls+str(tag)
with open("android_training_3.html",'a') as f:
f.write(htmls)
print(" (%s) [%s] download end"%(i,title[i]))
htmls=""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  2.轉換為PDF
  這一步需要下載wkhtmltopdf,在Windows下執行程序總是報錯。你可以在 Ubuntu 下完成
  
def save_pdf(html):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(html, "android_training_3.pdf", options=options)
  最終效果圖
  
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持來(lái)客網(wǎng)。

抓取網(wǎng)頁(yè)生成電子書(shū)(抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-03-30 14:06 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份)
  抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份電子書(shū)。用selenium可以用chrome代替javascript。
  一般來(lái)說(shuō)可以用php模擬瀏覽器請求成功后會(huì )返回json數據,
  模擬瀏覽器ajax請求獲取
  php里用activexdom實(shí)現,另外js里也可以,不過(guò)不是很清楚,另外還有html5里也可以寫(xiě)ajax解析,說(shuō)起來(lái)可能有點(diǎn)多,沒(méi)必要這么折騰,直接用xmlhttprequest-generator就行了。
  php里用activex,js用ajax,如果不能復制粘貼,可以用cmd+tab,選擇editcontentfile。模擬瀏覽器就是chrome,系統自帶的控制臺,
  activex是windows,activex不能直接解析html,需要用ajax。ajax是瀏覽器向服務(wù)器發(fā)送請求,然后服務(wù)器處理數據并返回給瀏覽器的一種技術(shù)。實(shí)現方法就是windows自帶的開(kāi)發(fā)工具,瀏覽器右鍵調試窗口,進(jìn)入開(kāi)發(fā)選項,選擇在控制臺模式下,在windows系統中選擇:服務(wù)器版模式。另外一種是把鏈接復制到電腦瀏覽器輸入,瀏覽器就能解析,netscape也支持瀏覽器輸入,不過(guò)windows下生成的代碼不能讀取。
  看看這篇文章[轉載]一個(gè)http請求生成html電子書(shū)
  php可以用tomcat做webserver, 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份)
  抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份電子書(shū)。用selenium可以用chrome代替javascript。
  一般來(lái)說(shuō)可以用php模擬瀏覽器請求成功后會(huì )返回json數據,
  模擬瀏覽器ajax請求獲取
  php里用activexdom實(shí)現,另外js里也可以,不過(guò)不是很清楚,另外還有html5里也可以寫(xiě)ajax解析,說(shuō)起來(lái)可能有點(diǎn)多,沒(méi)必要這么折騰,直接用xmlhttprequest-generator就行了。
  php里用activex,js用ajax,如果不能復制粘貼,可以用cmd+tab,選擇editcontentfile。模擬瀏覽器就是chrome,系統自帶的控制臺,
  activex是windows,activex不能直接解析html,需要用ajax。ajax是瀏覽器向服務(wù)器發(fā)送請求,然后服務(wù)器處理數據并返回給瀏覽器的一種技術(shù)。實(shí)現方法就是windows自帶的開(kāi)發(fā)工具,瀏覽器右鍵調試窗口,進(jìn)入開(kāi)發(fā)選項,選擇在控制臺模式下,在windows系統中選擇:服務(wù)器版模式。另外一種是把鏈接復制到電腦瀏覽器輸入,瀏覽器就能解析,netscape也支持瀏覽器輸入,不過(guò)windows下生成的代碼不能讀取。
  看看這篇文章[轉載]一個(gè)http請求生成html電子書(shū)
  php可以用tomcat做webserver,

抓取網(wǎng)頁(yè)生成電子書(shū)(這篇.+jade博客所有文章生成靜態(tài)html文件的實(shí)例小編)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 115 次瀏覽 ? 2022-03-29 21:12 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(這篇.+jade博客所有文章生成靜態(tài)html文件的實(shí)例小編)
  在這個(gè)文章中,我們將從上面的采集中整理出所有文章列表的信息,啟動(dòng)采集文章,生成靜態(tài)html文件。來(lái)看看我的采集的效果,我的博客目前有77篇文章文章,不到1分鐘就全部生成了采集,這里我截了一些圖片,文件name是生成文章的id,生成的文章,我寫(xiě)了一個(gè)簡(jiǎn)單的靜態(tài)模板,所有的文章都是按照這個(gè)模板生成的。
  項目結構:
  
  
  
  好,接下來(lái),我們來(lái)解釋一下這個(gè)文章的主要功能:
  1.抓取文章,主要抓取文章的標題、內容、超鏈接、文章id(用于生成靜態(tài)html文件)
  2.根據jade模板生成html文件
  一、爬取文章是如何完成的?
  很簡(jiǎn)單,類(lèi)似于上面抓取文章列表的實(shí)現
  
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
  參數url是文章的地址。抓取到文章的內容后,調用filterArticle(html)過(guò)濾出需要的文章信息(id、title、hyperlink、content),然后使用jade的renderFile的api替換模板內容,
  模板內容替換后,肯定要生成html文件,所以使用writeFile寫(xiě)入文件,寫(xiě)入文件時(shí),使用id作為html文件的名稱(chēng)。這是生成靜態(tài)html文件的實(shí)現,
  下一步就是循環(huán)生成一個(gè)靜態(tài)html文件,就是下面這行:
  if (aUrl.length) crawlerArc(aUrl.shift());
  aUrl 保存了我博客的所有文章 url,每次采集 寫(xiě)完一篇文章,刪除當前文章 的url,讓下一篇文章 @文章的url出來(lái)了,繼續采集
  完整的實(shí)現代碼服務(wù)器:
  
var fs = require( 'fs' );
var http = require( 'http' );
var cheerio = require( 'cheerio' );
var jade = require( 'jade' );
var aList = [];
var aUrl = [];
function filterArticle(html) {
var $ = cheerio.load( html );
var arcDetail = {};
var title = $( "#cb_post_title_url" ).text();
var href = $( "#cb_post_title_url" ).attr( "href" );
var re = /\/(\d+)\.html/;
var id = href.match( re )[1];
var body = $( "#cnblogs_post_body" ).html();
return {
id : id,
title : title,
href : href,
body : body
};
}
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
function filterHtml(html) {
var $ = cheerio.load(html);
var arcList = [];
var aPost = $("#content").find(".post-list-item");
aPost.each(function () {
var ele = $(this);
var title = ele.find("h2 a").text();
var url = ele.find("h2 a").attr("href");
ele.find(".c_b_p_desc a").remove();
var entry = ele.find(".c_b_p_desc").text();
ele.find("small a").remove();
var listTime = ele.find("small").text();
var re = /\d{4}-\d{2}-\d{2}\s*\d{2}[:]\d{2}/;
listTime = listTime.match(re)[0];
arcList.push({
title: title,
url: url,
entry: entry,
listTime: listTime
});
});
return arcList;
}
function nextPage( html ){
var $ = cheerio.load(html);
var nextUrl = $("#pager a:last-child").attr('href');
if ( !nextUrl ) return getArcUrl( aList );
var curPage = $("#pager .current").text();
if( !curPage ) curPage = 1;
var nextPage = nextUrl.substring( nextUrl.indexOf( '=' ) + 1 );
if ( curPage < nextPage ) crawler( nextUrl );
}
function crawler(url) {
http.get(url, function (res) {
var html = '';
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
aList.push( filterHtml(html) );
nextPage( html );
});
});
}
function getArcUrl( arcList ){
for( var key in arcList ){
for( var k in arcList[key] ){
aUrl.push( arcList[key][k]['url'] );
}
}
crawlerArc( aUrl.shift() );
}
var url = 'http://www.cnblogs.com/ghostwu/';
crawler( url );
  layout.jade 文件:
  
doctype html
html
head
meta(charset='utf-8')
title jade+node.js express
link(rel="stylesheet", href='./css/bower_components/bootstrap/dist/css/bootstrap.min.css')
body
block header
div.container
div.well.well-lg
h3 ghostwu的博客
p js高手之路
block container
div.container
h3
a(href="#{href}" rel="external nofollow" ) !{title}
p !{body}
block footer
div.container
footer 版權所有 - by ghostwu
  未來(lái)的計劃:
  1、使用mongodb進(jìn)行存儲
  2.支持斷點(diǎn)采集
  3. 采集 圖片
  4. 采集小說(shuō)
  等等…。
  上面node.+jade從博客爬取所有文章靜態(tài)html文件的例子就是編輯器分享的所有內容。希望能給大家一個(gè)參考,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者? 《Node.js+jade爬取文章的所有實(shí)例從blogs生成靜態(tài)html文件_萌西_前端開(kāi)發(fā)者》
  ? 本文鏈接: 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(這篇.+jade博客所有文章生成靜態(tài)html文件的實(shí)例小編)
  在這個(gè)文章中,我們將從上面的采集中整理出所有文章列表的信息,啟動(dòng)采集文章,生成靜態(tài)html文件。來(lái)看看我的采集的效果,我的博客目前有77篇文章文章,不到1分鐘就全部生成了采集,這里我截了一些圖片,文件name是生成文章的id,生成的文章,我寫(xiě)了一個(gè)簡(jiǎn)單的靜態(tài)模板,所有的文章都是按照這個(gè)模板生成的。
  項目結構:
  
  
  
  好,接下來(lái),我們來(lái)解釋一下這個(gè)文章的主要功能:
  1.抓取文章,主要抓取文章的標題、內容、超鏈接、文章id(用于生成靜態(tài)html文件)
  2.根據jade模板生成html文件
  一、爬取文章是如何完成的?
  很簡(jiǎn)單,類(lèi)似于上面抓取文章列表的實(shí)現
  
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
  參數url是文章的地址。抓取到文章的內容后,調用filterArticle(html)過(guò)濾出需要的文章信息(id、title、hyperlink、content),然后使用jade的renderFile的api替換模板內容,
  模板內容替換后,肯定要生成html文件,所以使用writeFile寫(xiě)入文件,寫(xiě)入文件時(shí),使用id作為html文件的名稱(chēng)。這是生成靜態(tài)html文件的實(shí)現,
  下一步就是循環(huán)生成一個(gè)靜態(tài)html文件,就是下面這行:
  if (aUrl.length) crawlerArc(aUrl.shift());
  aUrl 保存了我博客的所有文章 url,每次采集 寫(xiě)完一篇文章,刪除當前文章 的url,讓下一篇文章 @文章的url出來(lái)了,繼續采集
  完整的實(shí)現代碼服務(wù)器:
  
var fs = require( 'fs' );
var http = require( 'http' );
var cheerio = require( 'cheerio' );
var jade = require( 'jade' );
var aList = [];
var aUrl = [];
function filterArticle(html) {
var $ = cheerio.load( html );
var arcDetail = {};
var title = $( "#cb_post_title_url" ).text();
var href = $( "#cb_post_title_url" ).attr( "href" );
var re = /\/(\d+)\.html/;
var id = href.match( re )[1];
var body = $( "#cnblogs_post_body" ).html();
return {
id : id,
title : title,
href : href,
body : body
};
}
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
function filterHtml(html) {
var $ = cheerio.load(html);
var arcList = [];
var aPost = $("#content").find(".post-list-item");
aPost.each(function () {
var ele = $(this);
var title = ele.find("h2 a").text();
var url = ele.find("h2 a").attr("href");
ele.find(".c_b_p_desc a").remove();
var entry = ele.find(".c_b_p_desc").text();
ele.find("small a").remove();
var listTime = ele.find("small").text();
var re = /\d{4}-\d{2}-\d{2}\s*\d{2}[:]\d{2}/;
listTime = listTime.match(re)[0];
arcList.push({
title: title,
url: url,
entry: entry,
listTime: listTime
});
});
return arcList;
}
function nextPage( html ){
var $ = cheerio.load(html);
var nextUrl = $("#pager a:last-child").attr('href');
if ( !nextUrl ) return getArcUrl( aList );
var curPage = $("#pager .current").text();
if( !curPage ) curPage = 1;
var nextPage = nextUrl.substring( nextUrl.indexOf( '=' ) + 1 );
if ( curPage < nextPage ) crawler( nextUrl );
}
function crawler(url) {
http.get(url, function (res) {
var html = '';
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
aList.push( filterHtml(html) );
nextPage( html );
});
});
}
function getArcUrl( arcList ){
for( var key in arcList ){
for( var k in arcList[key] ){
aUrl.push( arcList[key][k]['url'] );
}
}
crawlerArc( aUrl.shift() );
}
var url = 'http://www.cnblogs.com/ghostwu/';
crawler( url );
  layout.jade 文件:
  
doctype html
html
head
meta(charset='utf-8')
title jade+node.js express
link(rel="stylesheet", href='./css/bower_components/bootstrap/dist/css/bootstrap.min.css')
body
block header
div.container
div.well.well-lg
h3 ghostwu的博客
p js高手之路
block container
div.container
h3
a(href="#{href}" rel="external nofollow" ) !{title}
p !{body}
block footer
div.container
footer 版權所有 - by ghostwu
  未來(lái)的計劃:
  1、使用mongodb進(jìn)行存儲
  2.支持斷點(diǎn)采集
  3. 采集 圖片
  4. 采集小說(shuō)
  等等…。
  上面node.+jade從博客爬取所有文章靜態(tài)html文件的例子就是編輯器分享的所有內容。希望能給大家一個(gè)參考,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者? 《Node.js+jade爬取文章的所有實(shí)例從blogs生成靜態(tài)html文件_萌西_前端開(kāi)發(fā)者》
  ? 本文鏈接:

抓取網(wǎng)頁(yè)生成電子書(shū)( AI社區搭建出所謂語(yǔ)言模型的前提是學(xué)習數據的原因)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-04-20 10:27 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
AI社區搭建出所謂語(yǔ)言模型的前提是學(xué)習數據的原因)
  
  由大數據文摘出品
  合輯:非、倪妮、什錦甜、錢(qián)天培
  人工智能未來(lái)的一個(gè)主要應用將是構建可以從數據中學(xué)習然后生成原創(chuàng )內容的網(wǎng)絡(luò )。這個(gè)思想已經(jīng)在自然語(yǔ)言處理(NLP)領(lǐng)域得到了充分的應用,這也是為什么AI社區可以構建所謂的語(yǔ)言模型:語(yǔ)言模型的前提是學(xué)習文章@中的句子結構> 段落,從而生成新的內容。
  在這個(gè)文章@>我想嘗試生成類(lèi)似于非常流行的加拿大說(shuō)唱歌手德雷克(又名#6god)風(fēng)格的說(shuō)唱歌詞,一定很有趣。
  另外,我也想分享一下通用的機器學(xué)習項目流水線(xiàn),因為我發(fā)現很多同學(xué)想做一些小項目,但是不知道從哪里開(kāi)始。
  獲取數據
  首先,我們開(kāi)始采集 Drake 的音樂(lè )庫。為了節省時(shí)間,我寫(xiě)了一個(gè)爬蟲(chóng)來(lái)抓取網(wǎng)絡(luò )上的歌詞。
  import urllib.request as urllib2
from bs4 import BeautifulSoup
import pandas as pd
import re
from unidecode import unidecode
quote_page = 'http://metrolyrics.com/{}-lyrics-drake.html'
filename = 'drake-songs.csv'
songs = pd.read_csv(filename)
for index, row in songs.iterrows():
page = urllib2.urlopen(quote_page.format(row['song']))
soup = BeautifulSoup(page, 'html.parser')
verses = soup.find_all('p', attrs={'class': 'verse'})
lyrics = ''
for verse in verses:
text = verse.text.strip()
text = re.sub(r"\[.*\]\n", "", unidecode(text))
if lyrics == '':
lyrics = lyrics + text.replace('\n', '|-|')
else:
lyrics = lyrics + '|-|' + text.replace('\n', '|-|')
songs.at[index, 'lyrics'] = lyrics
print('saving {}'.format(row['song']))
songs.head()
print('writing to .csv')
songs.to_csv(filename, sep=',', encoding='utf-8')
  我使用了一個(gè)著(zhù)名的 Python 包 BeautifulSoup 來(lái)抓取網(wǎng)頁(yè)。我使用了 Justin Yek 的教程,一個(gè)很棒的人,在五分鐘內學(xué)會(huì )了如何使用它。說(shuō)明一下,在上面的代碼中,我在循環(huán)中使用了歌曲的數據格式,因為我提前定義了我想要獲取的歌曲。
  教程:
  
  所有歌詞都存儲在DataFrame中
  運行爬蟲(chóng)后,我得到了一個(gè)csv文件,將歌詞存儲在一個(gè)合適的結構中,接下來(lái)就是對數據進(jìn)行預處理并構建模型。
  型號介紹
  現在讓我們看看模型是如何生成文本的。這部分理解很重要,因為這是真正的干貨。我將從模型設計和生成歌詞模型中的關(guān)鍵組件開(kāi)始,然后我們可以直接進(jìn)入實(shí)現階段。
  構建語(yǔ)言模型主要有兩種方式:
  1.字符級模型,
  2.詞級模型。
  兩者的主要區別在于模型的輸入和輸出。接下來(lái),我將解釋這兩個(gè)模型是如何工作的。
  字符級模型
  在字符級模型中,輸入是一個(gè)字符序列種子(seed),模型負責預測下一個(gè)字符,然后使用種子+new_char組合生成下一個(gè)字符,以此類(lèi)推。請注意,由于我們應該保持每個(gè)輸入的長(cháng)度相同,我們實(shí)際上是在輸入的每次迭代中刪除一個(gè)字符。我們可以看一個(gè)簡(jiǎn)單直觀(guān)的例子:
  
  字符級模型生成單詞的迭代過(guò)程
  在每次迭代中,模型根據給定的種子字符預測下一個(gè)最有可能生成的字符,或者使用條件概率找到概率 P(new_char|seed) 的最大值,其中 new_char 是一個(gè)字母表。
  在這個(gè)例子中,字符表是指所有英文字母和空格的集合。 (注意,字母表可以收錄不同的字母,具體取決于您的需要,主要取決于您生成的語(yǔ)言類(lèi)型)。
  詞法模型
  詞匯級別模型與字符級別模型非常相似,但它用于生成下一個(gè)單詞而不是一個(gè)字符。這是一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明這一點(diǎn):
  
  圖3.詞匯級模型生成的迭代過(guò)程
  現在在這個(gè)模型中,我們期待以單詞為單位的下一個(gè)單詞,而不是字符。因此,我們要找到概率 P(new_word|seed) 的最大值,其中 new_word 是任意詞。
  這里需要注意的是,我們在比字符級別更大的范圍內進(jìn)行搜索。在字符集模型中,我們只需要從字符表中查找大約 30 個(gè)字符,但是每次迭代搜索在詞匯表級別的范圍遠大于這個(gè)數字,所以每次迭代運行速度較慢,但??是由于我們生成了一個(gè)整體單詞而不是一個(gè)字符,所以也不錯。
  關(guān)于詞匯級別模型的最后一點(diǎn)是,我們可以通過(guò)在數據集中搜索獨特詞匯來(lái)生成更多樣化的詞匯(此步驟通常在數據預處理階段完成)。由于詞匯量可以無(wú)限大,我們其實(shí)有很多算法來(lái)提高詞匯生成的性能,比如詞嵌入,不過(guò)我可以在這個(gè)問(wèn)題上再寫(xiě)一個(gè)文章@>。
  本文文章@>主要關(guān)注字符級模型,因為它更容易實(shí)現和理解,也更容易轉化為復雜的詞法級模型。
  數據預處理
  對于字符級模型,我們將進(jìn)行如下數據預處理:
  1.標記字符
  對于字符級模型,輸入應該基于字符而不是字符串。所以,我們先把每一行歌詞變成一個(gè)字符的集合。
  2。定義字符表
  在上一步中,我們得到了歌詞中所有可能的字符,現在我們需要找到所有唯一的字符。由于整個(gè)數據集不大(只有140首歌曲),為簡(jiǎn)單起見(jiàn),我只保留所有英文字母和一些特殊符號(如空格),而忽略數字等信息(因為數據集很小,我寧愿讓模型預測更少的字符)。
  3.創(chuàng )建訓練序列
  這里我們將使用滑動(dòng)窗口的概念。通過(guò)沿著(zhù)句子拖動(dòng)一個(gè)固定長(cháng)度的窗口,我們將構建用于訓練的數據序列。下圖是滑動(dòng)窗口操作的一個(gè)很好的例子:
  
  圖4.使用滑動(dòng)窗口獲取輸入/輸出
  通過(guò)一次翻譯一個(gè)字符,我們得到一個(gè)長(cháng)度為 20 個(gè)字符的模型輸入和一個(gè)長(cháng)度為 1 個(gè)字符的模型輸出。一次只轉換一個(gè)網(wǎng)格的另一個(gè)好處是它極大地擴展了數據集的大小。
  4.帶注釋的編碼訓練序列
  最后,我們不想直接處理原創(chuàng )字符(雖然理論上每個(gè)字符都是一個(gè)數字,所以你也可以說(shuō) ASCII 已經(jīng)為我們完成了每個(gè)字符的編碼)。我們要做的就是用一個(gè)唯一的數字與每個(gè)字符一一對應,這一步就是所謂的標簽編碼。同時(shí),我們要建立兩個(gè)非常重要的映射:character-to-index(字符到索引)和index-to-character(索引到字符)。通過(guò)這兩個(gè)映射,我們可以將字母表中的任意一個(gè)字符編碼成對應的數字,同樣的,我們也可以解碼模型輸出的數字索引,得到對應的字符。
  5.數據集的one-hot編碼
  因為我們使用的是分類(lèi)數據,也就是說(shuō)所有的字符都可以歸為某一類(lèi),所以我們會(huì )將字符編碼成輸入列的形式。
  當我們完成以上五個(gè)步驟后,我們就基本完成了,接下來(lái)我們只需要構建和訓練模型即可。如果您想深入了解更多細節,這里是五個(gè)步驟的代碼供參考。
  
  3.建立模型
  我們將使用循環(huán)神經(jīng)網(wǎng)絡(luò ) (RNN),更具體地說(shuō)是長(cháng)短期記憶 (LSTM) 網(wǎng)絡(luò ),根據先前呈現的字符集預測下一個(gè)字符。如果這兩個(gè)概念聽(tīng)起來(lái)不熟悉,我還提供了相關(guān)概念的快速復習:
  RNN 快速回顧
  通常,您看到的網(wǎng)絡(luò )是一個(gè)網(wǎng)格,從許多點(diǎn)匯聚到一個(gè)輸出。如下圖:
  
  圖5.神經(jīng)網(wǎng)絡(luò )圖
  這里的神經(jīng)網(wǎng)絡(luò )是單點(diǎn)輸入和單點(diǎn)輸出。它適用于輸入不連續的情況,因為輸入的順序不影響輸出。但是在我們的例子中,輸入字符的順序很重要,因為順序決定了對應的單詞。
  RNN可以接收連續輸入,將前一個(gè)節點(diǎn)的輸出作為參數輸入到下一個(gè)節點(diǎn),從而解決輸入順序問(wèn)題。
  
  圖6.簡(jiǎn)單的RNN示意圖
  例如,基于序列 Tryna_keep_it_simple,提取的下一個(gè)字符應該是_。這正是我們希望我們的神經(jīng)網(wǎng)絡(luò )做的事情。神經(jīng)網(wǎng)絡(luò )的輸入會(huì )是 T?—?> x, r -> x, n -> x... e-> x ,對應的輸出字符是空格 y -> _ 。
  LSTM 快速回顧
  簡(jiǎn)單的 RNN 網(wǎng)絡(luò )仍然存在一些問(wèn)題,它不擅長(cháng)將非常前端的單元格信息傳遞給后端單元格。例如,Tryna keep it simple 句子中的最后一個(gè)詞 me 對我來(lái)說(shuō)是一個(gè)掙扎,如果不回顧它之前出現的詞(可能預測為 Baka、cat、potato 等),很難預測。
  LSTM 可以很好地解決這個(gè)問(wèn)題,它在每個(gè)單元格中存儲了部分之前的事件信息(即之前的單詞)。如下圖:
  
  圖7. LSTM 圖,取自 Andrew Ng 的深度學(xué)習課程
  不僅傳遞了前一個(gè)單元格的輸出a,而且收錄前一個(gè)單元格的輸入信息的c也作為下一個(gè)單元格的輸入的一部分。這使 LSTM 能夠更好地保留上下文信息,并且適用于語(yǔ)言建模預測。
  編程建模
  之前學(xué)過(guò)一點(diǎn)Keras,所以這次會(huì )用Keras作為框架來(lái)編程搭建模型。其實(shí)也可以選擇自己搭建模型框架,不過(guò)這樣會(huì )比較費時(shí)間。
  # create sequential network, because we are passing activations
# down the network
model = Sequential()
# add LSTM layer
model.add(LSTM(128, input_shape=(maxlen, len(chars))))
# add Softmax layer to output one character
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
# compile the model and pick the loss and optimizer
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=0.01))
# train the model
model.fit(x, y, batch_size=128, epochs=30)
  從上圖可以看出,我們構建了LSTM模型,使用了批處理,使用數據子集進(jìn)行批量訓練,而不是一次性輸入所有數據,這樣可以稍微提高訓練速度。
  4、生成歌詞
  訓練完模型,我們來(lái)介紹下如何生成下一個(gè)字符。我們首先使用用戶(hù)輸入的簡(jiǎn)單字符串作為隨機種子。接下來(lái),我們使用種子作為網(wǎng)絡(luò )的輸入來(lái)預測下一個(gè)字符,并重復這個(gè)過(guò)程,直到我們生成一些新的歌詞,類(lèi)似于圖 2 所示的歌詞。
  以下是生成歌詞的一些示例。
  注意:這些歌詞均未經(jīng)過(guò)審核,請在閱讀時(shí)自行檢查。
  
  
  
  
  
  您可能會(huì )注意到某些生成的單詞是無(wú)意義的,這是字符級模型的常見(jiàn)問(wèn)題。這是因為輸入序列經(jīng)常在單詞中間被截斷,從而使神經(jīng)網(wǎng)絡(luò )模型能夠學(xué)習并生成對其輸入有意義但對我們來(lái)說(shuō)看起來(lái)很奇怪的新單詞。
  這也是詞法級模型可以解決的問(wèn)題,但是對于僅用200行代碼構建的模型,字符級模型達到的效果還是很可觀(guān)的。
  其他應用
  此處演示的字符級模型的歌詞預測功能可以擴展到其他更有用的應用程序。
  例如,可以使用相同的原理來(lái)預測 iPhone 鍵盤(pán)上要輸入的下一個(gè)單詞。
  
  圖8.鍵盤(pán)輸入預測下一個(gè)單詞
  想象一下,如果你構建一個(gè)高精度的 Python 語(yǔ)言模型,它不僅可以自動(dòng)填寫(xiě) 關(guān)鍵詞 或變量名,還可以填寫(xiě)大段代碼,這將幫助程序員節省大量時(shí)間!
  您可能還注意到文本中的代碼不完整,并且缺少一些片段。請到我的 Github 了解更多詳情并學(xué)習構建自己的項目模型。
  Github 鏈接:
  相關(guān)報道: 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
AI社區搭建出所謂語(yǔ)言模型的前提是學(xué)習數據的原因)
  
  由大數據文摘出品
  合輯:非、倪妮、什錦甜、錢(qián)天培
  人工智能未來(lái)的一個(gè)主要應用將是構建可以從數據中學(xué)習然后生成原創(chuàng )內容的網(wǎng)絡(luò )。這個(gè)思想已經(jīng)在自然語(yǔ)言處理(NLP)領(lǐng)域得到了充分的應用,這也是為什么AI社區可以構建所謂的語(yǔ)言模型:語(yǔ)言模型的前提是學(xué)習文章@中的句子結構> 段落,從而生成新的內容。
  在這個(gè)文章@>我想嘗試生成類(lèi)似于非常流行的加拿大說(shuō)唱歌手德雷克(又名#6god)風(fēng)格的說(shuō)唱歌詞,一定很有趣。
  另外,我也想分享一下通用的機器學(xué)習項目流水線(xiàn),因為我發(fā)現很多同學(xué)想做一些小項目,但是不知道從哪里開(kāi)始。
  獲取數據
  首先,我們開(kāi)始采集 Drake 的音樂(lè )庫。為了節省時(shí)間,我寫(xiě)了一個(gè)爬蟲(chóng)來(lái)抓取網(wǎng)絡(luò )上的歌詞。
  import urllib.request as urllib2
from bs4 import BeautifulSoup
import pandas as pd
import re
from unidecode import unidecode
quote_page = 'http://metrolyrics.com/{}-lyrics-drake.html'
filename = 'drake-songs.csv'
songs = pd.read_csv(filename)
for index, row in songs.iterrows():
page = urllib2.urlopen(quote_page.format(row['song']))
soup = BeautifulSoup(page, 'html.parser')
verses = soup.find_all('p', attrs={'class': 'verse'})
lyrics = ''
for verse in verses:
text = verse.text.strip()
text = re.sub(r"\[.*\]\n", "", unidecode(text))
if lyrics == '':
lyrics = lyrics + text.replace('\n', '|-|')
else:
lyrics = lyrics + '|-|' + text.replace('\n', '|-|')
songs.at[index, 'lyrics'] = lyrics
print('saving {}'.format(row['song']))
songs.head()
print('writing to .csv')
songs.to_csv(filename, sep=',', encoding='utf-8')
  我使用了一個(gè)著(zhù)名的 Python 包 BeautifulSoup 來(lái)抓取網(wǎng)頁(yè)。我使用了 Justin Yek 的教程,一個(gè)很棒的人,在五分鐘內學(xué)會(huì )了如何使用它。說(shuō)明一下,在上面的代碼中,我在循環(huán)中使用了歌曲的數據格式,因為我提前定義了我想要獲取的歌曲。
  教程:
  
  所有歌詞都存儲在DataFrame中
  運行爬蟲(chóng)后,我得到了一個(gè)csv文件,將歌詞存儲在一個(gè)合適的結構中,接下來(lái)就是對數據進(jìn)行預處理并構建模型。
  型號介紹
  現在讓我們看看模型是如何生成文本的。這部分理解很重要,因為這是真正的干貨。我將從模型設計和生成歌詞模型中的關(guān)鍵組件開(kāi)始,然后我們可以直接進(jìn)入實(shí)現階段。
  構建語(yǔ)言模型主要有兩種方式:
  1.字符級模型,
  2.詞級模型。
  兩者的主要區別在于模型的輸入和輸出。接下來(lái),我將解釋這兩個(gè)模型是如何工作的。
  字符級模型
  在字符級模型中,輸入是一個(gè)字符序列種子(seed),模型負責預測下一個(gè)字符,然后使用種子+new_char組合生成下一個(gè)字符,以此類(lèi)推。請注意,由于我們應該保持每個(gè)輸入的長(cháng)度相同,我們實(shí)際上是在輸入的每次迭代中刪除一個(gè)字符。我們可以看一個(gè)簡(jiǎn)單直觀(guān)的例子:
  
  字符級模型生成單詞的迭代過(guò)程
  在每次迭代中,模型根據給定的種子字符預測下一個(gè)最有可能生成的字符,或者使用條件概率找到概率 P(new_char|seed) 的最大值,其中 new_char 是一個(gè)字母表。
  在這個(gè)例子中,字符表是指所有英文字母和空格的集合。 (注意,字母表可以收錄不同的字母,具體取決于您的需要,主要取決于您生成的語(yǔ)言類(lèi)型)。
  詞法模型
  詞匯級別模型與字符級別模型非常相似,但它用于生成下一個(gè)單詞而不是一個(gè)字符。這是一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明這一點(diǎn):
  
  圖3.詞匯級模型生成的迭代過(guò)程
  現在在這個(gè)模型中,我們期待以單詞為單位的下一個(gè)單詞,而不是字符。因此,我們要找到概率 P(new_word|seed) 的最大值,其中 new_word 是任意詞。
  這里需要注意的是,我們在比字符級別更大的范圍內進(jìn)行搜索。在字符集模型中,我們只需要從字符表中查找大約 30 個(gè)字符,但是每次迭代搜索在詞匯表級別的范圍遠大于這個(gè)數字,所以每次迭代運行速度較慢,但??是由于我們生成了一個(gè)整體單詞而不是一個(gè)字符,所以也不錯。
  關(guān)于詞匯級別模型的最后一點(diǎn)是,我們可以通過(guò)在數據集中搜索獨特詞匯來(lái)生成更多樣化的詞匯(此步驟通常在數據預處理階段完成)。由于詞匯量可以無(wú)限大,我們其實(shí)有很多算法來(lái)提高詞匯生成的性能,比如詞嵌入,不過(guò)我可以在這個(gè)問(wèn)題上再寫(xiě)一個(gè)文章@>。
  本文文章@>主要關(guān)注字符級模型,因為它更容易實(shí)現和理解,也更容易轉化為復雜的詞法級模型。
  數據預處理
  對于字符級模型,我們將進(jìn)行如下數據預處理:
  1.標記字符
  對于字符級模型,輸入應該基于字符而不是字符串。所以,我們先把每一行歌詞變成一個(gè)字符的集合。
  2。定義字符表
  在上一步中,我們得到了歌詞中所有可能的字符,現在我們需要找到所有唯一的字符。由于整個(gè)數據集不大(只有140首歌曲),為簡(jiǎn)單起見(jiàn),我只保留所有英文字母和一些特殊符號(如空格),而忽略數字等信息(因為數據集很小,我寧愿讓模型預測更少的字符)。
  3.創(chuàng )建訓練序列
  這里我們將使用滑動(dòng)窗口的概念。通過(guò)沿著(zhù)句子拖動(dòng)一個(gè)固定長(cháng)度的窗口,我們將構建用于訓練的數據序列。下圖是滑動(dòng)窗口操作的一個(gè)很好的例子:
  
  圖4.使用滑動(dòng)窗口獲取輸入/輸出
  通過(guò)一次翻譯一個(gè)字符,我們得到一個(gè)長(cháng)度為 20 個(gè)字符的模型輸入和一個(gè)長(cháng)度為 1 個(gè)字符的模型輸出。一次只轉換一個(gè)網(wǎng)格的另一個(gè)好處是它極大地擴展了數據集的大小。
  4.帶注釋的編碼訓練序列
  最后,我們不想直接處理原創(chuàng )字符(雖然理論上每個(gè)字符都是一個(gè)數字,所以你也可以說(shuō) ASCII 已經(jīng)為我們完成了每個(gè)字符的編碼)。我們要做的就是用一個(gè)唯一的數字與每個(gè)字符一一對應,這一步就是所謂的標簽編碼。同時(shí),我們要建立兩個(gè)非常重要的映射:character-to-index(字符到索引)和index-to-character(索引到字符)。通過(guò)這兩個(gè)映射,我們可以將字母表中的任意一個(gè)字符編碼成對應的數字,同樣的,我們也可以解碼模型輸出的數字索引,得到對應的字符。
  5.數據集的one-hot編碼
  因為我們使用的是分類(lèi)數據,也就是說(shuō)所有的字符都可以歸為某一類(lèi),所以我們會(huì )將字符編碼成輸入列的形式。
  當我們完成以上五個(gè)步驟后,我們就基本完成了,接下來(lái)我們只需要構建和訓練模型即可。如果您想深入了解更多細節,這里是五個(gè)步驟的代碼供參考。
  
  3.建立模型
  我們將使用循環(huán)神經(jīng)網(wǎng)絡(luò ) (RNN),更具體地說(shuō)是長(cháng)短期記憶 (LSTM) 網(wǎng)絡(luò ),根據先前呈現的字符集預測下一個(gè)字符。如果這兩個(gè)概念聽(tīng)起來(lái)不熟悉,我還提供了相關(guān)概念的快速復習:
  RNN 快速回顧
  通常,您看到的網(wǎng)絡(luò )是一個(gè)網(wǎng)格,從許多點(diǎn)匯聚到一個(gè)輸出。如下圖:
  
  圖5.神經(jīng)網(wǎng)絡(luò )圖
  這里的神經(jīng)網(wǎng)絡(luò )是單點(diǎn)輸入和單點(diǎn)輸出。它適用于輸入不連續的情況,因為輸入的順序不影響輸出。但是在我們的例子中,輸入字符的順序很重要,因為順序決定了對應的單詞。
  RNN可以接收連續輸入,將前一個(gè)節點(diǎn)的輸出作為參數輸入到下一個(gè)節點(diǎn),從而解決輸入順序問(wèn)題。
  
  圖6.簡(jiǎn)單的RNN示意圖
  例如,基于序列 Tryna_keep_it_simple,提取的下一個(gè)字符應該是_。這正是我們希望我們的神經(jīng)網(wǎng)絡(luò )做的事情。神經(jīng)網(wǎng)絡(luò )的輸入會(huì )是 T?—?> x, r -> x, n -> x... e-> x ,對應的輸出字符是空格 y -> _ 。
  LSTM 快速回顧
  簡(jiǎn)單的 RNN 網(wǎng)絡(luò )仍然存在一些問(wèn)題,它不擅長(cháng)將非常前端的單元格信息傳遞給后端單元格。例如,Tryna keep it simple 句子中的最后一個(gè)詞 me 對我來(lái)說(shuō)是一個(gè)掙扎,如果不回顧它之前出現的詞(可能預測為 Baka、cat、potato 等),很難預測。
  LSTM 可以很好地解決這個(gè)問(wèn)題,它在每個(gè)單元格中存儲了部分之前的事件信息(即之前的單詞)。如下圖:
  
  圖7. LSTM 圖,取自 Andrew Ng 的深度學(xué)習課程
  不僅傳遞了前一個(gè)單元格的輸出a,而且收錄前一個(gè)單元格的輸入信息的c也作為下一個(gè)單元格的輸入的一部分。這使 LSTM 能夠更好地保留上下文信息,并且適用于語(yǔ)言建模預測。
  編程建模
  之前學(xué)過(guò)一點(diǎn)Keras,所以這次會(huì )用Keras作為框架來(lái)編程搭建模型。其實(shí)也可以選擇自己搭建模型框架,不過(guò)這樣會(huì )比較費時(shí)間。
  # create sequential network, because we are passing activations
# down the network
model = Sequential()
# add LSTM layer
model.add(LSTM(128, input_shape=(maxlen, len(chars))))
# add Softmax layer to output one character
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
# compile the model and pick the loss and optimizer
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=0.01))
# train the model
model.fit(x, y, batch_size=128, epochs=30)
  從上圖可以看出,我們構建了LSTM模型,使用了批處理,使用數據子集進(jìn)行批量訓練,而不是一次性輸入所有數據,這樣可以稍微提高訓練速度。
  4、生成歌詞
  訓練完模型,我們來(lái)介紹下如何生成下一個(gè)字符。我們首先使用用戶(hù)輸入的簡(jiǎn)單字符串作為隨機種子。接下來(lái),我們使用種子作為網(wǎng)絡(luò )的輸入來(lái)預測下一個(gè)字符,并重復這個(gè)過(guò)程,直到我們生成一些新的歌詞,類(lèi)似于圖 2 所示的歌詞。
  以下是生成歌詞的一些示例。
  注意:這些歌詞均未經(jīng)過(guò)審核,請在閱讀時(shí)自行檢查。
  
  
  
  
  
  您可能會(huì )注意到某些生成的單詞是無(wú)意義的,這是字符級模型的常見(jiàn)問(wèn)題。這是因為輸入序列經(jīng)常在單詞中間被截斷,從而使神經(jīng)網(wǎng)絡(luò )模型能夠學(xué)習并生成對其輸入有意義但對我們來(lái)說(shuō)看起來(lái)很奇怪的新單詞。
  這也是詞法級模型可以解決的問(wèn)題,但是對于僅用200行代碼構建的模型,字符級模型達到的效果還是很可觀(guān)的。
  其他應用
  此處演示的字符級模型的歌詞預測功能可以擴展到其他更有用的應用程序。
  例如,可以使用相同的原理來(lái)預測 iPhone 鍵盤(pán)上要輸入的下一個(gè)單詞。
  
  圖8.鍵盤(pán)輸入預測下一個(gè)單詞
  想象一下,如果你構建一個(gè)高精度的 Python 語(yǔ)言模型,它不僅可以自動(dòng)填寫(xiě) 關(guān)鍵詞 或變量名,還可以填寫(xiě)大段代碼,這將幫助程序員節省大量時(shí)間!
  您可能還注意到文本中的代碼不完整,并且缺少一些片段。請到我的 Github 了解更多詳情并學(xué)習構建自己的項目模型。
  Github 鏈接:
  相關(guān)報道:

抓取網(wǎng)頁(yè)生成電子書(shū)(這款網(wǎng)絡(luò )書(shū)籍器綠色版怎么拯救你的網(wǎng)上書(shū)籍下載工具?)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 441 次瀏覽 ? 2022-04-19 06:13 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(這款網(wǎng)絡(luò )書(shū)籍器綠色版怎么拯救你的網(wǎng)上書(shū)籍下載工具?)
  當你喜歡小說(shuō)卻下載不了的時(shí)候,你會(huì )不會(huì )覺(jué)得不舒服?別慌,這款網(wǎng)絡(luò )圖書(shū)采集器綠色版來(lái)救你了,作為一款簡(jiǎn)單好用的網(wǎng)絡(luò )圖書(shū)下載工具,本軟件主要用于采集網(wǎng)絡(luò )小說(shuō)生成文本文件。您可以提取和調整指定小說(shuō)目錄頁(yè)面的章節信息,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。并且爬取過(guò)程可以隨時(shí)中斷,程序關(guān)閉后可以繼續上一個(gè)任務(wù),不用擔心意外原因導致的錯誤。而且,本站提供的在線(xiàn)圖書(shū)抓取器綠色版無(wú)需安裝。解壓運行后即可使用,方便快捷。
  
  特色1、章節調整
  目錄解壓后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響最終的書(shū)籍和調整章節順序的輸出。
  2、自動(dòng)重試
  在爬取過(guò)程中,可能會(huì )因為網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
  3、停止并恢復
  抓取過(guò)程可以隨時(shí)停止,退出程序后仍能保證進(jìn)度(章節信息會(huì )保存在記錄中,下次運行程序后即可恢復抓取。注意:需要退出程序前使用停止鍵中斷程序,直接退出不會(huì )恢復)。
  4、一鍵抓取
  又稱(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的 URL、save bit 等信息(會(huì )有明顯的操作提示)。調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站
  已錄入10個(gè)適用的網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到需要的書(shū)籍),也可自動(dòng)申請相應的代碼,其他小說(shuō)網(wǎng)站 也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中進(jìn)行備份。
  6、輕松制作電子書(shū)
  每個(gè)章節名稱(chēng)的前綴和后綴都可以添加到設置文件中,為后期制作電子書(shū)的編目帶來(lái)了極大的方便。使用方法1、點(diǎn)擊本站下載解壓。
  
  2、點(diǎn)擊應用打開(kāi)。
  3、進(jìn)入要下載的小說(shuō)網(wǎng)頁(yè),輸入書(shū)名,點(diǎn)擊目錄解壓。
  4、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
  
  Changelog Web Book Grabber v1.4 (2020-5-16)
  1、優(yōu)化界面體驗。
  2、修復了一些已知的錯誤。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(這款網(wǎng)絡(luò )書(shū)籍器綠色版怎么拯救你的網(wǎng)上書(shū)籍下載工具?)
  當你喜歡小說(shuō)卻下載不了的時(shí)候,你會(huì )不會(huì )覺(jué)得不舒服?別慌,這款網(wǎng)絡(luò )圖書(shū)采集器綠色版來(lái)救你了,作為一款簡(jiǎn)單好用的網(wǎng)絡(luò )圖書(shū)下載工具,本軟件主要用于采集網(wǎng)絡(luò )小說(shuō)生成文本文件。您可以提取和調整指定小說(shuō)目錄頁(yè)面的章節信息,然后按照章節順序抓取小說(shuō)內容,然后將它們合并在一起。并且爬取過(guò)程可以隨時(shí)中斷,程序關(guān)閉后可以繼續上一個(gè)任務(wù),不用擔心意外原因導致的錯誤。而且,本站提供的在線(xiàn)圖書(shū)抓取器綠色版無(wú)需安裝。解壓運行后即可使用,方便快捷。
  
  特色1、章節調整
  目錄解壓后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響最終的書(shū)籍和調整章節順序的輸出。
  2、自動(dòng)重試
  在爬取過(guò)程中,可能會(huì )因為網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好后再試。
  3、停止并恢復
  抓取過(guò)程可以隨時(shí)停止,退出程序后仍能保證進(jìn)度(章節信息會(huì )保存在記錄中,下次運行程序后即可恢復抓取。注意:需要退出程序前使用停止鍵中斷程序,直接退出不會(huì )恢復)。
  4、一鍵抓取
  又稱(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的 URL、save bit 等信息(會(huì )有明顯的操作提示)。調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站
  已錄入10個(gè)適用的網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到需要的書(shū)籍),也可自動(dòng)申請相應的代碼,其他小說(shuō)網(wǎng)站 也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中進(jìn)行備份。
  6、輕松制作電子書(shū)
  每個(gè)章節名稱(chēng)的前綴和后綴都可以添加到設置文件中,為后期制作電子書(shū)的編目帶來(lái)了極大的方便。使用方法1、點(diǎn)擊本站下載解壓。
  
  2、點(diǎn)擊應用打開(kāi)。
  3、進(jìn)入要下載的小說(shuō)網(wǎng)頁(yè),輸入書(shū)名,點(diǎn)擊目錄解壓。
  4、設置保存路徑,點(diǎn)擊Start Grab開(kāi)始下載。
  
  Changelog Web Book Grabber v1.4 (2020-5-16)
  1、優(yōu)化界面體驗。
  2、修復了一些已知的錯誤。

抓取網(wǎng)頁(yè)生成電子書(shū)(web不再的攻防角度來(lái)講程序是危害web原創(chuàng )生態(tài)的一大元兇)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-04-19 06:12 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(web不再的攻防角度來(lái)講程序是危害web原創(chuàng )生態(tài)的一大元兇)
  網(wǎng)絡(luò )是一個(gè)開(kāi)放的平臺,它為網(wǎng)絡(luò )從1990年代初誕生到今天的蓬勃發(fā)展奠定了基礎。然而,所謂的成敗也很小,開(kāi)放的特性、搜索引擎、簡(jiǎn)單易學(xué)的html和css技術(shù),讓web成為了互聯(lián)網(wǎng)領(lǐng)域最流行、最成熟的信息傳播媒介;但是現在作為商業(yè)軟件,web是平臺上的內容信息的版權是不能保證的,因為與軟件客戶(hù)端相比,你的網(wǎng)頁(yè)內容可以通過(guò)一些爬蟲(chóng)程序以非常低的成本實(shí)現,并且技術(shù)門(mén)檻很低,這也是本系列文章要討論的——網(wǎng)絡(luò )爬蟲(chóng)。
  
  有很多人認為,網(wǎng)絡(luò )應該始終遵循開(kāi)放的精神,頁(yè)面上呈現的信息應該毫無(wú)保留地與整個(gè)互聯(lián)網(wǎng)共享。但是,我認為隨著(zhù)今天IT行業(yè)的發(fā)展,網(wǎng)絡(luò )不再是當年與pdf競爭的所謂“超文本”信息載體。它已經(jīng)基于輕量級客戶(hù)端軟件的思想。存在。隨著(zhù)商業(yè)軟件的發(fā)展,網(wǎng)絡(luò )也不得不面對知識產(chǎn)權保護的問(wèn)題。試想一下,如果原創(chuàng )的優(yōu)質(zhì)內容不受保護,網(wǎng)絡(luò )世界中抄襲盜版猖獗,這其實(shí)有利于網(wǎng)絡(luò )生態(tài)的健康發(fā)展。這是一個(gè)缺點(diǎn),而且它'
  未經(jīng)授權的爬蟲(chóng)程序是危害web原創(chuàng )內容生態(tài)的罪魁禍首。因此,為了保護網(wǎng)站的內容,首先要考慮如何反爬。
  從爬行動(dòng)物的攻防來(lái)看
  最簡(jiǎn)單的爬蟲(chóng)是幾乎所有服務(wù)器端和客戶(hù)端編程語(yǔ)言都支持的 http 請求。只要對目標頁(yè)面的url進(jìn)行http get請求,就可以獲得瀏覽器加載頁(yè)面時(shí)的完整html文檔。我們稱(chēng)之為“同步頁(yè)面”。
  作為防御方,服務(wù)器可以根據http請求頭中的User-Agent檢查客戶(hù)端是合法的瀏覽器程序還是腳本爬蟲(chóng),從而決定是否使用真實(shí)的頁(yè)面信息內容發(fā)送給你。
  這當然是兒科最小的防御方法。作為進(jìn)攻方,爬蟲(chóng)完全可以偽造User-Agent字段。甚至,只要你愿意,在http的get方法中,請求頭的Referrer、Cookie等所有字段都可以被爬蟲(chóng)輕松處理。偽造。
  這時(shí),服務(wù)器就可以根據你聲明的瀏覽器廠(chǎng)商和版本(來(lái)自User-Agent),使用瀏覽器http頭指紋來(lái)識別你http頭中的每個(gè)字段是否符合瀏覽器的特性。如果匹配,它將被視為爬蟲(chóng)。該技術(shù)的一個(gè)典型應用是在 PhantomJS 1.x 版本中,由于底層調用了 Qt 框架的網(wǎng)絡(luò )庫,http 頭具有明顯的 Qt 框架的網(wǎng)絡(luò )請求特征,可以服務(wù)器直接識別。并被攔截。
  另外,還有一個(gè)比較異常的服務(wù)器端爬蟲(chóng)檢測機制,就是在http響應中為所有訪(fǎng)問(wèn)該頁(yè)面的http請求種上一個(gè)cookie token,然后在這個(gè)異步執行的一些ajax接口上學(xué)頁(yè)。檢查訪(fǎng)問(wèn)請求中是否收錄cookie token,返回token表示這是一次合法的瀏覽器訪(fǎng)問(wèn),否則表示剛剛發(fā)出token的用戶(hù)訪(fǎng)問(wèn)了頁(yè)面html但沒(méi)有訪(fǎng)問(wèn)執行js后調用的ajax在 html 請求中,很可能是爬蟲(chóng)。
  如果你不帶token直接訪(fǎng)問(wèn)一個(gè)接口,說(shuō)明你沒(méi)有請求過(guò)html頁(yè)面,而是直接向頁(yè)面中應該通過(guò)ajax訪(fǎng)問(wèn)的接口發(fā)起網(wǎng)絡(luò )請求,這顯然證明你是一個(gè)可疑的爬蟲(chóng)。知名電子商務(wù)公司網(wǎng)站亞馬遜采用了這種防御策略。
  以上是基于服務(wù)器端驗證爬蟲(chóng)程序可以玩的一些套路。
  基于客戶(hù)端js運行時(shí)的檢測
  現代瀏覽器賦予 JavaScript 強大的能力,所以我們可以將頁(yè)面的所有核心內容作為 js 異步請求 ajax 獲取數據然后渲染到頁(yè)面中,這顯然提高了爬取內容的門(mén)檻。這樣,我們就將爬蟲(chóng)和反爬的戰斗從服務(wù)端轉移到了客戶(hù)端瀏覽器中的js運行時(shí)。接下來(lái)說(shuō)一下結合客戶(hù)端js運行時(shí)的爬取技術(shù)。
  剛才提到的各種服務(wù)器端驗證,對于普通的python和java語(yǔ)言編寫(xiě)的HTTP爬蟲(chóng)程序,都有一定的技術(shù)門(mén)檻。畢竟,Web 應用程序是未經(jīng)授權的抓取工具的黑匣子。很多東西都需要一點(diǎn)一點(diǎn)的去嘗試,而一套耗費大量人力物力開(kāi)發(fā)的爬蟲(chóng)程序,只要網(wǎng)站作為防御者可以輕松調整一些策略,攻擊者也需要花費同樣的時(shí)間再次修改爬蟲(chóng)的爬取邏輯。
  此時(shí),您需要使用無(wú)頭瀏覽器。這是什么技術(shù)?其實(shí)說(shuō)白了就是程序可以操作瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè),這樣寫(xiě)爬蟲(chóng)的人就可以通過(guò)調用瀏覽器暴露給程序的API來(lái)實(shí)現復雜的爬取業(yè)務(wù)邏輯。
  事實(shí)上,這并不是近年來(lái)的新技術(shù)。曾經(jīng)有基于webkit內核的PhantomJS,基于火狐瀏覽器內核的SlimerJS,甚至還有基于IE內核的trifleJS。如果你有興趣,可以看看這里和這里有兩個(gè)無(wú)頭瀏覽器采集列表。
  這些無(wú)頭瀏覽器程序的原理其實(shí)就是對一些開(kāi)源瀏覽器內核C++代碼進(jìn)行改造和封裝,實(shí)現一個(gè)無(wú)需GUI界面渲染的簡(jiǎn)單瀏覽器程序。但是這些項目的通病是因為他們的代碼是基于fork官方webkit和其他內核的某個(gè)版本的trunk代碼,所以跟不上一些最新的css屬性和js語(yǔ)法,還有一些兼容性問(wèn)題,不如真實(shí)的GUI瀏覽器發(fā)行版運行穩定。
  其中,最成熟、用得最多的應該是PhantonJS。之前寫(xiě)過(guò)一篇關(guān)于這種爬蟲(chóng)識別的博客,這里不再贅述。PhantomJS 有很多問(wèn)題,因為它是單進(jìn)程模型,沒(méi)有必要的沙箱保護,瀏覽器內核的安全性較差。此外,該項目的作者已經(jīng)宣布他們將停止維護這個(gè)項目。
  現在谷歌瀏覽器團隊已經(jīng)在 Chrome 59 發(fā)布版本中開(kāi)放了 headless mode api,并開(kāi)源了一個(gè)基于 Node.js 調用的 headless chromium dirver 庫。我還為這個(gè)庫貢獻了一個(gè)centos環(huán)境部署依賴(lài)安裝列表。
  Headless Chrome 可以說(shuō)是 Headless Browser 中獨一無(wú)二的殺手锏。由于它本身就是一個(gè) chrome 瀏覽器,它支持各種新的 CSS 渲染特性和 js 運行時(shí)語(yǔ)法。
  基于這種方法,爬蟲(chóng)作為攻擊方可以繞過(guò)幾乎所有的服務(wù)器端驗證邏輯,但是這些爬蟲(chóng)在客戶(hù)端js運行時(shí)仍然存在一些缺陷,例如:
  基于插件對象的檢查
  if(navigator.plugins.length === 0) {
console.log('It may be Chrome headless');
}
復制代碼
  基于語(yǔ)言的檢查
  if(navigator.languages === '') {
console.log('Chrome headless detected');
}
復制代碼
  基于 webgl 的檢查
  var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if(vendor == 'Brian Paul' && renderer == 'Mesa OffScreen') {
console.log('Chrome headless detected');
}
復制代碼
  基于瀏覽器細線(xiàn)屬性的檢查
  if(!Modernizr['hairline']) {
console.log('It may be Chrome headless');
}
復制代碼
  檢查基于錯誤的img src屬性生成的img對象
  var body = document.getElementsByTagName('body')[0];
var image = document.createElement('img');
image.src = 'http://iloveponeydotcom32188.jg';
image.setAttribute('id', 'fakeimage');
body.appendChild(image);
image.onerror = function(){
if(image.width == 0 && image.height == 0) {
console.log('Chrome headless detected');
}
}
復制代碼
  基于以上一些瀏覽器特性的判斷,它基本上可以秒殺市面上大部分的Headless Browser程序。在這個(gè)層面上,網(wǎng)頁(yè)爬蟲(chóng)的門(mén)檻其實(shí)是提高了,要求編寫(xiě)爬蟲(chóng)程序的開(kāi)發(fā)者不得不修改瀏覽器內核的C++代碼,重新編譯一個(gè)瀏覽器,而以上特性對瀏覽器來(lái)說(shuō)是很重要的。內核的改動(dòng)其實(shí)不小,如果你嘗試過(guò)編譯Blink內核或者Gecko內核你就會(huì )明白對于一個(gè)“腳本小子”來(lái)說(shuō)是多么的難了~
  此外,我們還可以根據瀏覽器的UserAgent字段中描述的瀏覽器品牌、版本、型號信息,檢查js運行時(shí)、DOM和BOM的各個(gè)native對象的屬性和方法,觀(guān)察特性是否符合瀏覽器這個(gè)版本。設備應具備的功能。
  這種方法稱(chēng)為瀏覽器指紋識別技術(shù),它依賴(lài)于大型網(wǎng)站對各類(lèi)瀏覽器的api信息的采集。作為編寫(xiě)爬蟲(chóng)程序的攻擊者,你可以在無(wú)頭瀏覽器運行時(shí)預先注入一些js邏輯來(lái)偽造瀏覽器的特性。
  另外,在研究Robots Browser Detect using js api在瀏覽器端的時(shí)候,我們發(fā)現了一個(gè)有趣的trick??梢詫㈩A先注入的js函數偽裝成Native Function,看一下下面的代碼:
  var fakeAlert = (function(){}).bind(null);
console.log(window.alert.toString()); // function alert() { [native code] }
console.log(fakeAlert.toString()); // function () { [native code] }
復制代碼
  爬蟲(chóng)攻擊者可能會(huì )預先注入一些js方法,用一層代理函數作為鉤子包裹一些原生api,然后用這個(gè)假的js api覆蓋原生api。如果防御者在函數 toString 之后基于對 [native code] 的檢查來(lái)檢查這一點(diǎn),它將被繞過(guò)。所以需要更嚴格的檢查,因為bind(null) fake方法在toString之后沒(méi)有函數名,所以需要檢查toString之后的函數名是否為空。
  這個(gè)技巧有什么用?在這里延伸一下,反爬蟲(chóng)防御者有一個(gè)Robot Detect方法,就是在js運行的時(shí)候主動(dòng)拋出一個(gè)alert。文案可以寫(xiě)一些業(yè)務(wù)邏輯相關(guān)的。當普通用戶(hù)點(diǎn)擊OK按鈕時(shí),肯定會(huì )有1s甚至是alert。對于更長(cháng)的延遲,由于瀏覽器中的alert會(huì )阻塞js代碼的運行(其實(shí)在v8中,他會(huì )以類(lèi)似進(jìn)程掛起的方式掛起isolate context的執行),所以爬蟲(chóng)作為攻擊者可以選擇使用上面的竅門(mén),就是在頁(yè)面所有js運行前預先注入一段js代碼,偽造alert、prompt、confirm等所有彈窗方法。如果防御者在彈出代碼之前檢查他調用的alert方法是否仍然是原生的,則這種方式被阻止。
  對付爬行動(dòng)物的靈丹妙藥
  目前最可靠的反爬蟲(chóng)和機器人巡檢手段是驗證碼技術(shù)。但是,驗證碼并不意味著(zhù)必須強制用戶(hù)輸入一系列字母數字。還有很多基于用戶(hù)鼠標、觸摸屏(移動(dòng)端)等行為的行為驗證技術(shù)。其中,最成熟的是基于機器學(xué)習的谷歌reCAPTCHA。區分用戶(hù)和爬蟲(chóng)。
  基于以上對用戶(hù)和爬蟲(chóng)的識別和區分技術(shù),網(wǎng)站的防御者需要做的就是對該IP地址進(jìn)行封鎖或者對該IP的訪(fǎng)問(wèn)用戶(hù)施加高強度的驗證碼策略。這樣攻擊者就不得不購買(mǎi)IP代理池來(lái)捕獲網(wǎng)站信息內容,否則單個(gè)IP地址很容易被封殺,無(wú)法被捕獲。爬取和反爬取的門(mén)檻已經(jīng)提升到IP代理池的經(jīng)濟成本水平。
  機器人協(xié)議
  此外,在爬蟲(chóng)爬取技術(shù)領(lǐng)域,還有一種叫做robots協(xié)議的“白道”方式。您可以訪(fǎng)問(wèn) 網(wǎng)站 根目錄中的 /robots.txt。比如我們看一下github的robot協(xié)議。Allow 和 Disallow 聲明每個(gè) UA 爬蟲(chóng)的授權。
  然而,這只是君子之約。雖然它有法律上的好處,但它只能限制那些商業(yè)搜索引擎的蜘蛛程序,你不能限制那些“野爬愛(ài)好者”。
  寫(xiě)在最后
  網(wǎng)頁(yè)內容的爬取與對抗,注定是一場(chǎng)魔高道高的貓捉老鼠游戲。你永遠不可能用某種技術(shù)完全擋住爬蟲(chóng)的去路,你能做的就是增加攻擊。用戶(hù)爬取的成本,以及關(guān)于未經(jīng)授權的爬取行為的更準確信息。
  這篇文章中提到的驗證碼攻防其實(shí)是一個(gè)比較復雜的技術(shù)難點(diǎn)。我在這里留下一個(gè)懸念。有興趣的可以多加關(guān)注,期待后續文章的詳細闡述。
  另外,歡迎對爬蟲(chóng)感興趣的朋友關(guān)注我的開(kāi)源項目webster。該項目以Node.js結合Chrome無(wú)頭模式實(shí)現了一個(gè)高可用的網(wǎng)絡(luò )爬蟲(chóng)爬取框架。一個(gè)頁(yè)面中js和ajax渲染的所有異步內容;結合redis,實(shí)現了一個(gè)任務(wù)隊列,讓爬蟲(chóng)輕松進(jìn)行橫向和縱向分布式擴展。很容易部署,我已經(jīng)為webster提供了一個(gè)正式版的base runtime docker鏡像,如果你想先睹為快,你也可以試試這個(gè)webster demo docker image。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(web不再的攻防角度來(lái)講程序是危害web原創(chuàng )生態(tài)的一大元兇)
  網(wǎng)絡(luò )是一個(gè)開(kāi)放的平臺,它為網(wǎng)絡(luò )從1990年代初誕生到今天的蓬勃發(fā)展奠定了基礎。然而,所謂的成敗也很小,開(kāi)放的特性、搜索引擎、簡(jiǎn)單易學(xué)的html和css技術(shù),讓web成為了互聯(lián)網(wǎng)領(lǐng)域最流行、最成熟的信息傳播媒介;但是現在作為商業(yè)軟件,web是平臺上的內容信息的版權是不能保證的,因為與軟件客戶(hù)端相比,你的網(wǎng)頁(yè)內容可以通過(guò)一些爬蟲(chóng)程序以非常低的成本實(shí)現,并且技術(shù)門(mén)檻很低,這也是本系列文章要討論的——網(wǎng)絡(luò )爬蟲(chóng)。
  
  有很多人認為,網(wǎng)絡(luò )應該始終遵循開(kāi)放的精神,頁(yè)面上呈現的信息應該毫無(wú)保留地與整個(gè)互聯(lián)網(wǎng)共享。但是,我認為隨著(zhù)今天IT行業(yè)的發(fā)展,網(wǎng)絡(luò )不再是當年與pdf競爭的所謂“超文本”信息載體。它已經(jīng)基于輕量級客戶(hù)端軟件的思想。存在。隨著(zhù)商業(yè)軟件的發(fā)展,網(wǎng)絡(luò )也不得不面對知識產(chǎn)權保護的問(wèn)題。試想一下,如果原創(chuàng )的優(yōu)質(zhì)內容不受保護,網(wǎng)絡(luò )世界中抄襲盜版猖獗,這其實(shí)有利于網(wǎng)絡(luò )生態(tài)的健康發(fā)展。這是一個(gè)缺點(diǎn),而且它'
  未經(jīng)授權的爬蟲(chóng)程序是危害web原創(chuàng )內容生態(tài)的罪魁禍首。因此,為了保護網(wǎng)站的內容,首先要考慮如何反爬。
  從爬行動(dòng)物的攻防來(lái)看
  最簡(jiǎn)單的爬蟲(chóng)是幾乎所有服務(wù)器端和客戶(hù)端編程語(yǔ)言都支持的 http 請求。只要對目標頁(yè)面的url進(jìn)行http get請求,就可以獲得瀏覽器加載頁(yè)面時(shí)的完整html文檔。我們稱(chēng)之為“同步頁(yè)面”。
  作為防御方,服務(wù)器可以根據http請求頭中的User-Agent檢查客戶(hù)端是合法的瀏覽器程序還是腳本爬蟲(chóng),從而決定是否使用真實(shí)的頁(yè)面信息內容發(fā)送給你。
  這當然是兒科最小的防御方法。作為進(jìn)攻方,爬蟲(chóng)完全可以偽造User-Agent字段。甚至,只要你愿意,在http的get方法中,請求頭的Referrer、Cookie等所有字段都可以被爬蟲(chóng)輕松處理。偽造。
  這時(shí),服務(wù)器就可以根據你聲明的瀏覽器廠(chǎng)商和版本(來(lái)自User-Agent),使用瀏覽器http頭指紋來(lái)識別你http頭中的每個(gè)字段是否符合瀏覽器的特性。如果匹配,它將被視為爬蟲(chóng)。該技術(shù)的一個(gè)典型應用是在 PhantomJS 1.x 版本中,由于底層調用了 Qt 框架的網(wǎng)絡(luò )庫,http 頭具有明顯的 Qt 框架的網(wǎng)絡(luò )請求特征,可以服務(wù)器直接識別。并被攔截。
  另外,還有一個(gè)比較異常的服務(wù)器端爬蟲(chóng)檢測機制,就是在http響應中為所有訪(fǎng)問(wèn)該頁(yè)面的http請求種上一個(gè)cookie token,然后在這個(gè)異步執行的一些ajax接口上學(xué)頁(yè)。檢查訪(fǎng)問(wèn)請求中是否收錄cookie token,返回token表示這是一次合法的瀏覽器訪(fǎng)問(wèn),否則表示剛剛發(fā)出token的用戶(hù)訪(fǎng)問(wèn)了頁(yè)面html但沒(méi)有訪(fǎng)問(wèn)執行js后調用的ajax在 html 請求中,很可能是爬蟲(chóng)。
  如果你不帶token直接訪(fǎng)問(wèn)一個(gè)接口,說(shuō)明你沒(méi)有請求過(guò)html頁(yè)面,而是直接向頁(yè)面中應該通過(guò)ajax訪(fǎng)問(wèn)的接口發(fā)起網(wǎng)絡(luò )請求,這顯然證明你是一個(gè)可疑的爬蟲(chóng)。知名電子商務(wù)公司網(wǎng)站亞馬遜采用了這種防御策略。
  以上是基于服務(wù)器端驗證爬蟲(chóng)程序可以玩的一些套路。
  基于客戶(hù)端js運行時(shí)的檢測
  現代瀏覽器賦予 JavaScript 強大的能力,所以我們可以將頁(yè)面的所有核心內容作為 js 異步請求 ajax 獲取數據然后渲染到頁(yè)面中,這顯然提高了爬取內容的門(mén)檻。這樣,我們就將爬蟲(chóng)和反爬的戰斗從服務(wù)端轉移到了客戶(hù)端瀏覽器中的js運行時(shí)。接下來(lái)說(shuō)一下結合客戶(hù)端js運行時(shí)的爬取技術(shù)。
  剛才提到的各種服務(wù)器端驗證,對于普通的python和java語(yǔ)言編寫(xiě)的HTTP爬蟲(chóng)程序,都有一定的技術(shù)門(mén)檻。畢竟,Web 應用程序是未經(jīng)授權的抓取工具的黑匣子。很多東西都需要一點(diǎn)一點(diǎn)的去嘗試,而一套耗費大量人力物力開(kāi)發(fā)的爬蟲(chóng)程序,只要網(wǎng)站作為防御者可以輕松調整一些策略,攻擊者也需要花費同樣的時(shí)間再次修改爬蟲(chóng)的爬取邏輯。
  此時(shí),您需要使用無(wú)頭瀏覽器。這是什么技術(shù)?其實(shí)說(shuō)白了就是程序可以操作瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè),這樣寫(xiě)爬蟲(chóng)的人就可以通過(guò)調用瀏覽器暴露給程序的API來(lái)實(shí)現復雜的爬取業(yè)務(wù)邏輯。
  事實(shí)上,這并不是近年來(lái)的新技術(shù)。曾經(jīng)有基于webkit內核的PhantomJS,基于火狐瀏覽器內核的SlimerJS,甚至還有基于IE內核的trifleJS。如果你有興趣,可以看看這里和這里有兩個(gè)無(wú)頭瀏覽器采集列表。
  這些無(wú)頭瀏覽器程序的原理其實(shí)就是對一些開(kāi)源瀏覽器內核C++代碼進(jìn)行改造和封裝,實(shí)現一個(gè)無(wú)需GUI界面渲染的簡(jiǎn)單瀏覽器程序。但是這些項目的通病是因為他們的代碼是基于fork官方webkit和其他內核的某個(gè)版本的trunk代碼,所以跟不上一些最新的css屬性和js語(yǔ)法,還有一些兼容性問(wèn)題,不如真實(shí)的GUI瀏覽器發(fā)行版運行穩定。
  其中,最成熟、用得最多的應該是PhantonJS。之前寫(xiě)過(guò)一篇關(guān)于這種爬蟲(chóng)識別的博客,這里不再贅述。PhantomJS 有很多問(wèn)題,因為它是單進(jìn)程模型,沒(méi)有必要的沙箱保護,瀏覽器內核的安全性較差。此外,該項目的作者已經(jīng)宣布他們將停止維護這個(gè)項目。
  現在谷歌瀏覽器團隊已經(jīng)在 Chrome 59 發(fā)布版本中開(kāi)放了 headless mode api,并開(kāi)源了一個(gè)基于 Node.js 調用的 headless chromium dirver 庫。我還為這個(gè)庫貢獻了一個(gè)centos環(huán)境部署依賴(lài)安裝列表。
  Headless Chrome 可以說(shuō)是 Headless Browser 中獨一無(wú)二的殺手锏。由于它本身就是一個(gè) chrome 瀏覽器,它支持各種新的 CSS 渲染特性和 js 運行時(shí)語(yǔ)法。
  基于這種方法,爬蟲(chóng)作為攻擊方可以繞過(guò)幾乎所有的服務(wù)器端驗證邏輯,但是這些爬蟲(chóng)在客戶(hù)端js運行時(shí)仍然存在一些缺陷,例如:
  基于插件對象的檢查
  if(navigator.plugins.length === 0) {
console.log('It may be Chrome headless');
}
復制代碼
  基于語(yǔ)言的檢查
  if(navigator.languages === '') {
console.log('Chrome headless detected');
}
復制代碼
  基于 webgl 的檢查
  var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if(vendor == 'Brian Paul' && renderer == 'Mesa OffScreen') {
console.log('Chrome headless detected');
}
復制代碼
  基于瀏覽器細線(xiàn)屬性的檢查
  if(!Modernizr['hairline']) {
console.log('It may be Chrome headless');
}
復制代碼
  檢查基于錯誤的img src屬性生成的img對象
  var body = document.getElementsByTagName('body')[0];
var image = document.createElement('img');
image.src = 'http://iloveponeydotcom32188.jg';
image.setAttribute('id', 'fakeimage');
body.appendChild(image);
image.onerror = function(){
if(image.width == 0 && image.height == 0) {
console.log('Chrome headless detected');
}
}
復制代碼
  基于以上一些瀏覽器特性的判斷,它基本上可以秒殺市面上大部分的Headless Browser程序。在這個(gè)層面上,網(wǎng)頁(yè)爬蟲(chóng)的門(mén)檻其實(shí)是提高了,要求編寫(xiě)爬蟲(chóng)程序的開(kāi)發(fā)者不得不修改瀏覽器內核的C++代碼,重新編譯一個(gè)瀏覽器,而以上特性對瀏覽器來(lái)說(shuō)是很重要的。內核的改動(dòng)其實(shí)不小,如果你嘗試過(guò)編譯Blink內核或者Gecko內核你就會(huì )明白對于一個(gè)“腳本小子”來(lái)說(shuō)是多么的難了~
  此外,我們還可以根據瀏覽器的UserAgent字段中描述的瀏覽器品牌、版本、型號信息,檢查js運行時(shí)、DOM和BOM的各個(gè)native對象的屬性和方法,觀(guān)察特性是否符合瀏覽器這個(gè)版本。設備應具備的功能。
  這種方法稱(chēng)為瀏覽器指紋識別技術(shù),它依賴(lài)于大型網(wǎng)站對各類(lèi)瀏覽器的api信息的采集。作為編寫(xiě)爬蟲(chóng)程序的攻擊者,你可以在無(wú)頭瀏覽器運行時(shí)預先注入一些js邏輯來(lái)偽造瀏覽器的特性。
  另外,在研究Robots Browser Detect using js api在瀏覽器端的時(shí)候,我們發(fā)現了一個(gè)有趣的trick??梢詫㈩A先注入的js函數偽裝成Native Function,看一下下面的代碼:
  var fakeAlert = (function(){}).bind(null);
console.log(window.alert.toString()); // function alert() { [native code] }
console.log(fakeAlert.toString()); // function () { [native code] }
復制代碼
  爬蟲(chóng)攻擊者可能會(huì )預先注入一些js方法,用一層代理函數作為鉤子包裹一些原生api,然后用這個(gè)假的js api覆蓋原生api。如果防御者在函數 toString 之后基于對 [native code] 的檢查來(lái)檢查這一點(diǎn),它將被繞過(guò)。所以需要更嚴格的檢查,因為bind(null) fake方法在toString之后沒(méi)有函數名,所以需要檢查toString之后的函數名是否為空。
  這個(gè)技巧有什么用?在這里延伸一下,反爬蟲(chóng)防御者有一個(gè)Robot Detect方法,就是在js運行的時(shí)候主動(dòng)拋出一個(gè)alert。文案可以寫(xiě)一些業(yè)務(wù)邏輯相關(guān)的。當普通用戶(hù)點(diǎn)擊OK按鈕時(shí),肯定會(huì )有1s甚至是alert。對于更長(cháng)的延遲,由于瀏覽器中的alert會(huì )阻塞js代碼的運行(其實(shí)在v8中,他會(huì )以類(lèi)似進(jìn)程掛起的方式掛起isolate context的執行),所以爬蟲(chóng)作為攻擊者可以選擇使用上面的竅門(mén),就是在頁(yè)面所有js運行前預先注入一段js代碼,偽造alert、prompt、confirm等所有彈窗方法。如果防御者在彈出代碼之前檢查他調用的alert方法是否仍然是原生的,則這種方式被阻止。
  對付爬行動(dòng)物的靈丹妙藥
  目前最可靠的反爬蟲(chóng)和機器人巡檢手段是驗證碼技術(shù)。但是,驗證碼并不意味著(zhù)必須強制用戶(hù)輸入一系列字母數字。還有很多基于用戶(hù)鼠標、觸摸屏(移動(dòng)端)等行為的行為驗證技術(shù)。其中,最成熟的是基于機器學(xué)習的谷歌reCAPTCHA。區分用戶(hù)和爬蟲(chóng)。
  基于以上對用戶(hù)和爬蟲(chóng)的識別和區分技術(shù),網(wǎng)站的防御者需要做的就是對該IP地址進(jìn)行封鎖或者對該IP的訪(fǎng)問(wèn)用戶(hù)施加高強度的驗證碼策略。這樣攻擊者就不得不購買(mǎi)IP代理池來(lái)捕獲網(wǎng)站信息內容,否則單個(gè)IP地址很容易被封殺,無(wú)法被捕獲。爬取和反爬取的門(mén)檻已經(jīng)提升到IP代理池的經(jīng)濟成本水平。
  機器人協(xié)議
  此外,在爬蟲(chóng)爬取技術(shù)領(lǐng)域,還有一種叫做robots協(xié)議的“白道”方式。您可以訪(fǎng)問(wèn) 網(wǎng)站 根目錄中的 /robots.txt。比如我們看一下github的robot協(xié)議。Allow 和 Disallow 聲明每個(gè) UA 爬蟲(chóng)的授權。
  然而,這只是君子之約。雖然它有法律上的好處,但它只能限制那些商業(yè)搜索引擎的蜘蛛程序,你不能限制那些“野爬愛(ài)好者”。
  寫(xiě)在最后
  網(wǎng)頁(yè)內容的爬取與對抗,注定是一場(chǎng)魔高道高的貓捉老鼠游戲。你永遠不可能用某種技術(shù)完全擋住爬蟲(chóng)的去路,你能做的就是增加攻擊。用戶(hù)爬取的成本,以及關(guān)于未經(jīng)授權的爬取行為的更準確信息。
  這篇文章中提到的驗證碼攻防其實(shí)是一個(gè)比較復雜的技術(shù)難點(diǎn)。我在這里留下一個(gè)懸念。有興趣的可以多加關(guān)注,期待后續文章的詳細闡述。
  另外,歡迎對爬蟲(chóng)感興趣的朋友關(guān)注我的開(kāi)源項目webster。該項目以Node.js結合Chrome無(wú)頭模式實(shí)現了一個(gè)高可用的網(wǎng)絡(luò )爬蟲(chóng)爬取框架。一個(gè)頁(yè)面中js和ajax渲染的所有異步內容;結合redis,實(shí)現了一個(gè)任務(wù)隊列,讓爬蟲(chóng)輕松進(jìn)行橫向和縱向分布式擴展。很容易部署,我已經(jīng)為webster提供了一個(gè)正式版的base runtime docker鏡像,如果你想先睹為快,你也可以試試這個(gè)webster demo docker image。

抓取網(wǎng)頁(yè)生成電子書(shū)(如何用PowerBI的PowerQuery批量采集多個(gè)網(wǎng)頁(yè)的數據(圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 195 次瀏覽 ? 2022-04-19 01:39 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何用PowerBI的PowerQuery批量采集多個(gè)網(wǎng)頁(yè)的數據(圖))
  前面介紹PowerBI數據獲取的時(shí)候,我舉了一個(gè)從網(wǎng)頁(yè)獲取數據的例子,但是當時(shí)只爬取了一頁(yè)數據。本篇文章將介紹如何使用PowerBI的Power Query批處理采集Data為多個(gè)網(wǎng)頁(yè)。Excel 中的操作類(lèi)似。磷
  本文以智聯(lián)招聘網(wǎng)站為例,采集上海招聘信息。
  以下是詳細步驟:
  (一)分析 URL 結構
  打開(kāi)智聯(lián)招聘網(wǎng)站,搜索上海工作地點(diǎn)的資料,
  
  將頁(yè)面拉到最底部,找到顯示頁(yè)碼的地方,點(diǎn)擊前三頁(yè),網(wǎng)址如下,
  %e4%b8%8a%e6%b5%b7&amp;sm=0&amp;sg=fe782ca83bfa4b018d27de559d0a5db0&amp;p=1
  %e4%b8%8a%e6%b5%b7&amp;sm=0&amp;sg=fe782ca83bfa4b018d27de559d0a5db0&amp;p=2
  %e4%b8%8a%e6%b5%b7&amp;sm=0&amp;sg=fe782ca83bfa4b018d27de559d0a5db0&amp;p=3
  可以看出,最后一個(gè)數字是頁(yè)碼的ID,是一個(gè)控制分頁(yè)數據的變量。
  (二)使用 PowerBI采集第一頁(yè)的數據
  打開(kāi)PowerBI Desktop,從網(wǎng)頁(yè)獲取數據,在彈窗中選擇【高級】,根據上面分析的URL結構,第一行輸入除最后一頁(yè)ID外的URL,第二行輸入頁(yè)碼.
  
  從 URL 預覽可以看出,上面兩行的 URL 已經(jīng)自動(dòng)合并在一起了;這里的單獨輸入只是為了以后更清楚地區分頁(yè)碼變量,其實(shí)直接輸入完整的URL也是可以的。
 ?。ㄈ绻?yè)碼變量不是最后一位,而是在中間,則網(wǎng)址要分三行輸入)
  點(diǎn)擊OK后,發(fā)現很多表,
  
  從中可以看出智聯(lián)招聘網(wǎng)站上的每個(gè)招聘信息都是一個(gè)表,不用管它,隨便選一個(gè)表,比如勾選Table0,點(diǎn)擊編輯進(jìn)入Power Query編輯器。
  在PQ編輯器中,直接刪除[source]后面的所有步驟,然后展開(kāi)數據,刪除前面幾列的數據。
  
  這樣第一頁(yè)采集的數據就來(lái)了。然后整理這個(gè)頁(yè)面的數據,刪除無(wú)用的信息,添加字段名??梢钥吹?,一頁(yè)有60條招聘信息。
  在這里完成第一頁(yè)的數據后,當你轉到采集的其他頁(yè)面時(shí),數據結構將與第一頁(yè)完成后的數據結構相同,采集的數據可以直接使用;沒(méi)關(guān)系,你可以等到采集所有網(wǎng)頁(yè)數據都排序在一起。
  如果要大量抓取網(wǎng)頁(yè)數據,為了節省時(shí)間,可以不用對第一頁(yè)的數據進(jìn)行排序,直接進(jìn)行下一步。
  (三)根據頁(yè)碼參數設置自定義功能
  這是最重要的一步。
  還是剛才第一頁(yè)數據的PQ編輯器窗口,打開(kāi)【高級編輯器】,在let之前輸入:
  
  并且在let后面第一行的URL中,&amp;后面的“1”變成了(這是第二步使用高級選項分兩行輸入URL的好處):
  修改后 [source] 的 URL 變?yōu)椋?br />   確認后,剛才第一頁(yè)數據的查詢(xún)窗口變成了自定義函數的輸入參數窗口,Table0表也變成了函數的樣式。為了更直觀(guān),將此函數重命名為Data_Zhaopin。
  至此,自定義功能完成。p是函數的變量,用來(lái)控制頁(yè)碼。如果輸入數字,例如 7,將捕獲第 7 頁(yè)的數據。
  
  輸入參數一次只能抓取一個(gè)網(wǎng)頁(yè)。批量爬取需要執行以下步驟。
  (四)批量調用自定義函數
  首先,使用一個(gè)空查詢(xún)來(lái)創(chuàng )建一個(gè)數字序列。如果要獲取前 100 頁(yè)數據,請創(chuàng )建一個(gè)從 1 到 100 的序列并輸入空查詢(xún)。
  回車(chē)生成一個(gè)從1到100的序列,然后變成表格。gif操作圖如下:
  
  然后調用自定義函數,
  
  在彈出的窗口中,點(diǎn)擊【函數查詢(xún)】下拉框,選擇剛剛創(chuàng )建的自定義函數Data_Zhaopin。
  單擊“確定”開(kāi)始批量抓取網(wǎng)頁(yè)。因為100頁(yè)數據比較多,大概需要5分鐘。這也是我提前進(jìn)行第二步數據排序的結果,導致爬取慢。展開(kāi)這張表,就是這100頁(yè)的數據,
  
  至此,已經(jīng)完成了100頁(yè)智聯(lián)招聘信息的批量抓取。上面的步驟似乎很多。其實(shí)掌握之后,10分鐘左右就可以搞定。最大的時(shí)間塊仍然是最后一步。捕獲數據的過(guò)程非常耗時(shí)。
  網(wǎng)頁(yè)上的數據不斷更新。完成以上步驟后,在PQ中點(diǎn)擊刷新,即可隨時(shí)一鍵提取網(wǎng)站實(shí)時(shí)數據。做一次,受益終生!
  以上主要使用了PowerBI中的Power Query功能,在能使用PQ功能的Excel中也可以進(jìn)行同樣的操作。
  當然,PowerBI 不是專(zhuān)業(yè)的爬蟲(chóng)工具。如果網(wǎng)頁(yè)比較復雜或者有反爬機制,還是得使用專(zhuān)業(yè)的工具,比如R或者Python。在使用PowerBI批量抓取某個(gè)網(wǎng)站數據之前,先嘗試采集一個(gè)頁(yè)面,如果可以采集獲取,則使用上述步驟,如果采集不行當您到達時(shí),您無(wú)需再浪費時(shí)間。
  如果您是 Power BI 新手,可以前往微信公眾號:“PowerBI 星球”,回復“PowerBI”,獲取《PowerBI 七天入門(mén)》電子書(shū),幫助您快速提高工作效率。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何用PowerBI的PowerQuery批量采集多個(gè)網(wǎng)頁(yè)的數據(圖))
  前面介紹PowerBI數據獲取的時(shí)候,我舉了一個(gè)從網(wǎng)頁(yè)獲取數據的例子,但是當時(shí)只爬取了一頁(yè)數據。本篇文章將介紹如何使用PowerBI的Power Query批處理采集Data為多個(gè)網(wǎng)頁(yè)。Excel 中的操作類(lèi)似。磷
  本文以智聯(lián)招聘網(wǎng)站為例,采集上海招聘信息。
  以下是詳細步驟:
  (一)分析 URL 結構
  打開(kāi)智聯(lián)招聘網(wǎng)站,搜索上海工作地點(diǎn)的資料,
  
  將頁(yè)面拉到最底部,找到顯示頁(yè)碼的地方,點(diǎn)擊前三頁(yè),網(wǎng)址如下,
  %e4%b8%8a%e6%b5%b7&amp;sm=0&amp;sg=fe782ca83bfa4b018d27de559d0a5db0&amp;p=1
  %e4%b8%8a%e6%b5%b7&amp;sm=0&amp;sg=fe782ca83bfa4b018d27de559d0a5db0&amp;p=2
  %e4%b8%8a%e6%b5%b7&amp;sm=0&amp;sg=fe782ca83bfa4b018d27de559d0a5db0&amp;p=3
  可以看出,最后一個(gè)數字是頁(yè)碼的ID,是一個(gè)控制分頁(yè)數據的變量。
  (二)使用 PowerBI采集第一頁(yè)的數據
  打開(kāi)PowerBI Desktop,從網(wǎng)頁(yè)獲取數據,在彈窗中選擇【高級】,根據上面分析的URL結構,第一行輸入除最后一頁(yè)ID外的URL,第二行輸入頁(yè)碼.
  
  從 URL 預覽可以看出,上面兩行的 URL 已經(jīng)自動(dòng)合并在一起了;這里的單獨輸入只是為了以后更清楚地區分頁(yè)碼變量,其實(shí)直接輸入完整的URL也是可以的。
 ?。ㄈ绻?yè)碼變量不是最后一位,而是在中間,則網(wǎng)址要分三行輸入)
  點(diǎn)擊OK后,發(fā)現很多表,
  
  從中可以看出智聯(lián)招聘網(wǎng)站上的每個(gè)招聘信息都是一個(gè)表,不用管它,隨便選一個(gè)表,比如勾選Table0,點(diǎn)擊編輯進(jìn)入Power Query編輯器。
  在PQ編輯器中,直接刪除[source]后面的所有步驟,然后展開(kāi)數據,刪除前面幾列的數據。
  
  這樣第一頁(yè)采集的數據就來(lái)了。然后整理這個(gè)頁(yè)面的數據,刪除無(wú)用的信息,添加字段名??梢钥吹?,一頁(yè)有60條招聘信息。
  在這里完成第一頁(yè)的數據后,當你轉到采集的其他頁(yè)面時(shí),數據結構將與第一頁(yè)完成后的數據結構相同,采集的數據可以直接使用;沒(méi)關(guān)系,你可以等到采集所有網(wǎng)頁(yè)數據都排序在一起。
  如果要大量抓取網(wǎng)頁(yè)數據,為了節省時(shí)間,可以不用對第一頁(yè)的數據進(jìn)行排序,直接進(jìn)行下一步。
  (三)根據頁(yè)碼參數設置自定義功能
  這是最重要的一步。
  還是剛才第一頁(yè)數據的PQ編輯器窗口,打開(kāi)【高級編輯器】,在let之前輸入:
  
  并且在let后面第一行的URL中,&amp;后面的“1”變成了(這是第二步使用高級選項分兩行輸入URL的好處):
  修改后 [source] 的 URL 變?yōu)椋?br />   確認后,剛才第一頁(yè)數據的查詢(xún)窗口變成了自定義函數的輸入參數窗口,Table0表也變成了函數的樣式。為了更直觀(guān),將此函數重命名為Data_Zhaopin。
  至此,自定義功能完成。p是函數的變量,用來(lái)控制頁(yè)碼。如果輸入數字,例如 7,將捕獲第 7 頁(yè)的數據。
  
  輸入參數一次只能抓取一個(gè)網(wǎng)頁(yè)。批量爬取需要執行以下步驟。
  (四)批量調用自定義函數
  首先,使用一個(gè)空查詢(xún)來(lái)創(chuàng )建一個(gè)數字序列。如果要獲取前 100 頁(yè)數據,請創(chuàng )建一個(gè)從 1 到 100 的序列并輸入空查詢(xún)。
  回車(chē)生成一個(gè)從1到100的序列,然后變成表格。gif操作圖如下:
  
  然后調用自定義函數,
  
  在彈出的窗口中,點(diǎn)擊【函數查詢(xún)】下拉框,選擇剛剛創(chuàng )建的自定義函數Data_Zhaopin。
  單擊“確定”開(kāi)始批量抓取網(wǎng)頁(yè)。因為100頁(yè)數據比較多,大概需要5分鐘。這也是我提前進(jìn)行第二步數據排序的結果,導致爬取慢。展開(kāi)這張表,就是這100頁(yè)的數據,
  
  至此,已經(jīng)完成了100頁(yè)智聯(lián)招聘信息的批量抓取。上面的步驟似乎很多。其實(shí)掌握之后,10分鐘左右就可以搞定。最大的時(shí)間塊仍然是最后一步。捕獲數據的過(guò)程非常耗時(shí)。
  網(wǎng)頁(yè)上的數據不斷更新。完成以上步驟后,在PQ中點(diǎn)擊刷新,即可隨時(shí)一鍵提取網(wǎng)站實(shí)時(shí)數據。做一次,受益終生!
  以上主要使用了PowerBI中的Power Query功能,在能使用PQ功能的Excel中也可以進(jìn)行同樣的操作。
  當然,PowerBI 不是專(zhuān)業(yè)的爬蟲(chóng)工具。如果網(wǎng)頁(yè)比較復雜或者有反爬機制,還是得使用專(zhuān)業(yè)的工具,比如R或者Python。在使用PowerBI批量抓取某個(gè)網(wǎng)站數據之前,先嘗試采集一個(gè)頁(yè)面,如果可以采集獲取,則使用上述步驟,如果采集不行當您到達時(shí),您無(wú)需再浪費時(shí)間。
  如果您是 Power BI 新手,可以前往微信公眾號:“PowerBI 星球”,回復“PowerBI”,獲取《PowerBI 七天入門(mén)》電子書(shū),幫助您快速提高工作效率。

抓取網(wǎng)頁(yè)生成電子書(shū)(大牛與搬運工的差距——學(xué)習Python的正確姿勢(組圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 111 次瀏覽 ? 2022-04-19 01:38 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(大牛與搬運工的差距——學(xué)習Python的正確姿勢(組圖))
  阿里云 &gt; 云棲社區 &gt; 主題地圖 &gt; Z &gt; 自己動(dòng)手爬蟲(chóng)電子書(shū)
  
  推薦活動(dòng):
  更多優(yōu)惠&gt;
  Current Topic: DIY Web Crawler 電子書(shū)加入采集
  相關(guān)話(huà)題:
  自己動(dòng)手 網(wǎng)絡(luò )爬蟲(chóng) 電子書(shū) 相關(guān)博客 查看更多博客
  2018優(yōu)秀譯者評選,快來(lái)挑選你心中獨一無(wú)二的人選吧,2018異步暢銷(xiāo)新書(shū)都在這里
  
  
  作者:異步社區 3713 瀏覽評論:03年前
  人能通過(guò)一本書(shū)了解世界和時(shí)代嗎?當然!任何優(yōu)秀的作家都可以通過(guò)創(chuàng )新的學(xué)術(shù)研究,以文學(xué)作品展現自己的生命力和價(jià)值,成為讀者窺視世界、了解事物的窗口。一個(gè)優(yōu)秀的作家和他獨特的藝術(shù)創(chuàng )作總是會(huì )被人津津樂(lè )道。當然,由于各種原因,一些優(yōu)秀的
  閱讀全文
  干貨 | 學(xué)習Python的正確姿勢
  
  
  作者:gavin_hsueh4122 瀏覽評論:03年前
  前段時(shí)間和大家分享了一篇關(guān)于學(xué)習方法的文章《丹尼爾和波特的差距——學(xué)習方法的力量》。我們將學(xué)習過(guò)程分為八個(gè)步驟,借鑒敏捷開(kāi)發(fā)的迭代思想,達到自我迭代學(xué)習的效果。行動(dòng)勝于雄辯,理論結合實(shí)踐才是王道,所以在這篇文章中,我將在之前的學(xué)習方法的基礎上,分享我是如何學(xué)習python的。
  閱讀全文
  后端架構師技術(shù)圖
  
  
  作者:jackcooper20156238 瀏覽評論:03年前
  數據結構隊列集合鏈表、數組字典、關(guān)聯(lián)數組堆棧樹(shù)二叉樹(shù)完全二叉樹(shù)平衡二叉樹(shù)二叉搜索樹(shù)(BST)紅黑樹(shù)B-、B+、B*樹(shù)LSM樹(shù)BitSet常用算法排序、搜索算法選擇冒泡排序 插入排序 快速排序 合并排序 希爾排序 堆排序
  閱讀全文
  如何使用 Python 抓取數據?(一)網(wǎng)頁(yè)抓取
  
  
  作者:王淑儀2089 瀏覽評論:04年前
  你期待已久的 Python 網(wǎng)絡(luò )數據爬蟲(chóng)教程就在這里。本文向您展示了如何從網(wǎng)頁(yè)中查找感興趣的鏈接和描述,并在 Excel 中抓取和存儲它們。我需要在公眾號后臺,經(jīng)??梢允盏阶x者的消息。許多評論是讀者的問(wèn)題。只要我有時(shí)間,我會(huì )嘗試回答它。但是有些消息乍一看似乎不清楚
  閱讀全文
  第一次了解 Scrapy,并在一個(gè)充滿(mǎn)爬行動(dòng)物的世界中成為一個(gè)好公民
  
  
  作者:異步社區 2481 瀏覽評論:04年前
  歡迎來(lái)到你的 Scrapy 之旅。通過(guò)這篇文章,我們的目標是讓您從一個(gè)經(jīng)驗很少或沒(méi)有經(jīng)驗的 Scrapy 初學(xué)者到有信心使用這個(gè)強大的框架從網(wǎng)絡(luò )或其他來(lái)源抓取大型數據集的 Scrapy 專(zhuān)家。這篇文章將介紹 Scrapy 并向你展示一些你可以用它做的很酷的事情。1.1
  閱讀全文
  阿里巴巴飛天大數據平臺MaxCompute(原ODPS)完整指南(持續更新20200109)
  
  
  作者:隱秘森林 123771 瀏覽評論:34年前
  阿里巴巴飛天大數據平臺MaxCompute不斷演進(jìn);概述 大數據計算服務(wù)(MaxCompute,原名ODPS,產(chǎn)品地址:)是一種快速、全托管的TB/PB級數據倉庫解決方案。麥克斯公司
  閱讀全文
  網(wǎng)絡(luò )爬蟲(chóng) - 原理 (一)
  
  
  作者:crazyacking1276 瀏覽評論:06年前
  介紹:我們在百度首頁(yè)輸入關(guān)鍵詞,點(diǎn)擊百度,相關(guān)內容會(huì )立即顯示。這個(gè)動(dòng)作背后隱藏著(zhù)哪些操作?事實(shí)上,百度的核心搜索引擎是一個(gè)大型分布式網(wǎng)絡(luò )爬蟲(chóng)程序。什么是網(wǎng)絡(luò )爬蟲(chóng)?詳情請參考:1.百度百科2.維基百科網(wǎng)絡(luò )爬蟲(chóng)的主要用途
  閱讀全文 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(大牛與搬運工的差距——學(xué)習Python的正確姿勢(組圖))
  阿里云 &gt; 云棲社區 &gt; 主題地圖 &gt; Z &gt; 自己動(dòng)手爬蟲(chóng)電子書(shū)
  
  推薦活動(dòng):
  更多優(yōu)惠&gt;
  Current Topic: DIY Web Crawler 電子書(shū)加入采集
  相關(guān)話(huà)題:
  自己動(dòng)手 網(wǎng)絡(luò )爬蟲(chóng) 電子書(shū) 相關(guān)博客 查看更多博客
  2018優(yōu)秀譯者評選,快來(lái)挑選你心中獨一無(wú)二的人選吧,2018異步暢銷(xiāo)新書(shū)都在這里
  
  
  作者:異步社區 3713 瀏覽評論:03年前
  人能通過(guò)一本書(shū)了解世界和時(shí)代嗎?當然!任何優(yōu)秀的作家都可以通過(guò)創(chuàng )新的學(xué)術(shù)研究,以文學(xué)作品展現自己的生命力和價(jià)值,成為讀者窺視世界、了解事物的窗口。一個(gè)優(yōu)秀的作家和他獨特的藝術(shù)創(chuàng )作總是會(huì )被人津津樂(lè )道。當然,由于各種原因,一些優(yōu)秀的
  閱讀全文
  干貨 | 學(xué)習Python的正確姿勢
  
  
  作者:gavin_hsueh4122 瀏覽評論:03年前
  前段時(shí)間和大家分享了一篇關(guān)于學(xué)習方法的文章《丹尼爾和波特的差距——學(xué)習方法的力量》。我們將學(xué)習過(guò)程分為八個(gè)步驟,借鑒敏捷開(kāi)發(fā)的迭代思想,達到自我迭代學(xué)習的效果。行動(dòng)勝于雄辯,理論結合實(shí)踐才是王道,所以在這篇文章中,我將在之前的學(xué)習方法的基礎上,分享我是如何學(xué)習python的。
  閱讀全文
  后端架構師技術(shù)圖
  
  
  作者:jackcooper20156238 瀏覽評論:03年前
  數據結構隊列集合鏈表、數組字典、關(guān)聯(lián)數組堆棧樹(shù)二叉樹(shù)完全二叉樹(shù)平衡二叉樹(shù)二叉搜索樹(shù)(BST)紅黑樹(shù)B-、B+、B*樹(shù)LSM樹(shù)BitSet常用算法排序、搜索算法選擇冒泡排序 插入排序 快速排序 合并排序 希爾排序 堆排序
  閱讀全文
  如何使用 Python 抓取數據?(一)網(wǎng)頁(yè)抓取
  
  
  作者:王淑儀2089 瀏覽評論:04年前
  你期待已久的 Python 網(wǎng)絡(luò )數據爬蟲(chóng)教程就在這里。本文向您展示了如何從網(wǎng)頁(yè)中查找感興趣的鏈接和描述,并在 Excel 中抓取和存儲它們。我需要在公眾號后臺,經(jīng)??梢允盏阶x者的消息。許多評論是讀者的問(wèn)題。只要我有時(shí)間,我會(huì )嘗試回答它。但是有些消息乍一看似乎不清楚
  閱讀全文
  第一次了解 Scrapy,并在一個(gè)充滿(mǎn)爬行動(dòng)物的世界中成為一個(gè)好公民
  
  
  作者:異步社區 2481 瀏覽評論:04年前
  歡迎來(lái)到你的 Scrapy 之旅。通過(guò)這篇文章,我們的目標是讓您從一個(gè)經(jīng)驗很少或沒(méi)有經(jīng)驗的 Scrapy 初學(xué)者到有信心使用這個(gè)強大的框架從網(wǎng)絡(luò )或其他來(lái)源抓取大型數據集的 Scrapy 專(zhuān)家。這篇文章將介紹 Scrapy 并向你展示一些你可以用它做的很酷的事情。1.1
  閱讀全文
  阿里巴巴飛天大數據平臺MaxCompute(原ODPS)完整指南(持續更新20200109)
  
  
  作者:隱秘森林 123771 瀏覽評論:34年前
  阿里巴巴飛天大數據平臺MaxCompute不斷演進(jìn);概述 大數據計算服務(wù)(MaxCompute,原名ODPS,產(chǎn)品地址:)是一種快速、全托管的TB/PB級數據倉庫解決方案。麥克斯公司
  閱讀全文
  網(wǎng)絡(luò )爬蟲(chóng) - 原理 (一)
  
  
  作者:crazyacking1276 瀏覽評論:06年前
  介紹:我們在百度首頁(yè)輸入關(guān)鍵詞,點(diǎn)擊百度,相關(guān)內容會(huì )立即顯示。這個(gè)動(dòng)作背后隱藏著(zhù)哪些操作?事實(shí)上,百度的核心搜索引擎是一個(gè)大型分布式網(wǎng)絡(luò )爬蟲(chóng)程序。什么是網(wǎng)絡(luò )爬蟲(chóng)?詳情請參考:1.百度百科2.維基百科網(wǎng)絡(luò )爬蟲(chóng)的主要用途
  閱讀全文

抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 111 次瀏覽 ? 2022-04-18 13:48 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
  我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
  Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
  
  真的很好的閱讀體驗
  Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
  由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
  
  將網(wǎng)頁(yè) 文章 制作成電子書(shū)
  Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
  
  以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
  
  其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
  
  要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
  首先,根據Doocer個(gè)人設置頁(yè)面的提示,打開(kāi)Amazon Kindle的個(gè)人文檔設置,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
  
  最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
  
  仍有一些問(wèn)題需要注意
  Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
  自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
  目前,Doocer 的所有功能都可以免費使用。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(如何將網(wǎng)頁(yè)文章批量抓取、生成電子書(shū)、直接推送到Kindle)
  我一直在研究如何將我關(guān)心的網(wǎng)頁(yè)或 文章 放入我的 Kindle 中進(jìn)行認真閱讀,但我已經(jīng)很長(cháng)時(shí)間沒(méi)有取得任何真正的進(jìn)展。手工排版制作電子書(shū)的方法雖然簡(jiǎn)單易行,但對于短小、更新頻繁的網(wǎng)頁(yè)文章來(lái)說(shuō)效率低下。如果有一個(gè)工具可以文章批量抓取網(wǎng)頁(yè),生成電子書(shū),然后直接推送到Kindle上就好了。Doocer 就是這樣一種實(shí)用程序。
  Doocer是@lepture開(kāi)發(fā)的在線(xiàn)服務(wù),允許用戶(hù)在Pocket Read Later賬戶(hù)中提交URL、RSS提要地址和文章,然后逐一或批量制作成ePub和MOBI電子書(shū). 您可以直接在 Doocer 中閱讀所有文章,也可以將它們推送到 Kindle、Apple Books 中閱讀。
  
  真的很好的閱讀體驗
  Doocer 生成的電子書(shū)在排版方面非常出色。應該有的內容很多,不應該有的內容不多。本書(shū)不僅封面圖文并茂,還有文章目錄、網(wǎng)站出處、文章原作者等信息。Doocer生成的MOBI電子書(shū)支持KF8標準,因此支持Kindle原生替換自定義字體。
  由于網(wǎng)站文章通常有標準和通用的排版規范,Doocer生成的電子書(shū)文章中的大小標題和列表圖例與原網(wǎng)頁(yè)文章高度一致@>。原文章中的所有超鏈接也被保留,評論、廣告等內容全部丟棄。整本書(shū)的閱讀體驗非常友好。(當然,如果原網(wǎng)頁(yè)文章的布局沒(méi)有規則,那么生成的電子書(shū)也可能面目全非。)
  
  將網(wǎng)頁(yè) 文章 制作成電子書(shū)
  Doocer完成注冊登錄后,我們就可以開(kāi)始將網(wǎng)頁(yè)文章制作成電子書(shū)了。首先,我們點(diǎn)擊“NEW BOOK”按鈕新建電子書(shū),輸入電子書(shū)名稱(chēng)。接下來(lái)選擇右上角的“添加”以添加 文章 URL 或 RSS 提要地址。
  
  以小眾網(wǎng)頁(yè)的文章為例,我們選擇“FEED”,在輸入框中粘貼RSS地址,然后點(diǎn)擊“PARSE”,那么小眾最近的文章列表就會(huì )出現為我們顯示添加到。我們可以根據需要選擇,也可以點(diǎn)擊“SELECT ALL”全選文章。最后,下拉到頁(yè)面底部,選擇“SAVE”,那么這些文章就會(huì )被添加到書(shū)里。
  
  其實(shí)Doocer網(wǎng)頁(yè)與RSS工具很相似,實(shí)現了從網(wǎng)站批量抓取文章并集中展示的功能。
  
  要將這些 文章 轉換為電子書(shū)并將它們推送到 Kindle,我們必須做一些簡(jiǎn)單的事情。
  首先,根據Doocer個(gè)人設置頁(yè)面的提示,打開(kāi)Amazon Kindle的個(gè)人文檔設置,將Doocer電子書(shū)的發(fā)送地址添加到個(gè)人文檔接收地址中。完成后,我們在輸入框中填寫(xiě)Kindle的個(gè)人文檔接收地址,點(diǎn)擊保存。
  
  最后,我們在 Doocer 中打開(kāi)《少數派》這本書(shū),在頁(yè)面上找到“Publish”,選擇 Send to Kindle。大約 10 到 30 分鐘,Doocer 將完成圖書(shū)制作并將圖書(shū)推送到 Kindle。
  
  仍有一些問(wèn)題需要注意
  Doocer目前處于beta測試階段,還有一些bug,尤其是中文網(wǎng)站經(jīng)常出現問(wèn)題。好在Doocer官網(wǎng)有開(kāi)發(fā)者對話(huà)頻道,可以直接聯(lián)系他幫忙解決。
  自動(dòng)化所有操作的過(guò)程是我認為 Doocer 最需要做的事情。Doocer可以像RSS工具一樣抓取網(wǎng)頁(yè)中更新的文章,但是要抓取新的文章并生成電子書(shū)并推送,仍然需要手動(dòng)完成。如果整個(gè)過(guò)程可以自動(dòng)化,RSS - MOBI - Kindle 一口氣,相信它的用處會(huì )更好。
  目前,Doocer 的所有功能都可以免費使用。

抓取網(wǎng)頁(yè)生成電子書(shū)(《后期制作》自動(dòng)重試怎么做?怎么提??? )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 106 次瀏覽 ? 2022-04-17 21:34 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(《后期制作》自動(dòng)重試怎么做?怎么提???
)
  主要功能:可以提取和調整指定小說(shuō)目錄頁(yè)的章節信息,然后按照章節順序抓取小說(shuō)內容,然后合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
  
  特色功能1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
  2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
  3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
  4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(huì )有明顯的操作提示),調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站:已輸入10個(gè)適用網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到想要的書(shū)),以及相應的代碼也可以自動(dòng)應用,其他小說(shuō)網(wǎng)站也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中備份。
  6、輕松制作電子書(shū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
   查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(《后期制作》自動(dòng)重試怎么做?怎么提???
)
  主要功能:可以提取和調整指定小說(shuō)目錄頁(yè)的章節信息,然后按照章節順序抓取小說(shuō)內容,然后合并在一起。爬取過(guò)程可以隨時(shí)中斷,關(guān)閉程序后可以恢復上一個(gè)任務(wù)。
  
  特色功能1、章節調整:提取目錄后,可以進(jìn)行移動(dòng)、刪除、反轉等調整操作。調整將直接影響調整后的章節順序中的最終書(shū)籍和輸出。
  2、自動(dòng)重試:爬取過(guò)程中,可能由于網(wǎng)絡(luò )因素導致爬取失敗。本程序可能會(huì )自動(dòng)重試直到成功,或者暫時(shí)中斷爬?。ㄖ袛嗪箨P(guān)閉程序不會(huì )影響進(jìn)度),等網(wǎng)絡(luò )好了再試。
  3、停止和恢復:可以隨時(shí)停止捕捉過(guò)程,退出程序后不影響進(jìn)度(章節信息會(huì )保存在記錄中,程序結束后可以恢復捕捉下次運行。注意:需要先用停止鍵中斷,然后退出程序,如果直接退出,將無(wú)法恢復)。
  4、一鍵抓?。河址Q(chēng)“傻瓜模式”,基本可以實(shí)現全自動(dòng)抓取合并功能,直接輸出最終的文本文件。前面可能需要輸入最基本的URL、save bit等信息(會(huì )有明顯的操作提示),調整章節后也可以使用一鍵爬取,爬取和合并操作會(huì )自動(dòng)完成。
  5、適用網(wǎng)站:已輸入10個(gè)適用網(wǎng)站(選擇后可快速打開(kāi)網(wǎng)站找到想要的書(shū)),以及相應的代碼也可以自動(dòng)應用,其他小說(shuō)網(wǎng)站也可以測試,如果一起使用,可以手動(dòng)添加到設置文件中備份。
  6、輕松制作電子書(shū):可以在設置文件中添加每章名稱(chēng)的前綴和后綴,為后期制作電子書(shū)的編目帶來(lái)極大的方便。
  

抓取網(wǎng)頁(yè)生成電子書(shū)(PostedJanuary14,安裝Bash官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2022-04-17 15:00 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(PostedJanuary14,安裝Bash官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單)
  Scrapy 抓取熱門(mén)短書(shū)生成電子書(shū)發(fā)送到 Kindle 發(fā)表于 2016 年 1 月 14 日
  簡(jiǎn)書(shū)是個(gè)很好的學(xué)習者網(wǎng)站,我大多只關(guān)注首頁(yè)的人文章,但是最近因為忙,錯過(guò)了很多首頁(yè)的文章,所以我有個(gè)想法,把每日熱門(mén)Top生成mobi并推送到kindle。這樣一來(lái),在地鐵上就能很快搞定。
  環(huán)境準備:
  關(guān)于口徑安裝
  重擊
  sudo -v && wget -nv -O- https://raw.githubusercontent. ... er.py | sudo python -c "import sys; main=lambda:sys.stderr.write(&#x27;Download failed\n&#x27;); exec(sys.stdin.read()); main()"
  官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單,執行后即可安裝使用,但調用ebook-convert時(shí)gitbook會(huì )報錯。這里報的錯誤應該是QT錯誤(至少我遇到過(guò),具體錯誤信息忘記截圖了)如果遇到這個(gè)錯誤,直接安裝QT pyQT即可。calibre安裝頁(yè)面有依賴(lài)表
  安裝 Gitbook
  需要安裝 nodejs 和 npm 然后執行 npm install -g gitbook-cli
  安裝建樹(shù)熱
  需要強調的是,這部分需要解決很多依賴(lài),
  scrapy依賴(lài)的python包有很多,這些依賴(lài)的python大部分都需要一些系統庫。如有需要,需要安裝apt-get和yum,如python-devel libffi-devel libxml-devel等...
  peewee(數據庫ORM)需要mysql-devel,上面的例子都知道,這個(gè)是我部署后寫(xiě)的,部署過(guò)程就不詳細記錄了,現在只能憑記憶寫(xiě)這一章了。
  重擊
  $ git clone https://github.com/jackeyGao/jianshuHot
$ cd jianshuHot
$ pip install -r requirements.txt
  初始化器
  重擊
  $ sh init.sh
  郵件配置
  這是用于發(fā)送電子郵件的 sendEmail 和下載地址。解壓后將解壓后的sendEmail重命名為/usr/local/bin/sendEmail。理論上可以安裝成功。這是免編譯的,只需要在機器上安裝 perl。
  然后修改start.sh郵箱配置,寫(xiě)成自己的163郵箱,也可以用其他品牌郵箱,如果用其他品牌別忘了改,改到對應的smtp服務(wù)器就好了。
  注意:無(wú)論您使用哪個(gè)電子郵件地址,您都必須將此電子郵件帳戶(hù)添加到亞馬遜的批準發(fā)件人電子郵件列表中,以確保您發(fā)送的文件可以到達亞馬遜云
  重擊
  $ vim start.sh
....
YOURKINDLE_MAIL_ADDRESS="[email?protected]"
YOUR_SEND_MAIL_USERNAME="[email?protected]"
YOUR_SEND_MAIL_SECRET = &#x27;xxxxxxxxxxxx&#x27;
MOBI_BOOK_PATH=&#x27;./output/book.mobi&#x27;
...
  開(kāi)始爬行
  重擊
  $ sh start.sh
  執行后會(huì )自動(dòng)抓取頁(yè)面生成markdown,下載每個(gè)文章的圖片,然后gitbook會(huì )通過(guò)markdown生成這個(gè)文檔列表的book.mobi(output/book.mobi),并在start.sh 的末尾有一個(gè)備份操作會(huì )將這個(gè) mobi 備份到 output/books。然后發(fā)送到指定kindle地址郵箱。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(PostedJanuary14,安裝Bash官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單)
  Scrapy 抓取熱門(mén)短書(shū)生成電子書(shū)發(fā)送到 Kindle 發(fā)表于 2016 年 1 月 14 日
  簡(jiǎn)書(shū)是個(gè)很好的學(xué)習者網(wǎng)站,我大多只關(guān)注首頁(yè)的人文章,但是最近因為忙,錯過(guò)了很多首頁(yè)的文章,所以我有個(gè)想法,把每日熱門(mén)Top生成mobi并推送到kindle。這樣一來(lái),在地鐵上就能很快搞定。
  環(huán)境準備:
  關(guān)于口徑安裝
  重擊
  sudo -v && wget -nv -O- https://raw.githubusercontent. ... er.py | sudo python -c "import sys; main=lambda:sys.stderr.write(&#x27;Download failed\n&#x27;); exec(sys.stdin.read()); main()"
  官網(wǎng)文檔提供的安裝腳本看似簡(jiǎn)單,執行后即可安裝使用,但調用ebook-convert時(shí)gitbook會(huì )報錯。這里報的錯誤應該是QT錯誤(至少我遇到過(guò),具體錯誤信息忘記截圖了)如果遇到這個(gè)錯誤,直接安裝QT pyQT即可。calibre安裝頁(yè)面有依賴(lài)表
  安裝 Gitbook
  需要安裝 nodejs 和 npm 然后執行 npm install -g gitbook-cli
  安裝建樹(shù)熱
  需要強調的是,這部分需要解決很多依賴(lài),
  scrapy依賴(lài)的python包有很多,這些依賴(lài)的python大部分都需要一些系統庫。如有需要,需要安裝apt-get和yum,如python-devel libffi-devel libxml-devel等...
  peewee(數據庫ORM)需要mysql-devel,上面的例子都知道,這個(gè)是我部署后寫(xiě)的,部署過(guò)程就不詳細記錄了,現在只能憑記憶寫(xiě)這一章了。
  重擊
  $ git clone https://github.com/jackeyGao/jianshuHot
$ cd jianshuHot
$ pip install -r requirements.txt
  初始化器
  重擊
  $ sh init.sh
  郵件配置
  這是用于發(fā)送電子郵件的 sendEmail 和下載地址。解壓后將解壓后的sendEmail重命名為/usr/local/bin/sendEmail。理論上可以安裝成功。這是免編譯的,只需要在機器上安裝 perl。
  然后修改start.sh郵箱配置,寫(xiě)成自己的163郵箱,也可以用其他品牌郵箱,如果用其他品牌別忘了改,改到對應的smtp服務(wù)器就好了。
  注意:無(wú)論您使用哪個(gè)電子郵件地址,您都必須將此電子郵件帳戶(hù)添加到亞馬遜的批準發(fā)件人電子郵件列表中,以確保您發(fā)送的文件可以到達亞馬遜云
  重擊
  $ vim start.sh
....
YOURKINDLE_MAIL_ADDRESS="[email?protected]"
YOUR_SEND_MAIL_USERNAME="[email?protected]"
YOUR_SEND_MAIL_SECRET = &#x27;xxxxxxxxxxxx&#x27;
MOBI_BOOK_PATH=&#x27;./output/book.mobi&#x27;
...
  開(kāi)始爬行
  重擊
  $ sh start.sh
  執行后會(huì )自動(dòng)抓取頁(yè)面生成markdown,下載每個(gè)文章的圖片,然后gitbook會(huì )通過(guò)markdown生成這個(gè)文檔列表的book.mobi(output/book.mobi),并在start.sh 的末尾有一個(gè)備份操作會(huì )將這個(gè) mobi 備份到 output/books。然后發(fā)送到指定kindle地址郵箱。

抓取網(wǎng)頁(yè)生成電子書(shū)(ireadbook使用KindEditor編輯器以所見(jiàn)所得)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 138 次瀏覽 ? 2022-04-17 10:34 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(ireadbook使用KindEditor編輯器以所見(jiàn)所得)
  ireadbook reader是一款簡(jiǎn)單實(shí)用的電子書(shū)制作軟件??梢詭椭脩?hù)快速制作出高質(zhì)量的有聲電子書(shū),軟件界面簡(jiǎn)潔、小巧、好用,有需要的用戶(hù)不要錯過(guò)。
  
  【軟件特色】
  1. 快速添加章節并編輯標題以顯示在目錄樹(shù)中。
  2. 使用 KindEditor 編輯器以所見(jiàn)即所得的方式編輯頁(yè)面內容,包括修改字體大小和格式。
  3. 可以插入jpg/gif/png等多種格式的圖片。
  4. 支持mp3/wma等音頻格式,閱讀器提供內置播放器。
  5. 免費使用,綠色軟件,無(wú)需安裝。
  【使用說(shuō)明】
  1.txt文本格式:ansi,utf-8、unicode格式自動(dòng)識別;
  2.網(wǎng)頁(yè)內容:與網(wǎng)頁(yè)瀏覽器集成,可以直接從瀏覽的網(wǎng)頁(yè)中抓取文字內容,放入新的章節;
  3. 字格式;
  智能拆分章節,自定義拆分規則,可以根據設定的規則拆分大源文件。
  按固定長(cháng)度拆分章節,拆分的章節保持段落完整。
  支持插入圖片。epub 支持的圖片格式有 gif、jpg、jpeg 和 bmp。
  支持章節順序調整。
  多種輸出格式:epub、內嵌字體的epub格式(可在sony閱讀器上瀏覽)、txt格式(分章節)、html格式(utf-8編碼)、pdf格式;
  上傳epub書(shū)籍到iphone、ipod touch,上傳的書(shū)籍可以直接用stanza打開(kāi)(帶縮略圖、封面、書(shū)籍介紹)
  注意:需要在 iPhone 和 iPod touch 上安裝 OPEN SSH。
  修復了合并章節軟件崩潰的BUG;修復生成的epub在部分??閱讀器上有重疊段落的問(wèn)題 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(ireadbook使用KindEditor編輯器以所見(jiàn)所得)
  ireadbook reader是一款簡(jiǎn)單實(shí)用的電子書(shū)制作軟件??梢詭椭脩?hù)快速制作出高質(zhì)量的有聲電子書(shū),軟件界面簡(jiǎn)潔、小巧、好用,有需要的用戶(hù)不要錯過(guò)。
  
  【軟件特色】
  1. 快速添加章節并編輯標題以顯示在目錄樹(shù)中。
  2. 使用 KindEditor 編輯器以所見(jiàn)即所得的方式編輯頁(yè)面內容,包括修改字體大小和格式。
  3. 可以插入jpg/gif/png等多種格式的圖片。
  4. 支持mp3/wma等音頻格式,閱讀器提供內置播放器。
  5. 免費使用,綠色軟件,無(wú)需安裝。
  【使用說(shuō)明】
  1.txt文本格式:ansi,utf-8、unicode格式自動(dòng)識別;
  2.網(wǎng)頁(yè)內容:與網(wǎng)頁(yè)瀏覽器集成,可以直接從瀏覽的網(wǎng)頁(yè)中抓取文字內容,放入新的章節;
  3. 字格式;
  智能拆分章節,自定義拆分規則,可以根據設定的規則拆分大源文件。
  按固定長(cháng)度拆分章節,拆分的章節保持段落完整。
  支持插入圖片。epub 支持的圖片格式有 gif、jpg、jpeg 和 bmp。
  支持章節順序調整。
  多種輸出格式:epub、內嵌字體的epub格式(可在sony閱讀器上瀏覽)、txt格式(分章節)、html格式(utf-8編碼)、pdf格式;
  上傳epub書(shū)籍到iphone、ipod touch,上傳的書(shū)籍可以直接用stanza打開(kāi)(帶縮略圖、封面、書(shū)籍介紹)
  注意:需要在 iPhone 和 iPod touch 上安裝 OPEN SSH。
  修復了合并章節軟件崩潰的BUG;修復生成的epub在部分??閱讀器上有重疊段落的問(wèn)題

抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)頁(yè)設計師有時(shí)使用屏幕抓取的另一個(gè)常見(jiàn)用法是什么)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-04-17 10:32 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)頁(yè)設計師有時(shí)使用屏幕抓取的另一個(gè)常見(jiàn)用法是什么)
  屏幕抓取是計算機顯示器上顯示的任何內容的靜止圖像。這些圖像有很多用途,從產(chǎn)品推廣到軟件故障排除,大多數計算機都能夠快速生成屏幕抓取,讓用戶(hù)更輕松地使用它們
  
  大多數操作系統允許用戶(hù)通過(guò)按下命令鍵和鍵盤(pán)上的一兩個(gè)其他鍵來(lái)抓取屏幕。抓取時(shí),計算機會(huì )捕獲當時(shí)顯示器上顯示的圖像,并保留所有可見(jiàn)的細節。生成的圖像通常與顯示器大小相同;如果需要,用戶(hù)可以減小圖像的大小以使其更易于使用。屏幕抓取最常見(jiàn)的用途之一是用于軟件的宣傳材料。例如,許多電腦游戲使用屏幕抓取來(lái)做廣告,展示游戲的圖像質(zhì)量和顯示效果,以試圖讓用戶(hù)對外觀(guān)感興趣。您還可以看到其他類(lèi)型軟件的廣告抓取,顯示軟件的功能和外觀(guān)。許多公司還在其用戶(hù)手冊中使用這些圖片來(lái)直觀(guān)地向用戶(hù)展示如何做事。屏幕抓取的另一個(gè)常見(jiàn)用途是故障排除。當用戶(hù)遇到程序錯誤或問(wèn)題時(shí),他或她可以截屏來(lái)說(shuō)明情況。人們有時(shí)還使用屏幕截圖來(lái)記錄其他內容,例如他們完成任務(wù)所采取的步驟。人們使用幽默的抓圖來(lái)說(shuō)明他們周?chē)挠腥で闆r或事件也并不少見(jiàn)。這些圖像還有許多其他用途。例如,博主有時(shí)會(huì )在鏈接到其他 網(wǎng)站 時(shí)使用屏幕抓取來(lái)吸引人們加入有趣的視覺(jué)內容。人們也可能會(huì )抓取抄襲或被盜的內容,因此即使內容后來(lái)被刪除,他們也有證據。網(wǎng)頁(yè)設計師有時(shí)也使用這種方法來(lái)記錄網(wǎng)絡(luò )上視覺(jué)上有趣或有趣的網(wǎng)頁(yè),以供以后參考 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(網(wǎng)頁(yè)設計師有時(shí)使用屏幕抓取的另一個(gè)常見(jiàn)用法是什么)
  屏幕抓取是計算機顯示器上顯示的任何內容的靜止圖像。這些圖像有很多用途,從產(chǎn)品推廣到軟件故障排除,大多數計算機都能夠快速生成屏幕抓取,讓用戶(hù)更輕松地使用它們
  
  大多數操作系統允許用戶(hù)通過(guò)按下命令鍵和鍵盤(pán)上的一兩個(gè)其他鍵來(lái)抓取屏幕。抓取時(shí),計算機會(huì )捕獲當時(shí)顯示器上顯示的圖像,并保留所有可見(jiàn)的細節。生成的圖像通常與顯示器大小相同;如果需要,用戶(hù)可以減小圖像的大小以使其更易于使用。屏幕抓取最常見(jiàn)的用途之一是用于軟件的宣傳材料。例如,許多電腦游戲使用屏幕抓取來(lái)做廣告,展示游戲的圖像質(zhì)量和顯示效果,以試圖讓用戶(hù)對外觀(guān)感興趣。您還可以看到其他類(lèi)型軟件的廣告抓取,顯示軟件的功能和外觀(guān)。許多公司還在其用戶(hù)手冊中使用這些圖片來(lái)直觀(guān)地向用戶(hù)展示如何做事。屏幕抓取的另一個(gè)常見(jiàn)用途是故障排除。當用戶(hù)遇到程序錯誤或問(wèn)題時(shí),他或她可以截屏來(lái)說(shuō)明情況。人們有時(shí)還使用屏幕截圖來(lái)記錄其他內容,例如他們完成任務(wù)所采取的步驟。人們使用幽默的抓圖來(lái)說(shuō)明他們周?chē)挠腥で闆r或事件也并不少見(jiàn)。這些圖像還有許多其他用途。例如,博主有時(shí)會(huì )在鏈接到其他 網(wǎng)站 時(shí)使用屏幕抓取來(lái)吸引人們加入有趣的視覺(jué)內容。人們也可能會(huì )抓取抄襲或被盜的內容,因此即使內容后來(lái)被刪除,他們也有證據。網(wǎng)頁(yè)設計師有時(shí)也使用這種方法來(lái)記錄網(wǎng)絡(luò )上視覺(jué)上有趣或有趣的網(wǎng)頁(yè),以供以后參考

抓取網(wǎng)頁(yè)生成電子書(shū)(大數據技術(shù)前幾年成就了很多科技公司的爬蟲(chóng)技術(shù))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 94 次瀏覽 ? 2022-04-14 18:31 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(大數據技術(shù)前幾年成就了很多科技公司的爬蟲(chóng)技術(shù))
  開(kāi)幕
  大數據技術(shù)這幾年成就了很多科技公司。至于成就有多大,很難說(shuō)爬蟲(chóng)技術(shù)火了。因為很多大數據公司都有爬蟲(chóng)爬取、清洗、分析、銷(xiāo)售的數據。比如很多網(wǎng)絡(luò )輿情系統、網(wǎng)絡(luò )熱點(diǎn)監控系統等等。我工作的公司以前負責過(guò)這樣的項目。當然,這些系統的核心是爬蟲(chóng)技術(shù)。今天,我將調試這樣一個(gè)項目。需要開(kāi)源項目地址的同學(xué),請移到文章的末尾,有開(kāi)源作者的鏈接。
  
  履帶技術(shù)介紹
  什么是爬行動(dòng)物?實(shí)際上,網(wǎng)絡(luò )爬蟲(chóng)是一種自動(dòng)提取網(wǎng)頁(yè)的程序。它被搜索引擎、大數據公司和許多灰色地帶使用,例如尋找漏洞的黑客。爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。對于大數據公司來(lái)說(shuō),通過(guò)爬取互聯(lián)網(wǎng)上的公開(kāi)數據可以獲得一些有價(jià)值的結果,可供決策者使用。當然,過(guò)程中得到的分析結果也可以對后續的爬取過(guò)程給予反饋和指導。
  我曾經(jīng)為我現在的公司抓取了一個(gè) 8 年的公共數據的天氣網(wǎng)站,用于分析農業(yè)天氣數據,例如什么時(shí)候種什么,什么時(shí)候不種。當然,今天的話(huà)題不是這些,它是一個(gè)開(kāi)源項目。
  
  技術(shù)是好是壞
  現在很多網(wǎng)站都有反爬蟲(chóng)技術(shù)了,當然很多爬蟲(chóng)技術(shù)也在迭代升級。我們不會(huì )在本文中討論爬蟲(chóng)技術(shù)的質(zhì)量。我認為技術(shù)沒(méi)有好壞之分,只有使用技術(shù)的人才有好有壞。爬蟲(chóng)技術(shù)是很多企業(yè)的核心技術(shù),也是攻城獅要學(xué)習的技術(shù)。
  核心調試
  1、Forever IDEA從開(kāi)源地址導入
  
  導入后是這樣的
  
  2、介紹爬蟲(chóng)sql,當然這個(gè)爬蟲(chóng)項目有很多插件可用,我這里只調試最小可運行單元。有興趣的可以自己調試。插件包括 selenium、redis、mongodb、oss、ocr 和 IP 代理池插件。
  
  
  3、運行項目,這個(gè)項目的開(kāi)源主頁(yè)有詳細介紹,這里我只運行看看效果,系統圖自帶兩個(gè)例子。
  
  
  
  結語(yǔ)
  這個(gè)開(kāi)源項目是gitee的GVP項目,是學(xué)習爬蟲(chóng)的一個(gè)很好的例子。當然,如果不懂技術(shù)的同學(xué)可以自己學(xué)用,不用看代碼也可以用。但如果你了解這項技術(shù),你最好看看。畢竟爬蟲(chóng)的技術(shù)還是比較好學(xué)的。許多公司依靠它來(lái)發(fā)財。感謝開(kāi)源作者,開(kāi)源讓世界變得更美好。如果覺(jué)得有用,請采集、轉發(fā)、關(guān)注。如需爬蟲(chóng)項目地址,請私信“爬蟲(chóng)”,我發(fā)給你作者的開(kāi)源地址。
  我還調試了很多其他的開(kāi)源項目,如果你覺(jué)得有用,就看看吧:
  花了三個(gè)小時(shí)調試了近50個(gè)常用小工具開(kāi)源項目的合集
  Java Springboot開(kāi)源微服務(wù)架構管理后臺搭建實(shí)戰
  京東SSO調試開(kāi)源單點(diǎn)登錄項目實(shí)戰
  Java史上集成最全的第三方登錄開(kāi)源項目的調試實(shí)踐
  Java分布式架構開(kāi)源支付項目調試
  Java 100%開(kāi)源基于Spring boot的ERP系統調試實(shí)踐
  開(kāi)源OA項目調試實(shí)踐 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(大數據技術(shù)前幾年成就了很多科技公司的爬蟲(chóng)技術(shù))
  開(kāi)幕
  大數據技術(shù)這幾年成就了很多科技公司。至于成就有多大,很難說(shuō)爬蟲(chóng)技術(shù)火了。因為很多大數據公司都有爬蟲(chóng)爬取、清洗、分析、銷(xiāo)售的數據。比如很多網(wǎng)絡(luò )輿情系統、網(wǎng)絡(luò )熱點(diǎn)監控系統等等。我工作的公司以前負責過(guò)這樣的項目。當然,這些系統的核心是爬蟲(chóng)技術(shù)。今天,我將調試這樣一個(gè)項目。需要開(kāi)源項目地址的同學(xué),請移到文章的末尾,有開(kāi)源作者的鏈接。
  
  履帶技術(shù)介紹
  什么是爬行動(dòng)物?實(shí)際上,網(wǎng)絡(luò )爬蟲(chóng)是一種自動(dòng)提取網(wǎng)頁(yè)的程序。它被搜索引擎、大數據公司和許多灰色地帶使用,例如尋找漏洞的黑客。爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。對于大數據公司來(lái)說(shuō),通過(guò)爬取互聯(lián)網(wǎng)上的公開(kāi)數據可以獲得一些有價(jià)值的結果,可供決策者使用。當然,過(guò)程中得到的分析結果也可以對后續的爬取過(guò)程給予反饋和指導。
  我曾經(jīng)為我現在的公司抓取了一個(gè) 8 年的公共數據的天氣網(wǎng)站,用于分析農業(yè)天氣數據,例如什么時(shí)候種什么,什么時(shí)候不種。當然,今天的話(huà)題不是這些,它是一個(gè)開(kāi)源項目。
  
  技術(shù)是好是壞
  現在很多網(wǎng)站都有反爬蟲(chóng)技術(shù)了,當然很多爬蟲(chóng)技術(shù)也在迭代升級。我們不會(huì )在本文中討論爬蟲(chóng)技術(shù)的質(zhì)量。我認為技術(shù)沒(méi)有好壞之分,只有使用技術(shù)的人才有好有壞。爬蟲(chóng)技術(shù)是很多企業(yè)的核心技術(shù),也是攻城獅要學(xué)習的技術(shù)。
  核心調試
  1、Forever IDEA從開(kāi)源地址導入
  
  導入后是這樣的
  
  2、介紹爬蟲(chóng)sql,當然這個(gè)爬蟲(chóng)項目有很多插件可用,我這里只調試最小可運行單元。有興趣的可以自己調試。插件包括 selenium、redis、mongodb、oss、ocr 和 IP 代理池插件。
  
  
  3、運行項目,這個(gè)項目的開(kāi)源主頁(yè)有詳細介紹,這里我只運行看看效果,系統圖自帶兩個(gè)例子。
  
  
  
  結語(yǔ)
  這個(gè)開(kāi)源項目是gitee的GVP項目,是學(xué)習爬蟲(chóng)的一個(gè)很好的例子。當然,如果不懂技術(shù)的同學(xué)可以自己學(xué)用,不用看代碼也可以用。但如果你了解這項技術(shù),你最好看看。畢竟爬蟲(chóng)的技術(shù)還是比較好學(xué)的。許多公司依靠它來(lái)發(fā)財。感謝開(kāi)源作者,開(kāi)源讓世界變得更美好。如果覺(jué)得有用,請采集、轉發(fā)、關(guān)注。如需爬蟲(chóng)項目地址,請私信“爬蟲(chóng)”,我發(fā)給你作者的開(kāi)源地址。
  我還調試了很多其他的開(kāi)源項目,如果你覺(jué)得有用,就看看吧:
  花了三個(gè)小時(shí)調試了近50個(gè)常用小工具開(kāi)源項目的合集
  Java Springboot開(kāi)源微服務(wù)架構管理后臺搭建實(shí)戰
  京東SSO調試開(kāi)源單點(diǎn)登錄項目實(shí)戰
  Java史上集成最全的第三方登錄開(kāi)源項目的調試實(shí)踐
  Java分布式架構開(kāi)源支付項目調試
  Java 100%開(kāi)源基于Spring boot的ERP系統調試實(shí)踐
  開(kāi)源OA項目調試實(shí)踐

抓取網(wǎng)頁(yè)生成電子書(shū)(用Sigil加Calibre,支持Windows,Mac,Linux(組圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 121 次瀏覽 ? 2022-04-14 04:20 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(用Sigil加Calibre,支持Windows,Mac,Linux(組圖))
  因為看慣了??kindle pw,在電腦屏幕上看一大段文章很難專(zhuān)心,感覺(jué)很累。
  能夠為kpw帶來(lái)好的文章、博客、文檔、自組織材料等,真是太高興了??梢哉f(shuō),制作電子書(shū)已經(jīng)成為剛需,所以谷歌告訴我用Sigil加Calibre,就是用Sigil做一個(gè)標準的ePub格式,然后用Calibre轉換成你想要的任何格式。
  這里是 Sigil,它托管在 Google 代碼上,但源代碼現在在 github 上,支持 Windows、Mac、Linux。用戶(hù)指南非常詳細。
  這是界面,支持多種語(yǔ)言:
  
  圖一
  不好意思說(shuō)最近才學(xué)git,所以找到了這個(gè)ProGit??上Ч俜街挥衑pub格式的英文版下載??戳酥?,中文只有網(wǎng)頁(yè)版,所以想自己做一個(gè)。以下是如何執行此操作的示例。
  ePub格式歸根結底就是一個(gè)zip格式的壓縮包,里面定義了每個(gè)文件夾,里面收錄了文字、圖片等各種素材,如圖2
  
  圖2
  在Text下右擊“Add Blank HTML File”,會(huì )自動(dòng)創(chuàng )建一個(gè)名為Seciton0001.xhtml的空白文件。然后只需復制您想要的內容,它可以是純文本或網(wǎng)絡(luò )格式。見(jiàn)圖3
  
  圖 3
  它實(shí)際上是所見(jiàn)即所得(所見(jiàn)即所得),您可以查看它的各種元素。見(jiàn)圖4
  
  圖 4
  然后將要放到每個(gè)xhtml文件上的內容一個(gè)一個(gè)地放上去,可以在格式菜單中進(jìn)行粗體、斜體等修改。
  需要注意的是標題h1、h2、h3等(圖4)是用來(lái)定義書(shū)的??章節的,從小到大是收錄關(guān)系,p定義段落,定義好每一頁(yè)的標題后,我們就可以為我們的書(shū)創(chuàng )建一個(gè)目錄了,菜單工具->目錄->生成目錄(如圖5),確定目錄級別通過(guò)level選項來(lái)收錄,然后OK,會(huì )自動(dòng)生成目錄(如圖6).
  
  圖 4
  
  圖 5
  
  圖 6
  接下來(lái),添加封面,不然會(huì )尷尬:菜單工具->生成封面,將準備好的圖片添加到素材中。
  
  圖 7
  最后我們來(lái)潤色一下書(shū),菜單Tools -> Element Data Editor,添加title、author等參數。
  
  圖 8
  至此,一本書(shū)所需的基本東西都已經(jīng)完成,保存完畢,并自動(dòng)生成了一個(gè)標準的epub格式文件。
  有了它,添加到calibre后,選擇把書(shū)轉換成你需要的任何格式。
  
  圖 9
  完成。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(用Sigil加Calibre,支持Windows,Mac,Linux(組圖))
  因為看慣了??kindle pw,在電腦屏幕上看一大段文章很難專(zhuān)心,感覺(jué)很累。
  能夠為kpw帶來(lái)好的文章、博客、文檔、自組織材料等,真是太高興了??梢哉f(shuō),制作電子書(shū)已經(jīng)成為剛需,所以谷歌告訴我用Sigil加Calibre,就是用Sigil做一個(gè)標準的ePub格式,然后用Calibre轉換成你想要的任何格式。
  這里是 Sigil,它托管在 Google 代碼上,但源代碼現在在 github 上,支持 Windows、Mac、Linux。用戶(hù)指南非常詳細。
  這是界面,支持多種語(yǔ)言:
  
  圖一
  不好意思說(shuō)最近才學(xué)git,所以找到了這個(gè)ProGit??上Ч俜街挥衑pub格式的英文版下載??戳酥?,中文只有網(wǎng)頁(yè)版,所以想自己做一個(gè)。以下是如何執行此操作的示例。
  ePub格式歸根結底就是一個(gè)zip格式的壓縮包,里面定義了每個(gè)文件夾,里面收錄了文字、圖片等各種素材,如圖2
  
  圖2
  在Text下右擊“Add Blank HTML File”,會(huì )自動(dòng)創(chuàng )建一個(gè)名為Seciton0001.xhtml的空白文件。然后只需復制您想要的內容,它可以是純文本或網(wǎng)絡(luò )格式。見(jiàn)圖3
  
  圖 3
  它實(shí)際上是所見(jiàn)即所得(所見(jiàn)即所得),您可以查看它的各種元素。見(jiàn)圖4
  
  圖 4
  然后將要放到每個(gè)xhtml文件上的內容一個(gè)一個(gè)地放上去,可以在格式菜單中進(jìn)行粗體、斜體等修改。
  需要注意的是標題h1、h2、h3等(圖4)是用來(lái)定義書(shū)的??章節的,從小到大是收錄關(guān)系,p定義段落,定義好每一頁(yè)的標題后,我們就可以為我們的書(shū)創(chuàng )建一個(gè)目錄了,菜單工具->目錄->生成目錄(如圖5),確定目錄級別通過(guò)level選項來(lái)收錄,然后OK,會(huì )自動(dòng)生成目錄(如圖6).
  
  圖 4
  
  圖 5
  
  圖 6
  接下來(lái),添加封面,不然會(huì )尷尬:菜單工具->生成封面,將準備好的圖片添加到素材中。
  
  圖 7
  最后我們來(lái)潤色一下書(shū),菜單Tools -> Element Data Editor,添加title、author等參數。
  
  圖 8
  至此,一本書(shū)所需的基本東西都已經(jīng)完成,保存完畢,并自動(dòng)生成了一個(gè)標準的epub格式文件。
  有了它,添加到calibre后,選擇把書(shū)轉換成你需要的任何格式。
  
  圖 9
  完成。

抓取網(wǎng)頁(yè)生成電子書(shū)(易天下科技:網(wǎng)站建設需要注意的幾個(gè)注意事項)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-04-12 02:36 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(易天下科技:網(wǎng)站建設需要注意的幾個(gè)注意事項)
  億天下科技位于美麗的蘇州,專(zhuān)業(yè)從事網(wǎng)站建設。SEO經(jīng)過(guò)多年的優(yōu)化,已經(jīng)形成了自己的一套方法。今天就來(lái)說(shuō)說(shuō)網(wǎng)站的構建需要注意的幾點(diǎn):
  
  一、顯式網(wǎng)站主題
  我們通常做任何事情都有一定的目的。網(wǎng)站我們在建造時(shí)也是如此。網(wǎng)站在建設初期,要分析競爭對手,差異化內容定位,確定我們的目標人群,確定,后期網(wǎng)站建設會(huì )圍繞這個(gè)進(jìn)行。
  網(wǎng)站構建的時(shí)候一定要注重自己的強項,網(wǎng)站定位內容也應該是自己的專(zhuān)長(cháng)。抓住這一點(diǎn)聚合網(wǎng)站資源是網(wǎng)站成功的關(guān)鍵。
  二、url 的唯一性
  我們要保證網(wǎng)站的每一頁(yè)的唯一性,即一頁(yè)對應一個(gè)url,同時(shí)設置網(wǎng)站301來(lái)判斷頁(yè)面url的唯一性,準備好網(wǎng)站鏈接的設置可以保證每個(gè)頁(yè)面的權重集中而不分散,從而提高網(wǎng)站的排名。
  三、目錄結構規范化
  網(wǎng)站目錄結構的規范化可以提高爬蟲(chóng)的爬取效率,層級不宜過(guò)深以提高頁(yè)面的爬取概率。
  四、內鏈構建
  從一個(gè)新的 網(wǎng)站 開(kāi)始并不多。從構建前期就必須做好,比如內容頁(yè)的上一頁(yè)和下一頁(yè),側邊欄的相關(guān)調用等等,都必須在內循環(huán)的構建中完成,合理的內鏈結構可以大大縮短。頁(yè)面的收錄時(shí)間,所以需要了解網(wǎng)站生態(tài)內部鏈規則。
  五、網(wǎng)站地圖
  網(wǎng)站如果地圖配置了很多后臺程序自然生成的地圖,就可以了。這是非常簡(jiǎn)單和必要的。
  六、404 頁(yè)
  404頁(yè)面我想大部分站長(cháng)朋友都知道它的用途。站點(diǎn)中不存在或將不存在的所有頁(yè)面都應指向該頁(yè)面。404頁(yè)面的設置是搜索引擎友好的一種形式。, 所以 網(wǎng)站 必須在開(kāi)始構建時(shí)考慮在內。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(易天下科技:網(wǎng)站建設需要注意的幾個(gè)注意事項)
  億天下科技位于美麗的蘇州,專(zhuān)業(yè)從事網(wǎng)站建設。SEO經(jīng)過(guò)多年的優(yōu)化,已經(jīng)形成了自己的一套方法。今天就來(lái)說(shuō)說(shuō)網(wǎng)站的構建需要注意的幾點(diǎn):
  
  一、顯式網(wǎng)站主題
  我們通常做任何事情都有一定的目的。網(wǎng)站我們在建造時(shí)也是如此。網(wǎng)站在建設初期,要分析競爭對手,差異化內容定位,確定我們的目標人群,確定,后期網(wǎng)站建設會(huì )圍繞這個(gè)進(jìn)行。
  網(wǎng)站構建的時(shí)候一定要注重自己的強項,網(wǎng)站定位內容也應該是自己的專(zhuān)長(cháng)。抓住這一點(diǎn)聚合網(wǎng)站資源是網(wǎng)站成功的關(guān)鍵。
  二、url 的唯一性
  我們要保證網(wǎng)站的每一頁(yè)的唯一性,即一頁(yè)對應一個(gè)url,同時(shí)設置網(wǎng)站301來(lái)判斷頁(yè)面url的唯一性,準備好網(wǎng)站鏈接的設置可以保證每個(gè)頁(yè)面的權重集中而不分散,從而提高網(wǎng)站的排名。
  三、目錄結構規范化
  網(wǎng)站目錄結構的規范化可以提高爬蟲(chóng)的爬取效率,層級不宜過(guò)深以提高頁(yè)面的爬取概率。
  四、內鏈構建
  從一個(gè)新的 網(wǎng)站 開(kāi)始并不多。從構建前期就必須做好,比如內容頁(yè)的上一頁(yè)和下一頁(yè),側邊欄的相關(guān)調用等等,都必須在內循環(huán)的構建中完成,合理的內鏈結構可以大大縮短。頁(yè)面的收錄時(shí)間,所以需要了解網(wǎng)站生態(tài)內部鏈規則。
  五、網(wǎng)站地圖
  網(wǎng)站如果地圖配置了很多后臺程序自然生成的地圖,就可以了。這是非常簡(jiǎn)單和必要的。
  六、404 頁(yè)
  404頁(yè)面我想大部分站長(cháng)朋友都知道它的用途。站點(diǎn)中不存在或將不存在的所有頁(yè)面都應指向該頁(yè)面。404頁(yè)面的設置是搜索引擎友好的一種形式。, 所以 網(wǎng)站 必須在開(kāi)始構建時(shí)考慮在內。

抓取網(wǎng)頁(yè)生成電子書(shū)(Gitbook生成電子書(shū)的完整過(guò)程及安裝、命令、配置、文檔結構)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2022-04-11 06:19 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(Gitbook生成電子書(shū)的完整過(guò)程及安裝、命令、配置、文檔結構)
  本文詳細講解了從Gitbook生成電子書(shū)的完整流程,包括:安裝、命令、配置、文檔結構、電子書(shū)生成、部署。
  限于篇幅,本文不介紹任何Gitbook定制頁(yè)面的內容。
  如果想看Gitbook在線(xiàn)電子書(shū)的效果,請點(diǎn)這里:gitbook-notes
  概述
  GitBook 是一個(gè)命令行工具(和 Node.js 庫),用于使用 GitHub/Git 和 Markdown(或 AsciiDoc)構建精美的書(shū)籍。
  GitBook 可以將您的內容輸出為 網(wǎng)站(可自定義和可擴展)或電子書(shū)(PDF、ePub 或 Mobi)。
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  
  GitBook安裝本地安裝環(huán)境要求
  安裝 GitBook 很簡(jiǎn)單。您的系統只需要滿(mǎn)足這兩個(gè)要求:
  通過(guò) npm 安裝
  安裝 GitBook 的最佳方式是通過(guò) NPM。在終端提示符下,只需運行以下命令即可安裝 GitBook:
  $ npm install gitbook-cli -g
  gitbook-cli 是 GitBook 的命令行工具。它將自動(dòng)安裝所需版本的 GitBook 來(lái)構建一本書(shū)。
  執行以下命令檢查GitBook版本,驗證安裝成功。
  $ gitbook -V
  安裝歷史版本
  gitbook-cli 可以輕松下載和安裝其他版本的 GitBook 以測試您的書(shū)籍:
  $ gitbook fetch beta
  使用 gitbook ls-remote 將列出可下載的版本。
  創(chuàng )建圖書(shū)初始化
  GitBook 可以設置樣板書(shū):
  $ gitbook init
  如果你想將這本書(shū)創(chuàng )建到一個(gè)新目錄中,你可以通過(guò)運行 gitbook init ./directory 來(lái)實(shí)現。
  構造
  使用如下命令會(huì )在項目目錄下生成一個(gè)_book目錄,里面收錄了靜態(tài)站點(diǎn)的資源文件:
  $ gitbook build
  調試
  您可以使用選項 --log=debug 和 --debug 來(lái)獲得更好的錯誤消息(帶有堆棧跟蹤)。例如:
  $ gitbook build ./ --log=debug --debug
  啟動(dòng)服務(wù)
  使用以下命令將運行一個(gè)可以通過(guò) :4000/ 預覽書(shū)籍的 Web 服務(wù)
  $ gitbook serve
  GitBook 命令
  這里主要介紹GitBook的命令行工具gitbook-cli的一些命令。首先說(shuō)明兩點(diǎn):
  列出所有 gitbook 命令
  gitbook help
  輸出 gitbook-cli 的幫助信息
  gitbook --help
  生成靜態(tài)網(wǎng)頁(yè)
  gitbook build
  生成靜態(tài)網(wǎng)頁(yè)并運行服務(wù)器
  gitbook serve
  生成時(shí)指定gitbook的版本,不會(huì )先下載到本地
  gitbook build --gitbook=2.0.1
  列出所有本地 gitbook 版本
  gitbook ls
  列出遠程可用的 gitbook 版本
  gitbook ls-remote
  安裝對應的gitbook版本
  gitbook fetch 標簽/版本號
  更新到最新版本的 gitbook
  gitbook update
  卸載對應的gitbook版本
  gitbook uninstall 2.0.1
  指定日志級別
  gitbook build --log=debug
  輸出錯誤信息
  gitbook builid --debug
  Gitbook 目錄結構 GitBook 項目結構
  GitBook 使用簡(jiǎn)單的目錄結構。Summary 中列出的所有 Markdown / Asciidoc 文件(即 Summary.md 文件)都將轉換為 HTML。多語(yǔ)種書(shū)籍的結構略有不同。
  一個(gè)基本的 GitBook 電子書(shū)結構通常如下所示:
  .
├── book.json
├── README.md
├── SUMMARY.md
├── chapter-1/
| ├── README.md
| └── something.md
└── chapter-2/
├── README.md
└── something.md
  GitBook 特殊文件的特點(diǎn):
  文件描述
  book.json
  配置數據(可選)
  自述文件.md
  電子書(shū)的前言或介紹(必填)
  摘要.md
  電子書(shū)目錄(可選)
  詞匯表.md
  詞匯表/評論術(shù)語(yǔ)列表(可選)
  靜態(tài)文件和圖像
  靜態(tài)文件是未在 Summary.md 中列出的文件。除非被忽略,否則所有靜態(tài)文件都將復制到輸出路徑。
  忽略文件和文件夾
  GitBook 將讀取 .gitignore、.bookignore 和 .ignore 文件來(lái)過(guò)濾文件和文件夾。這些文件中的格式遵循 .gitignore 的規則:
  # This is a comment
# Ignore the file test.md
test.md
# Ignore everything in the directory "bin"
bin/*
  項目和子目錄集成
  對于軟件項目,您可以使用 docs/ 等子目錄來(lái)存儲項目的書(shū)籍文檔。您可以配置 root 選項以指示 GitBook 可以在其中找到圖書(shū)文件的文件夾:
  .
├── book.json
└── docs/
├── README.md
└── SUMMARY.md
  在 book.json 中配置以下內容:
  {
"root": "./docs"
}
  概括
  GitBook 使用SUMMARY.md 文件來(lái)定義本書(shū)的章節和子章節結構。Summary.md 文件用于生成本書(shū)的目錄。
  Summary.md 的格式是一個(gè)鏈表。鏈接的標題將是章節的標題,鏈接的目標是該章節文件的路徑。
  將嵌套列表添加到父章節將創(chuàng )建子章節。
  簡(jiǎn)單的例子:
  # Summary
* [Part I](part1/README.md)
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
* [Part II](part2/README.md)
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
  每章都有一個(gè)專(zhuān)門(mén)的頁(yè)面(part#/README.md)并分為小節。
  錨
  目錄中的章節可以使用錨點(diǎn)來(lái)指向文件的特定部分。
  # Summary
### Part I
* [Part I](part1/README.md)
* [Writing is nice](part1/README.md#writing)
* [GitBook is nice](part1/README.md#gitbook)
* [Part II](part2/README.md)
* [We love feedback](part2/README.md#feedback)
* [Better tools for authors](part2/README.md#tools)
  部分
  目錄可以分為由標題或水平線(xiàn)分隔的部分----:
  # Summary
### Part I
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
### Part II
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
----
* [Last part without title](part3/title.md)
  部分只是章節組,沒(méi)有專(zhuān)門(mén)的頁(yè)面,但根據主題,它會(huì )顯示在導航中。
  頁(yè)
  降價(jià)語(yǔ)法
  默認情況下,GitBook 的大部分文件都使用 Markdown 語(yǔ)法。GitBook 推薦這種語(yǔ)法。使用的語(yǔ)法類(lèi)似于 GitHub Flavored Markdown 語(yǔ)法。
  此外,您可以選擇 AsciiDoc 語(yǔ)法。
  頁(yè)面內容示例:
  # Title of the chapter
This is a great introduction.
## Section 1
Markdown will dictates _most_ of your **book&#39;s structure**
## Section 2
...
  頁(yè)前言
  頁(yè)面可以收錄可選的前言。它可以用來(lái)定義頁(yè)面的描述。前面的內容必須是文件中的第一個(gè)內容,并且必須采用在三段虛線(xiàn)之間設置的有效 YAML 的形式。這是一個(gè)基本示例:
  ---
description: This is a short description of my page
---
# The content of my page
...
  詞匯表
  允許您指定術(shù)語(yǔ)及其各自的定義以顯示為注釋?;谶@些術(shù)語(yǔ),GitBook 將自動(dòng)構建索引并突出顯示它們。
  GLOSSARY.md 的格式是 h2 標題列表和描述段落:
  ## Term
Definition for this term
## Another term
With it&#39;s definition, this can contain bold text
and all other kinds of inline markup ...
  Gitbook 配置
  GitBook 允許您使用靈活的配置自定義您的電子書(shū)。
  這些選項在 book.json 文件中指定。對于不熟悉 JSON 語(yǔ)法的作者,可以使用 JSONlint 等工具來(lái)驗證語(yǔ)法。
  常規設置變量描述
  根
  收錄除 book.json 之外的所有書(shū)籍文件的根文件夾的路徑
  結構體
  指定自述文件、摘要、詞匯表等參考的路徑。
  標題
  您的書(shū)名,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  描述
  你的書(shū)的描述,默認值是從自述文件中提取的。在 上,此字段已預先填寫(xiě)。
  作者
  作者姓名。在 上,此字段已預先填寫(xiě)。
  伊斯本
  國際標準書(shū)號 ISBN
  語(yǔ)言
  本書(shū)的語(yǔ)言類(lèi)型——ISO 代碼。默認值為 en
  方向
  文本閱讀順序??梢允?rtl(從右到左)或 ltr(從左到右),默認值取決于語(yǔ)言的值。
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范并接受 "&gt;= 3.0.0" 之類(lèi)的條件。
  作者
  作者姓名,on ,該字段是預填的。
  例子:
  "author" : "victor zhang"
  描述
  eBook 的描述,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "description" : "Gitbook 教程"
  方向
  文本的方向??梢允?rtl 或 ltr,默認值取決于語(yǔ)言值。
  例子:
  "direction" : "ltr"
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范,接受 &gt;=3.0.0 之類(lèi)的條件。
  例子:
  "gitbook" : "3.0.0",
"gitbook" : ">=3.0.0"
  語(yǔ)言
  Gitbook使用的語(yǔ)言,2.6.4版本可選語(yǔ)言如下:
  en, ar, bn, cs, de, en, es, fa, fi, fr, he, it, ja, ko, no, pl, pt, ro, ru, sv, uk, vi, zh-hans, zh-tw
  例子:
  "language" : "zh-hans",
  鏈接
  在左側導航欄中添加鏈接信息
  例子:
  "links" : {
"sidebar" : {
"Home" : "https://github.com/atlantis102 ... ot%3B
}
}
  根
  收錄所有書(shū)籍文件的根文件夾的路徑,除了 book.json 文件。
  例子:
  "root" : "./docs",
  結構體
  指定自述文件、摘要、詞匯表和語(yǔ)言的文件名。
  風(fēng)格
  自定義頁(yè)面樣式,默認每個(gè)生成器對應的css文件
  例子:
  "styles": {
"website": "styles/website.css",
"ebook": "styles/ebook.css",
"pdf": "styles/pdf.css",
"mobi": "styles/mobi.css",
"epub": "styles/epub.css"
}
  例如,要讓 h1、h2 標簽有下邊框,可以在 website.css 中設置
  h1 , h2{
border-bottom: 1px solid #EFEAEA;
}
  標題
  電子書(shū)的標題,默認值是從README中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "title" : "gitbook-notes",
  插件
  插件及其配置在 book.json 中指定。了解更多信息。
  GitBook 可以使用自版本 3.0.0 起的主題。有關(guān)詳細信息,請參閱主題部分。
  變量描述
  插件
  要加載的插件列表
  插件配置
  插件配置
  添加插件
  "plugins": [
"splitter"
]
  添加新插件后,需要運行 gitbook install 來(lái)安裝新插件
  刪除內置插件
  Gitbook 默認自帶 5 個(gè)插件:
  "plugins": [
"-search"
]
  結構體
  除了root屬性,還可以指定Readme、Summary、Glossary、Languages的名稱(chēng)(而不是使用默認名稱(chēng),比如README.md)。這些文件必須位于項目的根目錄(或根目錄,如果您在 book.json 中配置了 root 屬性)。不可接受的路徑,例如:dir/MY_README.md。
  變量描述
  結構.readme
  自述文件名(默認為 README.md)
  結構.摘要
  摘要文件名(默認為SUMMARY.md)
  結構.詞匯表
  詞匯表文件名(默認為 GLOSSARY.md)
  結構語(yǔ)言
  語(yǔ)言文件名(默認為 LANGS.md)
  pdf
  可以使用 book.json 中的一組選項自定義 PDF 輸出:
  變量描述
  pdf.pageNumbers
  在每頁(yè)底部添加頁(yè)碼(默認為 true)
  pdf.fontSize
  基本字體大?。J為 12)
  pdf.fontFamily
  基本字體樣式(默認為 Arial)
  pdf.paperSize
  頁(yè)面大小,選項有:'a0'、'a1'、'a2'、'a3'、'a4'、'a5'、'a6'、'b0'、'b1'、'b2'、'b3'、 'b4', 'b5', 'b6', 'legal', 'letter' (默認是a4)
  上限(默認為 56)
  pdf.margin.bottom
  下限(默認為 56)
  pdf.margin.right
  右邊框(默認為 62)
  pdf.margin.left
  左邊框(默認為 62)
  生成電子書(shū)
  GitBook 可以生成 網(wǎng)站,但也可以將內容輸出為電子書(shū)(ePub、Mobi、PDF)。
  # Generate a PDF file
$ gitbook pdf ./ ./mybook.pdf
# Generate an ePub file
$ gitbook epub ./ ./mybook.epub
# Generate a Mobi file
$ gitbook mobi ./ ./mybook.mobi
  安裝電子書(shū)轉換
  ebook-convert 可用于生成電子書(shū)(epub、mobi、pdf)。
  GNU/Linux
  安裝口徑應用程序。
  $ sudo aptitude install calibre
  在某些 GNU/Linux 發(fā)行版上,node 安裝為 nodejs,您需要手動(dòng)創(chuàng )建符號鏈接:
  $sudo ln -s /usr/bin/nodejs /usr/bin/node
  操作系統
  下載口徑應用程序。將 calibre.app 移動(dòng)到應用程序文件夾后,創(chuàng )建指向 ebook-convert 工具的符號鏈接:
  $ sudo ln -s ~/Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin
  您可以將 /usr/bin 替換為 $PATH 中的任何目錄。
  覆蓋
  封面用于所有電子書(shū)格式。您可以自己提供一個(gè)或使用自動(dòng)覆蓋插件生成一個(gè)。
  要提供封面,請將 cover.jpg 文件放在本書(shū)的根目錄中。添加一個(gè)cover_small.jpg 將指定一個(gè)較小版本的封面。封面應該是 JPEG 文件。
  一個(gè)好的封面應該遵循以下準則:
  Gitbook 部署托管到
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  創(chuàng )建新書(shū)
  如下圖所示,根據您的個(gè)人需求,選擇一個(gè)模板來(lái)創(chuàng )建您的電子書(shū)。
  
  設置圖書(shū)基本信息
  
  克隆到本地
  將為每本書(shū)創(chuàng )建一個(gè) git 存儲庫。
  如下圖,復制git地址,然后git clone到本地。
  
  釋放
  根據 Gitbook 規范在本地編輯電子書(shū),然后 git push 到 Gitbook 遠程倉庫。
  默認訪(fǎng)問(wèn)地址為:username.gitbooks.io/projectname/content/
  例如:我的用戶(hù)名為atlantis1024,一個(gè)電子書(shū)項目名為test,那么訪(fǎng)問(wèn)路徑為:
  當然,如果你有自己的域名,你也可以設置 Domains 選項來(lái)指定你的域的訪(fǎng)問(wèn)路徑。
  托管在 Github 上
  如果你不想使用 Gitbook 的倉庫,但想直接使用 Github 的倉庫,也是可以的。
  首先,你需要綁定你的 Github 賬號。最簡(jiǎn)單的方法當然是在登錄的時(shí)候使用Github賬號登錄方式,否則也可以在A(yíng)ccount Settings中的Github設置選項中進(jìn)行綁定。
  
  綁定 Github 賬號后,您可以在創(chuàng )建電子書(shū)時(shí)選擇從指定的 Github 倉庫導入電子書(shū)項目。請參考下圖:
  
  只要您指定的 Github 倉庫中的文檔內容符合 Gitbook 規范,Gitbook 就會(huì )根據您的每次更新自動(dòng)構建并生成電子書(shū)網(wǎng)站。
  默認訪(fǎng)問(wèn)地址為:
  https://Github用戶(hù)名.gitbooks.io/Github 倉庫/content/
  例如:我的用戶(hù)名是atlantis1024,Github倉庫名是gitbook-notes,那么訪(fǎng)問(wèn)路徑是:
  托管到 Github 頁(yè)面
  或許你之前也知道 Github 的一個(gè)特性:GitHub Pages。它允許用戶(hù)在 GitHub 存儲庫中托管您的個(gè)人、組織或項目的靜態(tài)頁(yè)面(自動(dòng)識別 html、css、javascript)。
  構建 xxx.github.io 倉庫
  要使用這個(gè)功能,首先要創(chuàng )建一個(gè)嚴格遵循命名要求的倉庫:Github賬號名.github.io 比如我的Github賬號是atlantis1024,那么這個(gè)倉庫應該叫atlantis1024.github.io . 通常,此存儲庫用作個(gè)人或組織博客。
  創(chuàng )建 gh-pages 分支
  完成步驟 1 后,在任何 Github 存儲庫中創(chuàng )建一個(gè)名為 gh-pages 的分支。只要 gh-pages 中的內容滿(mǎn)足靜態(tài)站點(diǎn)要求,就可以在如下地址訪(fǎng)問(wèn):username.gitbooks.io/Github 倉庫。例如:我的 Github 倉庫之一名為 react-notes,訪(fǎng)問(wèn)路徑為:
  自動(dòng)發(fā)布到 gh-pages
  如果每次手動(dòng) git push 到遠程的 gh-pages 分支,就有點(diǎn)麻煩了。
  如何實(shí)現自動(dòng)發(fā)布?
  有兩種方法:
  使用 gh-pages 插件
  如果您了解 Nodejs,最簡(jiǎn)單的發(fā)布方式是使用 gh-pages 插件。
  先在本地安裝插件
  $ npm i -D gh-pages
  然后,在 package.json 文件中添加腳本命令:
  如下: -d 命令參數后跟要發(fā)布的靜態(tài)站點(diǎn)內容的目錄
  "scripts": {
"deploy": "gh-pages -d build"
},
  腳本
  編寫(xiě)一個(gè)執行 git 命令的腳本,你就完成了。
  以下腳本可以在 bat 或 sh 腳本中執行。
  cd build
git init
git checkout -b gh-pages
git add .
git commit -am "Update"
git push git@github.com:atlantis1024/gitbook-notes gh-pages --force"
  資源 官方資源 教程 資源工具 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(Gitbook生成電子書(shū)的完整過(guò)程及安裝、命令、配置、文檔結構)
  本文詳細講解了從Gitbook生成電子書(shū)的完整流程,包括:安裝、命令、配置、文檔結構、電子書(shū)生成、部署。
  限于篇幅,本文不介紹任何Gitbook定制頁(yè)面的內容。
  如果想看Gitbook在線(xiàn)電子書(shū)的效果,請點(diǎn)這里:gitbook-notes
  概述
  GitBook 是一個(gè)命令行工具(和 Node.js 庫),用于使用 GitHub/Git 和 Markdown(或 AsciiDoc)構建精美的書(shū)籍。
  GitBook 可以將您的內容輸出為 網(wǎng)站(可自定義和可擴展)或電子書(shū)(PDF、ePub 或 Mobi)。
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  
  GitBook安裝本地安裝環(huán)境要求
  安裝 GitBook 很簡(jiǎn)單。您的系統只需要滿(mǎn)足這兩個(gè)要求:
  通過(guò) npm 安裝
  安裝 GitBook 的最佳方式是通過(guò) NPM。在終端提示符下,只需運行以下命令即可安裝 GitBook:
  $ npm install gitbook-cli -g
  gitbook-cli 是 GitBook 的命令行工具。它將自動(dòng)安裝所需版本的 GitBook 來(lái)構建一本書(shū)。
  執行以下命令檢查GitBook版本,驗證安裝成功。
  $ gitbook -V
  安裝歷史版本
  gitbook-cli 可以輕松下載和安裝其他版本的 GitBook 以測試您的書(shū)籍:
  $ gitbook fetch beta
  使用 gitbook ls-remote 將列出可下載的版本。
  創(chuàng )建圖書(shū)初始化
  GitBook 可以設置樣板書(shū):
  $ gitbook init
  如果你想將這本書(shū)創(chuàng )建到一個(gè)新目錄中,你可以通過(guò)運行 gitbook init ./directory 來(lái)實(shí)現。
  構造
  使用如下命令會(huì )在項目目錄下生成一個(gè)_book目錄,里面收錄了靜態(tài)站點(diǎn)的資源文件:
  $ gitbook build
  調試
  您可以使用選項 --log=debug 和 --debug 來(lái)獲得更好的錯誤消息(帶有堆棧跟蹤)。例如:
  $ gitbook build ./ --log=debug --debug
  啟動(dòng)服務(wù)
  使用以下命令將運行一個(gè)可以通過(guò) :4000/ 預覽書(shū)籍的 Web 服務(wù)
  $ gitbook serve
  GitBook 命令
  這里主要介紹GitBook的命令行工具gitbook-cli的一些命令。首先說(shuō)明兩點(diǎn):
  列出所有 gitbook 命令
  gitbook help
  輸出 gitbook-cli 的幫助信息
  gitbook --help
  生成靜態(tài)網(wǎng)頁(yè)
  gitbook build
  生成靜態(tài)網(wǎng)頁(yè)并運行服務(wù)器
  gitbook serve
  生成時(shí)指定gitbook的版本,不會(huì )先下載到本地
  gitbook build --gitbook=2.0.1
  列出所有本地 gitbook 版本
  gitbook ls
  列出遠程可用的 gitbook 版本
  gitbook ls-remote
  安裝對應的gitbook版本
  gitbook fetch 標簽/版本號
  更新到最新版本的 gitbook
  gitbook update
  卸載對應的gitbook版本
  gitbook uninstall 2.0.1
  指定日志級別
  gitbook build --log=debug
  輸出錯誤信息
  gitbook builid --debug
  Gitbook 目錄結構 GitBook 項目結構
  GitBook 使用簡(jiǎn)單的目錄結構。Summary 中列出的所有 Markdown / Asciidoc 文件(即 Summary.md 文件)都將轉換為 HTML。多語(yǔ)種書(shū)籍的結構略有不同。
  一個(gè)基本的 GitBook 電子書(shū)結構通常如下所示:
  .
├── book.json
├── README.md
├── SUMMARY.md
├── chapter-1/
| ├── README.md
| └── something.md
└── chapter-2/
├── README.md
└── something.md
  GitBook 特殊文件的特點(diǎn):
  文件描述
  book.json
  配置數據(可選)
  自述文件.md
  電子書(shū)的前言或介紹(必填)
  摘要.md
  電子書(shū)目錄(可選)
  詞匯表.md
  詞匯表/評論術(shù)語(yǔ)列表(可選)
  靜態(tài)文件和圖像
  靜態(tài)文件是未在 Summary.md 中列出的文件。除非被忽略,否則所有靜態(tài)文件都將復制到輸出路徑。
  忽略文件和文件夾
  GitBook 將讀取 .gitignore、.bookignore 和 .ignore 文件來(lái)過(guò)濾文件和文件夾。這些文件中的格式遵循 .gitignore 的規則:
  # This is a comment
# Ignore the file test.md
test.md
# Ignore everything in the directory "bin"
bin/*
  項目和子目錄集成
  對于軟件項目,您可以使用 docs/ 等子目錄來(lái)存儲項目的書(shū)籍文檔。您可以配置 root 選項以指示 GitBook 可以在其中找到圖書(shū)文件的文件夾:
  .
├── book.json
└── docs/
├── README.md
└── SUMMARY.md
  在 book.json 中配置以下內容:
  {
"root": "./docs"
}
  概括
  GitBook 使用SUMMARY.md 文件來(lái)定義本書(shū)的章節和子章節結構。Summary.md 文件用于生成本書(shū)的目錄。
  Summary.md 的格式是一個(gè)鏈表。鏈接的標題將是章節的標題,鏈接的目標是該章節文件的路徑。
  將嵌套列表添加到父章節將創(chuàng )建子章節。
  簡(jiǎn)單的例子:
  # Summary
* [Part I](part1/README.md)
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
* [Part II](part2/README.md)
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
  每章都有一個(gè)專(zhuān)門(mén)的頁(yè)面(part#/README.md)并分為小節。
  錨
  目錄中的章節可以使用錨點(diǎn)來(lái)指向文件的特定部分。
  # Summary
### Part I
* [Part I](part1/README.md)
* [Writing is nice](part1/README.md#writing)
* [GitBook is nice](part1/README.md#gitbook)
* [Part II](part2/README.md)
* [We love feedback](part2/README.md#feedback)
* [Better tools for authors](part2/README.md#tools)
  部分
  目錄可以分為由標題或水平線(xiàn)分隔的部分----:
  # Summary
### Part I
* [Writing is nice](part1/writing.md)
* [GitBook is nice](part1/gitbook.md)
### Part II
* [We love feedback](part2/feedback_please.md)
* [Better tools for authors](part2/better_tools.md)
----
* [Last part without title](part3/title.md)
  部分只是章節組,沒(méi)有專(zhuān)門(mén)的頁(yè)面,但根據主題,它會(huì )顯示在導航中。
  頁(yè)
  降價(jià)語(yǔ)法
  默認情況下,GitBook 的大部分文件都使用 Markdown 語(yǔ)法。GitBook 推薦這種語(yǔ)法。使用的語(yǔ)法類(lèi)似于 GitHub Flavored Markdown 語(yǔ)法。
  此外,您可以選擇 AsciiDoc 語(yǔ)法。
  頁(yè)面內容示例:
  # Title of the chapter
This is a great introduction.
## Section 1
Markdown will dictates _most_ of your **book&#39;s structure**
## Section 2
...
  頁(yè)前言
  頁(yè)面可以收錄可選的前言。它可以用來(lái)定義頁(yè)面的描述。前面的內容必須是文件中的第一個(gè)內容,并且必須采用在三段虛線(xiàn)之間設置的有效 YAML 的形式。這是一個(gè)基本示例:
  ---
description: This is a short description of my page
---
# The content of my page
...
  詞匯表
  允許您指定術(shù)語(yǔ)及其各自的定義以顯示為注釋?;谶@些術(shù)語(yǔ),GitBook 將自動(dòng)構建索引并突出顯示它們。
  GLOSSARY.md 的格式是 h2 標題列表和描述段落:
  ## Term
Definition for this term
## Another term
With it&#39;s definition, this can contain bold text
and all other kinds of inline markup ...
  Gitbook 配置
  GitBook 允許您使用靈活的配置自定義您的電子書(shū)。
  這些選項在 book.json 文件中指定。對于不熟悉 JSON 語(yǔ)法的作者,可以使用 JSONlint 等工具來(lái)驗證語(yǔ)法。
  常規設置變量描述
  根
  收錄除 book.json 之外的所有書(shū)籍文件的根文件夾的路徑
  結構體
  指定自述文件、摘要、詞匯表等參考的路徑。
  標題
  您的書(shū)名,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  描述
  你的書(shū)的描述,默認值是從自述文件中提取的。在 上,此字段已預先填寫(xiě)。
  作者
  作者姓名。在 上,此字段已預先填寫(xiě)。
  伊斯本
  國際標準書(shū)號 ISBN
  語(yǔ)言
  本書(shū)的語(yǔ)言類(lèi)型——ISO 代碼。默認值為 en
  方向
  文本閱讀順序??梢允?rtl(從右到左)或 ltr(從左到右),默認值取決于語(yǔ)言的值。
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范并接受 "&gt;= 3.0.0" 之類(lèi)的條件。
  作者
  作者姓名,on ,該字段是預填的。
  例子:
  "author" : "victor zhang"
  描述
  eBook 的描述,默認值是從 README 中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "description" : "Gitbook 教程"
  方向
  文本的方向??梢允?rtl 或 ltr,默認值取決于語(yǔ)言值。
  例子:
  "direction" : "ltr"
  gitbook
  應該使用的 GitBook 版本。使用 SemVer 規范,接受 &gt;=3.0.0 之類(lèi)的條件。
  例子:
  "gitbook" : "3.0.0",
"gitbook" : ">=3.0.0"
  語(yǔ)言
  Gitbook使用的語(yǔ)言,2.6.4版本可選語(yǔ)言如下:
  en, ar, bn, cs, de, en, es, fa, fi, fr, he, it, ja, ko, no, pl, pt, ro, ru, sv, uk, vi, zh-hans, zh-tw
  例子:
  "language" : "zh-hans",
  鏈接
  在左側導航欄中添加鏈接信息
  例子:
  "links" : {
"sidebar" : {
"Home" : "https://github.com/atlantis102 ... ot%3B
}
}
  根
  收錄所有書(shū)籍文件的根文件夾的路徑,除了 book.json 文件。
  例子:
  "root" : "./docs",
  結構體
  指定自述文件、摘要、詞匯表和語(yǔ)言的文件名。
  風(fēng)格
  自定義頁(yè)面樣式,默認每個(gè)生成器對應的css文件
  例子:
  "styles": {
"website": "styles/website.css",
"ebook": "styles/ebook.css",
"pdf": "styles/pdf.css",
"mobi": "styles/mobi.css",
"epub": "styles/epub.css"
}
  例如,要讓 h1、h2 標簽有下邊框,可以在 website.css 中設置
  h1 , h2{
border-bottom: 1px solid #EFEAEA;
}
  標題
  電子書(shū)的標題,默認值是從README中提取的。在 上,此字段已預先填寫(xiě)。
  例子:
  "title" : "gitbook-notes",
  插件
  插件及其配置在 book.json 中指定。了解更多信息。
  GitBook 可以使用自版本 3.0.0 起的主題。有關(guān)詳細信息,請參閱主題部分。
  變量描述
  插件
  要加載的插件列表
  插件配置
  插件配置
  添加插件
  "plugins": [
"splitter"
]
  添加新插件后,需要運行 gitbook install 來(lái)安裝新插件
  刪除內置插件
  Gitbook 默認自帶 5 個(gè)插件:
  "plugins": [
"-search"
]
  結構體
  除了root屬性,還可以指定Readme、Summary、Glossary、Languages的名稱(chēng)(而不是使用默認名稱(chēng),比如README.md)。這些文件必須位于項目的根目錄(或根目錄,如果您在 book.json 中配置了 root 屬性)。不可接受的路徑,例如:dir/MY_README.md。
  變量描述
  結構.readme
  自述文件名(默認為 README.md)
  結構.摘要
  摘要文件名(默認為SUMMARY.md)
  結構.詞匯表
  詞匯表文件名(默認為 GLOSSARY.md)
  結構語(yǔ)言
  語(yǔ)言文件名(默認為 LANGS.md)
  pdf
  可以使用 book.json 中的一組選項自定義 PDF 輸出:
  變量描述
  pdf.pageNumbers
  在每頁(yè)底部添加頁(yè)碼(默認為 true)
  pdf.fontSize
  基本字體大?。J為 12)
  pdf.fontFamily
  基本字體樣式(默認為 Arial)
  pdf.paperSize
  頁(yè)面大小,選項有:'a0'、'a1'、'a2'、'a3'、'a4'、'a5'、'a6'、'b0'、'b1'、'b2'、'b3'、 'b4', 'b5', 'b6', 'legal', 'letter' (默認是a4)
  上限(默認為 56)
  pdf.margin.bottom
  下限(默認為 56)
  pdf.margin.right
  右邊框(默認為 62)
  pdf.margin.left
  左邊框(默認為 62)
  生成電子書(shū)
  GitBook 可以生成 網(wǎng)站,但也可以將內容輸出為電子書(shū)(ePub、Mobi、PDF)。
  # Generate a PDF file
$ gitbook pdf ./ ./mybook.pdf
# Generate an ePub file
$ gitbook epub ./ ./mybook.epub
# Generate a Mobi file
$ gitbook mobi ./ ./mybook.mobi
  安裝電子書(shū)轉換
  ebook-convert 可用于生成電子書(shū)(epub、mobi、pdf)。
  GNU/Linux
  安裝口徑應用程序。
  $ sudo aptitude install calibre
  在某些 GNU/Linux 發(fā)行版上,node 安裝為 nodejs,您需要手動(dòng)創(chuàng )建符號鏈接:
  $sudo ln -s /usr/bin/nodejs /usr/bin/node
  操作系統
  下載口徑應用程序。將 calibre.app 移動(dòng)到應用程序文件夾后,創(chuàng )建指向 ebook-convert 工具的符號鏈接:
  $ sudo ln -s ~/Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin
  您可以將 /usr/bin 替換為 $PATH 中的任何目錄。
  覆蓋
  封面用于所有電子書(shū)格式。您可以自己提供一個(gè)或使用自動(dòng)覆蓋插件生成一個(gè)。
  要提供封面,請將 cover.jpg 文件放在本書(shū)的根目錄中。添加一個(gè)cover_small.jpg 將指定一個(gè)較小版本的封面。封面應該是 JPEG 文件。
  一個(gè)好的封面應該遵循以下準則:
  Gitbook 部署托管到
  是一個(gè)使用 GitBook 格式創(chuàng )建和托管書(shū)籍的在線(xiàn)平臺。它提供托管、協(xié)作功能和易于使用的編輯器。
  創(chuàng )建新書(shū)
  如下圖所示,根據您的個(gè)人需求,選擇一個(gè)模板來(lái)創(chuàng )建您的電子書(shū)。
  
  設置圖書(shū)基本信息
  
  克隆到本地
  將為每本書(shū)創(chuàng )建一個(gè) git 存儲庫。
  如下圖,復制git地址,然后git clone到本地。
  
  釋放
  根據 Gitbook 規范在本地編輯電子書(shū),然后 git push 到 Gitbook 遠程倉庫。
  默認訪(fǎng)問(wèn)地址為:username.gitbooks.io/projectname/content/
  例如:我的用戶(hù)名為atlantis1024,一個(gè)電子書(shū)項目名為test,那么訪(fǎng)問(wèn)路徑為:
  當然,如果你有自己的域名,你也可以設置 Domains 選項來(lái)指定你的域的訪(fǎng)問(wèn)路徑。
  托管在 Github 上
  如果你不想使用 Gitbook 的倉庫,但想直接使用 Github 的倉庫,也是可以的。
  首先,你需要綁定你的 Github 賬號。最簡(jiǎn)單的方法當然是在登錄的時(shí)候使用Github賬號登錄方式,否則也可以在A(yíng)ccount Settings中的Github設置選項中進(jìn)行綁定。
  
  綁定 Github 賬號后,您可以在創(chuàng )建電子書(shū)時(shí)選擇從指定的 Github 倉庫導入電子書(shū)項目。請參考下圖:
  
  只要您指定的 Github 倉庫中的文檔內容符合 Gitbook 規范,Gitbook 就會(huì )根據您的每次更新自動(dòng)構建并生成電子書(shū)網(wǎng)站。
  默認訪(fǎng)問(wèn)地址為:
  https://Github用戶(hù)名.gitbooks.io/Github 倉庫/content/
  例如:我的用戶(hù)名是atlantis1024,Github倉庫名是gitbook-notes,那么訪(fǎng)問(wèn)路徑是:
  托管到 Github 頁(yè)面
  或許你之前也知道 Github 的一個(gè)特性:GitHub Pages。它允許用戶(hù)在 GitHub 存儲庫中托管您的個(gè)人、組織或項目的靜態(tài)頁(yè)面(自動(dòng)識別 html、css、javascript)。
  構建 xxx.github.io 倉庫
  要使用這個(gè)功能,首先要創(chuàng )建一個(gè)嚴格遵循命名要求的倉庫:Github賬號名.github.io 比如我的Github賬號是atlantis1024,那么這個(gè)倉庫應該叫atlantis1024.github.io . 通常,此存儲庫用作個(gè)人或組織博客。
  創(chuàng )建 gh-pages 分支
  完成步驟 1 后,在任何 Github 存儲庫中創(chuàng )建一個(gè)名為 gh-pages 的分支。只要 gh-pages 中的內容滿(mǎn)足靜態(tài)站點(diǎn)要求,就可以在如下地址訪(fǎng)問(wèn):username.gitbooks.io/Github 倉庫。例如:我的 Github 倉庫之一名為 react-notes,訪(fǎng)問(wèn)路徑為:
  自動(dòng)發(fā)布到 gh-pages
  如果每次手動(dòng) git push 到遠程的 gh-pages 分支,就有點(diǎn)麻煩了。
  如何實(shí)現自動(dòng)發(fā)布?
  有兩種方法:
  使用 gh-pages 插件
  如果您了解 Nodejs,最簡(jiǎn)單的發(fā)布方式是使用 gh-pages 插件。
  先在本地安裝插件
  $ npm i -D gh-pages
  然后,在 package.json 文件中添加腳本命令:
  如下: -d 命令參數后跟要發(fā)布的靜態(tài)站點(diǎn)內容的目錄
  "scripts": {
"deploy": "gh-pages -d build"
},
  腳本
  編寫(xiě)一個(gè)執行 git 命令的腳本,你就完成了。
  以下腳本可以在 bat 或 sh 腳本中執行。
  cd build
git init
git checkout -b gh-pages
git add .
git commit -am "Update"
git push git@github.com:atlantis1024/gitbook-notes gh-pages --force"
  資源 官方資源 教程 資源工具

抓取網(wǎng)頁(yè)生成電子書(shū)( 的“我的E站”設計制作)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2022-04-11 04:24 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
的“我的E站”設計制作)
  
  本書(shū)采用的“我的E站”項目的設計與制作,為讀者全面展示了網(wǎng)站設計與網(wǎng)頁(yè)制作的基礎知識,讓沒(méi)有網(wǎng)頁(yè)制作基礎知識的讀者也能輕松上手。發(fā)展和產(chǎn)生自己的想法。網(wǎng)站 的。本書(shū)遵循網(wǎng)站開(kāi)發(fā)的大致流程,主要介紹網(wǎng)站前期規劃;網(wǎng)站結構創(chuàng )建;網(wǎng)頁(yè)界面設計;簡(jiǎn)單的圖像處理;圖像和文本、列表、表格、模板和表單 DIV+CSS 標準布局;CSS 樣式應用程序;多媒體和 Flash 應用程序;JavaScript 基礎應用;網(wǎng)站創(chuàng )建和上傳;網(wǎng)站 兼容性測試;文書(shū)寫(xiě)作;響應式設計等。本書(shū)免費提供書(shū)中所有資料。此外,全國計算機信息高技術(shù)考試高級網(wǎng)頁(yè)制作人員網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。
  ·點(diǎn)擊進(jìn)入下載地址
  這本書(shū)有電子版。如果無(wú)法下載,請加入我們的Q群:972703811聯(lián)系獲取。
  · 圍觀(guān):下載的電子書(shū)丟失或不完整怎么辦?
  ·干貨:哪里可以下載電子書(shū)資源?
  尖端: 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
的“我的E站”設計制作)
  
  本書(shū)采用的“我的E站”項目的設計與制作,為讀者全面展示了網(wǎng)站設計與網(wǎng)頁(yè)制作的基礎知識,讓沒(méi)有網(wǎng)頁(yè)制作基礎知識的讀者也能輕松上手。發(fā)展和產(chǎn)生自己的想法。網(wǎng)站 的。本書(shū)遵循網(wǎng)站開(kāi)發(fā)的大致流程,主要介紹網(wǎng)站前期規劃;網(wǎng)站結構創(chuàng )建;網(wǎng)頁(yè)界面設計;簡(jiǎn)單的圖像處理;圖像和文本、列表、表格、模板和表單 DIV+CSS 標準布局;CSS 樣式應用程序;多媒體和 Flash 應用程序;JavaScript 基礎應用;網(wǎng)站創(chuàng )建和上傳;網(wǎng)站 兼容性測試;文書(shū)寫(xiě)作;響應式設計等。本書(shū)免費提供書(shū)中所有資料。此外,全國計算機信息高技術(shù)考試高級網(wǎng)頁(yè)制作人員網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。全國計算機信息高技術(shù)高級網(wǎng)頁(yè)制作人員考試網(wǎng)頁(yè)制作技能強化綜合練習題8套。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。技能強化培訓材料均為原創(chuàng )作品以上資源可從華信教育資源網(wǎng)()下載。同時(shí)附有微課視頻,可在書(shū)內二維碼掃描學(xué)習。本書(shū)是專(zhuān)為高等職業(yè)教育計算機、美術(shù)設計、電子商務(wù)專(zhuān)業(yè)的網(wǎng)站設計與網(wǎng)頁(yè)制作課程的專(zhuān)業(yè)教材。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。@網(wǎng)站專(zhuān)為高等職業(yè)教育計算機、藝術(shù)設計、電子商務(wù)專(zhuān)業(yè)開(kāi)設的設計與網(wǎng)頁(yè)制作課程。也可以作為高級網(wǎng)頁(yè)制作者的培訓教材。
  ·點(diǎn)擊進(jìn)入下載地址
  這本書(shū)有電子版。如果無(wú)法下載,請加入我們的Q群:972703811聯(lián)系獲取。
  · 圍觀(guān):下載的電子書(shū)丟失或不完整怎么辦?
  ·干貨:哪里可以下載電子書(shū)資源?
  尖端:

抓取網(wǎng)頁(yè)生成電子書(shū)( Android移動(dòng)開(kāi)發(fā)基礎案例教程-爬取電子書(shū))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-04-11 03:30 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
Android移動(dòng)開(kāi)發(fā)基礎案例教程-爬取電子書(shū))
  
  
  前言
  為了省錢(qián),小編找了一本電子書(shū)網(wǎng)站,“學(xué)霸”,小編搜了一下,找到了“學(xué)霸清華”
  
  但不是唯一的,還有“學(xué)術(shù)北京師范大學(xué)珠海分?!?,應該是學(xué)校后綴的。
  
  一旦我們注冊了一個(gè)帳戶(hù),我們就可以開(kāi)始抓取我們想要的電子書(shū)了。
  這兩個(gè)網(wǎng)站結構相似。
  爬取分析
  編輯選擇這個(gè)url作為爬蟲(chóng)
  我們以爬取《Android移動(dòng)開(kāi)發(fā)基礎案例教程》為例
  
  打開(kāi)開(kāi)發(fā)者工具,翻了幾頁(yè)發(fā)現是動(dòng)態(tài)加載的,url如下
  
  我們看到url中有一個(gè)參數t,說(shuō)明在請求的時(shí)候需要構造這個(gè)參數t,并拼接url來(lái)請求它
  
  視覺(jué)上可能是時(shí)間戳,我們可以使用 time.time() 來(lái)生成時(shí)間戳
  
  與參數t相比,python代碼生成小數,長(cháng)度不同。乘以 1000 然后使用 int() 函數使其長(cháng)度與參數 t 相同,但 int() 直接丟棄小數點(diǎn)。是的,我們不知道t是否取整,所以為了保證一次性請求成功,編輯器直接執行生成參數t的js代碼,生成對應的參數t,即絕對正確。
  js生成時(shí)間戳的代碼如下
  
  在python中使用execjs執行js代碼
  
  這樣,我們爬取請求的必要參數就解決了。
  其余的可以根據爬蟲(chóng)邏輯直接寫(xiě)。
  注意pdf只能瀏覽前十頁(yè)。如果你想全部瀏覽,你需要登錄并在請求頭中放一個(gè)cookie。
  pdf合并
  爬下來(lái)后是pdf文件,文件名以頁(yè)碼命名,我們需要全部合并成pdf,代碼如下:
  
  綜合結果如下:
  
  合并完成后,我們就有了電子書(shū)。
  吃飽喝足的感覺(jué)真好,這樣我就可以省錢(qián)買(mǎi)皮了。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
Android移動(dòng)開(kāi)發(fā)基礎案例教程-爬取電子書(shū))
  
  
  前言
  為了省錢(qián),小編找了一本電子書(shū)網(wǎng)站,“學(xué)霸”,小編搜了一下,找到了“學(xué)霸清華”
  
  但不是唯一的,還有“學(xué)術(shù)北京師范大學(xué)珠海分?!?,應該是學(xué)校后綴的。
  
  一旦我們注冊了一個(gè)帳戶(hù),我們就可以開(kāi)始抓取我們想要的電子書(shū)了。
  這兩個(gè)網(wǎng)站結構相似。
  爬取分析
  編輯選擇這個(gè)url作為爬蟲(chóng)
  我們以爬取《Android移動(dòng)開(kāi)發(fā)基礎案例教程》為例
  
  打開(kāi)開(kāi)發(fā)者工具,翻了幾頁(yè)發(fā)現是動(dòng)態(tài)加載的,url如下
  
  我們看到url中有一個(gè)參數t,說(shuō)明在請求的時(shí)候需要構造這個(gè)參數t,并拼接url來(lái)請求它
  
  視覺(jué)上可能是時(shí)間戳,我們可以使用 time.time() 來(lái)生成時(shí)間戳
  
  與參數t相比,python代碼生成小數,長(cháng)度不同。乘以 1000 然后使用 int() 函數使其長(cháng)度與參數 t 相同,但 int() 直接丟棄小數點(diǎn)。是的,我們不知道t是否取整,所以為了保證一次性請求成功,編輯器直接執行生成參數t的js代碼,生成對應的參數t,即絕對正確。
  js生成時(shí)間戳的代碼如下
  
  在python中使用execjs執行js代碼
  
  這樣,我們爬取請求的必要參數就解決了。
  其余的可以根據爬蟲(chóng)邏輯直接寫(xiě)。
  注意pdf只能瀏覽前十頁(yè)。如果你想全部瀏覽,你需要登錄并在請求頭中放一個(gè)cookie。
  pdf合并
  爬下來(lái)后是pdf文件,文件名以頁(yè)碼命名,我們需要全部合并成pdf,代碼如下:
  
  綜合結果如下:
  
  合并完成后,我們就有了電子書(shū)。
  吃飽喝足的感覺(jué)真好,這樣我就可以省錢(qián)買(mǎi)皮了。

抓取網(wǎng)頁(yè)生成電子書(shū)(【,】)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 150 次瀏覽 ? 2022-04-05 03:11 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(【,】)
  網(wǎng)絡(luò )視頻采集工具正式版通過(guò)/fileview_2523891.html上傳到126下載網(wǎng)免費下載。
  [color=#008000]================================= === ====[/color][color=#f00000]重要提示:【網(wǎng)絡(luò )視頻爬蟲(chóng)】已更新至最新穩定版! [/color][color=#f00000]功能更穩定更強大!永遠免費!其他版本已過(guò)期,請下載最新版本↓↓[/color][color=#008000]最新穩定版可以高速下載:[ /color][ /b][b][color=#0000f0]點(diǎn)擊這里立即下載[/color] [color=#008000]電信用戶(hù)高速下載:[/color][color=#0000f0]電信下載一個(gè)[/color][color=#0000f0]電信下載2[/color] [color=#008000]高速下載來(lái)自其他網(wǎng)絡(luò ):[/color][color=#0000f0]高速下載一個(gè)[/color][color=#0000f0]高速下載二[/color] [color=#008000]==== ==== ================================[/color] 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(【,】)
  網(wǎng)絡(luò )視頻采集工具正式版通過(guò)/fileview_2523891.html上傳到126下載網(wǎng)免費下載。
  [color=#008000]================================= === ====[/color][color=#f00000]重要提示:【網(wǎng)絡(luò )視頻爬蟲(chóng)】已更新至最新穩定版! [/color][color=#f00000]功能更穩定更強大!永遠免費!其他版本已過(guò)期,請下載最新版本↓↓[/color][color=#008000]最新穩定版可以高速下載:[ /color][ /b][b][color=#0000f0]點(diǎn)擊這里立即下載[/color] [color=#008000]電信用戶(hù)高速下載:[/color][color=#0000f0]電信下載一個(gè)[/color][color=#0000f0]電信下載2[/color] [color=#008000]高速下載來(lái)自其他網(wǎng)絡(luò ):[/color][color=#0000f0]高速下載一個(gè)[/color][color=#0000f0]高速下載二[/color] [color=#008000]==== ==== ================================[/color]

抓取網(wǎng)頁(yè)生成電子書(shū)( 全篇的實(shí)現思路分析網(wǎng)頁(yè)學(xué)會(huì )使用BeautifulSoup庫爬取并導出參考資料)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 95 次瀏覽 ? 2022-03-31 16:00 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(
全篇的實(shí)現思路分析網(wǎng)頁(yè)學(xué)會(huì )使用BeautifulSoup庫爬取并導出參考資料)
  Python 抓取網(wǎng)頁(yè)并將其轉換為 PDF 文件
  爬行動(dòng)物的成因
  雖然可以查閱官方文件或手冊,但如果是紙質(zhì)的,是不是更容易閱讀和記憶。如果是簡(jiǎn)單的復制粘貼,不知道什么時(shí)候能完成。于是我開(kāi)始考慮爬下安卓官方手冊。
  整篇文章的實(shí)現思路
  分析網(wǎng)頁(yè),學(xué)習使用BeautifulSoup庫爬取導出
  參考:
  * 將廖雪峰的教程轉換成PDF電子書(shū)
  * 請求文件
  * 美麗的湯文檔
  配置
  Ubuntu下使用Pycharm成功運行
  要轉換PDF,您需要下載wkhtmltopdf
  具體流程
  網(wǎng)頁(yè)分析
  如下圖的一個(gè)網(wǎng)頁(yè),要做的就是獲取網(wǎng)頁(yè)的body和title,以及左側導航欄的所有url
  
  接下來(lái)的工作是找到這些標簽......
  關(guān)于請求的使用
  詳細參考文檔,這里只是簡(jiǎn)單的使用Requests獲取html并使用代理翻墻(網(wǎng)站不能直接訪(fǎng)問(wèn),需要VPN)
  
proxies={
"http":"http://vpn的IP:port",
"https":"https://vpn的IP:port",
}
response=requests.get(url,proxies=proxies)
  美湯的使用
  參考資料中有一個(gè) Beautiful Soup 文檔??赐昕梢灾烙袃杉拢阂皇钦覙撕?,二是修改標簽。
  這篇文章需要做的是:
  1. 獲取標題和所有url,這涉及到查找標簽
  
#對標簽進(jìn)行判斷,一個(gè)標簽含有href而不含有description,則返回true
#而我希望獲取的是含有href屬性而不含有description屬性的<a>標簽,(且只有a標簽含有href)
def has_href_but_no_des(tag):
return tag.has_attr('href') and not tag.has_attr('description')
#網(wǎng)頁(yè)分析,獲取網(wǎng)址和標題
def parse_url_to_html(url):
response=requests.get(url,proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
s=[]#獲取所有的網(wǎng)址
title=[]#獲取對應的標題
tag=soup.find(id="nav")#獲取第一個(gè)id為"nav"的標簽,這個(gè)里面包含了網(wǎng)址和標題
for i in tag.find_all(has_href_but_no_des):
s.append(i['href'])
title.append(i.text)
#獲取的只是標簽集,需要加html前綴
htmls = ""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  解析上面得到的URL,獲取文本,取出圖片保存在本地;它涉及查找標簽和修改屬性
  
#網(wǎng)頁(yè)操作,獲取正文及圖片
def get_htmls(urls,title):
for i in range(len(urls)):
response=requests.get(urls[i],proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
htmls=""+str(i)+"."+title[i]+""
tag=soup.find(class_='jd-descr')
#為image添加相對路徑,并下載圖片
for img in tag.find_all('img'):
im = requests.get(img['src'], proxies=proxies)
filename = os.path.split(img['src'])[1]
with open('image/' + filename, 'wb') as f:
f.write(im.content)
img['src']='image/'+filename
htmls=htmls+str(tag)
with open("android_training_3.html",'a') as f:
f.write(htmls)
print(" (%s) [%s] download end"%(i,title[i]))
htmls=""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  2.轉換為PDF
  這一步需要下載wkhtmltopdf,在Windows下執行程序總是報錯。你可以在 Ubuntu 下完成
  
def save_pdf(html):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(html, "android_training_3.pdf", options=options)
  最終效果圖
  
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持來(lái)客網(wǎng)。 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(
全篇的實(shí)現思路分析網(wǎng)頁(yè)學(xué)會(huì )使用BeautifulSoup庫爬取并導出參考資料)
  Python 抓取網(wǎng)頁(yè)并將其轉換為 PDF 文件
  爬行動(dòng)物的成因
  雖然可以查閱官方文件或手冊,但如果是紙質(zhì)的,是不是更容易閱讀和記憶。如果是簡(jiǎn)單的復制粘貼,不知道什么時(shí)候能完成。于是我開(kāi)始考慮爬下安卓官方手冊。
  整篇文章的實(shí)現思路
  分析網(wǎng)頁(yè),學(xué)習使用BeautifulSoup庫爬取導出
  參考:
  * 將廖雪峰的教程轉換成PDF電子書(shū)
  * 請求文件
  * 美麗的湯文檔
  配置
  Ubuntu下使用Pycharm成功運行
  要轉換PDF,您需要下載wkhtmltopdf
  具體流程
  網(wǎng)頁(yè)分析
  如下圖的一個(gè)網(wǎng)頁(yè),要做的就是獲取網(wǎng)頁(yè)的body和title,以及左側導航欄的所有url
  
  接下來(lái)的工作是找到這些標簽......
  關(guān)于請求的使用
  詳細參考文檔,這里只是簡(jiǎn)單的使用Requests獲取html并使用代理翻墻(網(wǎng)站不能直接訪(fǎng)問(wèn),需要VPN)
  
proxies={
"http":"http://vpn的IP:port",
"https":"https://vpn的IP:port",
}
response=requests.get(url,proxies=proxies)
  美湯的使用
  參考資料中有一個(gè) Beautiful Soup 文檔??赐昕梢灾烙袃杉拢阂皇钦覙撕?,二是修改標簽。
  這篇文章需要做的是:
  1. 獲取標題和所有url,這涉及到查找標簽
  
#對標簽進(jìn)行判斷,一個(gè)標簽含有href而不含有description,則返回true
#而我希望獲取的是含有href屬性而不含有description屬性的<a>標簽,(且只有a標簽含有href)
def has_href_but_no_des(tag):
return tag.has_attr('href') and not tag.has_attr('description')
#網(wǎng)頁(yè)分析,獲取網(wǎng)址和標題
def parse_url_to_html(url):
response=requests.get(url,proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
s=[]#獲取所有的網(wǎng)址
title=[]#獲取對應的標題
tag=soup.find(id="nav")#獲取第一個(gè)id為"nav"的標簽,這個(gè)里面包含了網(wǎng)址和標題
for i in tag.find_all(has_href_but_no_des):
s.append(i['href'])
title.append(i.text)
#獲取的只是標簽集,需要加html前綴
htmls = ""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  解析上面得到的URL,獲取文本,取出圖片保存在本地;它涉及查找標簽和修改屬性
  
#網(wǎng)頁(yè)操作,獲取正文及圖片
def get_htmls(urls,title):
for i in range(len(urls)):
response=requests.get(urls[i],proxies=proxies)
soup=BeautifulSoup(response.content,"html.parser")
htmls=""+str(i)+"."+title[i]+""
tag=soup.find(class_='jd-descr')
#為image添加相對路徑,并下載圖片
for img in tag.find_all('img'):
im = requests.get(img['src'], proxies=proxies)
filename = os.path.split(img['src'])[1]
with open('image/' + filename, 'wb') as f:
f.write(im.content)
img['src']='image/'+filename
htmls=htmls+str(tag)
with open("android_training_3.html",'a') as f:
f.write(htmls)
print(" (%s) [%s] download end"%(i,title[i]))
htmls=""
with open("android_training_3.html",'a') as f:
f.write(htmls)
  2.轉換為PDF
  這一步需要下載wkhtmltopdf,在Windows下執行程序總是報錯。你可以在 Ubuntu 下完成
  
def save_pdf(html):
"""
把所有html文件轉換成pdf文件
"""
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
pdfkit.from_file(html, "android_training_3.pdf", options=options)
  最終效果圖
  
  以上就是本文的全部?jì)热?。希望對大家的學(xué)習有所幫助,也希望大家多多支持來(lái)客網(wǎng)。

抓取網(wǎng)頁(yè)生成電子書(shū)(抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-03-30 14:06 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份)
  抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份電子書(shū)。用selenium可以用chrome代替javascript。
  一般來(lái)說(shuō)可以用php模擬瀏覽器請求成功后會(huì )返回json數據,
  模擬瀏覽器ajax請求獲取
  php里用activexdom實(shí)現,另外js里也可以,不過(guò)不是很清楚,另外還有html5里也可以寫(xiě)ajax解析,說(shuō)起來(lái)可能有點(diǎn)多,沒(méi)必要這么折騰,直接用xmlhttprequest-generator就行了。
  php里用activex,js用ajax,如果不能復制粘貼,可以用cmd+tab,選擇editcontentfile。模擬瀏覽器就是chrome,系統自帶的控制臺,
  activex是windows,activex不能直接解析html,需要用ajax。ajax是瀏覽器向服務(wù)器發(fā)送請求,然后服務(wù)器處理數據并返回給瀏覽器的一種技術(shù)。實(shí)現方法就是windows自帶的開(kāi)發(fā)工具,瀏覽器右鍵調試窗口,進(jìn)入開(kāi)發(fā)選項,選擇在控制臺模式下,在windows系統中選擇:服務(wù)器版模式。另外一種是把鏈接復制到電腦瀏覽器輸入,瀏覽器就能解析,netscape也支持瀏覽器輸入,不過(guò)windows下生成的代碼不能讀取。
  看看這篇文章[轉載]一個(gè)http請求生成html電子書(shū)
  php可以用tomcat做webserver, 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份)
  抓取網(wǎng)頁(yè)生成電子書(shū),也就是把網(wǎng)頁(yè)內容“脫序”生成一份電子書(shū)。用selenium可以用chrome代替javascript。
  一般來(lái)說(shuō)可以用php模擬瀏覽器請求成功后會(huì )返回json數據,
  模擬瀏覽器ajax請求獲取
  php里用activexdom實(shí)現,另外js里也可以,不過(guò)不是很清楚,另外還有html5里也可以寫(xiě)ajax解析,說(shuō)起來(lái)可能有點(diǎn)多,沒(méi)必要這么折騰,直接用xmlhttprequest-generator就行了。
  php里用activex,js用ajax,如果不能復制粘貼,可以用cmd+tab,選擇editcontentfile。模擬瀏覽器就是chrome,系統自帶的控制臺,
  activex是windows,activex不能直接解析html,需要用ajax。ajax是瀏覽器向服務(wù)器發(fā)送請求,然后服務(wù)器處理數據并返回給瀏覽器的一種技術(shù)。實(shí)現方法就是windows自帶的開(kāi)發(fā)工具,瀏覽器右鍵調試窗口,進(jìn)入開(kāi)發(fā)選項,選擇在控制臺模式下,在windows系統中選擇:服務(wù)器版模式。另外一種是把鏈接復制到電腦瀏覽器輸入,瀏覽器就能解析,netscape也支持瀏覽器輸入,不過(guò)windows下生成的代碼不能讀取。
  看看這篇文章[轉載]一個(gè)http請求生成html電子書(shū)
  php可以用tomcat做webserver,

抓取網(wǎng)頁(yè)生成電子書(shū)(這篇.+jade博客所有文章生成靜態(tài)html文件的實(shí)例小編)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 115 次瀏覽 ? 2022-03-29 21:12 ? 來(lái)自相關(guān)話(huà)題

  抓取網(wǎng)頁(yè)生成電子書(shū)(這篇.+jade博客所有文章生成靜態(tài)html文件的實(shí)例小編)
  在這個(gè)文章中,我們將從上面的采集中整理出所有文章列表的信息,啟動(dòng)采集文章,生成靜態(tài)html文件。來(lái)看看我的采集的效果,我的博客目前有77篇文章文章,不到1分鐘就全部生成了采集,這里我截了一些圖片,文件name是生成文章的id,生成的文章,我寫(xiě)了一個(gè)簡(jiǎn)單的靜態(tài)模板,所有的文章都是按照這個(gè)模板生成的。
  項目結構:
  
  
  
  好,接下來(lái),我們來(lái)解釋一下這個(gè)文章的主要功能:
  1.抓取文章,主要抓取文章的標題、內容、超鏈接、文章id(用于生成靜態(tài)html文件)
  2.根據jade模板生成html文件
  一、爬取文章是如何完成的?
  很簡(jiǎn)單,類(lèi)似于上面抓取文章列表的實(shí)現
  
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
  參數url是文章的地址。抓取到文章的內容后,調用filterArticle(html)過(guò)濾出需要的文章信息(id、title、hyperlink、content),然后使用jade的renderFile的api替換模板內容,
  模板內容替換后,肯定要生成html文件,所以使用writeFile寫(xiě)入文件,寫(xiě)入文件時(shí),使用id作為html文件的名稱(chēng)。這是生成靜態(tài)html文件的實(shí)現,
  下一步就是循環(huán)生成一個(gè)靜態(tài)html文件,就是下面這行:
  if (aUrl.length) crawlerArc(aUrl.shift());
  aUrl 保存了我博客的所有文章 url,每次采集 寫(xiě)完一篇文章,刪除當前文章 的url,讓下一篇文章 @文章的url出來(lái)了,繼續采集
  完整的實(shí)現代碼服務(wù)器:
  
var fs = require( 'fs' );
var http = require( 'http' );
var cheerio = require( 'cheerio' );
var jade = require( 'jade' );
var aList = [];
var aUrl = [];
function filterArticle(html) {
var $ = cheerio.load( html );
var arcDetail = {};
var title = $( "#cb_post_title_url" ).text();
var href = $( "#cb_post_title_url" ).attr( "href" );
var re = /\/(\d+)\.html/;
var id = href.match( re )[1];
var body = $( "#cnblogs_post_body" ).html();
return {
id : id,
title : title,
href : href,
body : body
};
}
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
function filterHtml(html) {
var $ = cheerio.load(html);
var arcList = [];
var aPost = $("#content").find(".post-list-item");
aPost.each(function () {
var ele = $(this);
var title = ele.find("h2 a").text();
var url = ele.find("h2 a").attr("href");
ele.find(".c_b_p_desc a").remove();
var entry = ele.find(".c_b_p_desc").text();
ele.find("small a").remove();
var listTime = ele.find("small").text();
var re = /\d{4}-\d{2}-\d{2}\s*\d{2}[:]\d{2}/;
listTime = listTime.match(re)[0];
arcList.push({
title: title,
url: url,
entry: entry,
listTime: listTime
});
});
return arcList;
}
function nextPage( html ){
var $ = cheerio.load(html);
var nextUrl = $("#pager a:last-child").attr('href');
if ( !nextUrl ) return getArcUrl( aList );
var curPage = $("#pager .current").text();
if( !curPage ) curPage = 1;
var nextPage = nextUrl.substring( nextUrl.indexOf( '=' ) + 1 );
if ( curPage < nextPage ) crawler( nextUrl );
}
function crawler(url) {
http.get(url, function (res) {
var html = '';
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
aList.push( filterHtml(html) );
nextPage( html );
});
});
}
function getArcUrl( arcList ){
for( var key in arcList ){
for( var k in arcList[key] ){
aUrl.push( arcList[key][k]['url'] );
}
}
crawlerArc( aUrl.shift() );
}
var url = 'http://www.cnblogs.com/ghostwu/';
crawler( url );
  layout.jade 文件:
  
doctype html
html
head
meta(charset='utf-8')
title jade+node.js express
link(rel="stylesheet", href='./css/bower_components/bootstrap/dist/css/bootstrap.min.css')
body
block header
div.container
div.well.well-lg
h3 ghostwu的博客
p js高手之路
block container
div.container
h3
a(href="#{href}" rel="external nofollow" ) !{title}
p !{body}
block footer
div.container
footer 版權所有 - by ghostwu
  未來(lái)的計劃:
  1、使用mongodb進(jìn)行存儲
  2.支持斷點(diǎn)采集
  3. 采集 圖片
  4. 采集小說(shuō)
  等等…。
  上面node.+jade從博客爬取所有文章靜態(tài)html文件的例子就是編輯器分享的所有內容。希望能給大家一個(gè)參考,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者? 《Node.js+jade爬取文章的所有實(shí)例從blogs生成靜態(tài)html文件_萌西_前端開(kāi)發(fā)者》
  ? 本文鏈接: 查看全部

  抓取網(wǎng)頁(yè)生成電子書(shū)(這篇.+jade博客所有文章生成靜態(tài)html文件的實(shí)例小編)
  在這個(gè)文章中,我們將從上面的采集中整理出所有文章列表的信息,啟動(dòng)采集文章,生成靜態(tài)html文件。來(lái)看看我的采集的效果,我的博客目前有77篇文章文章,不到1分鐘就全部生成了采集,這里我截了一些圖片,文件name是生成文章的id,生成的文章,我寫(xiě)了一個(gè)簡(jiǎn)單的靜態(tài)模板,所有的文章都是按照這個(gè)模板生成的。
  項目結構:
  
  
  
  好,接下來(lái),我們來(lái)解釋一下這個(gè)文章的主要功能:
  1.抓取文章,主要抓取文章的標題、內容、超鏈接、文章id(用于生成靜態(tài)html文件)
  2.根據jade模板生成html文件
  一、爬取文章是如何完成的?
  很簡(jiǎn)單,類(lèi)似于上面抓取文章列表的實(shí)現
  
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
  參數url是文章的地址。抓取到文章的內容后,調用filterArticle(html)過(guò)濾出需要的文章信息(id、title、hyperlink、content),然后使用jade的renderFile的api替換模板內容,
  模板內容替換后,肯定要生成html文件,所以使用writeFile寫(xiě)入文件,寫(xiě)入文件時(shí),使用id作為html文件的名稱(chēng)。這是生成靜態(tài)html文件的實(shí)現,
  下一步就是循環(huán)生成一個(gè)靜態(tài)html文件,就是下面這行:
  if (aUrl.length) crawlerArc(aUrl.shift());
  aUrl 保存了我博客的所有文章 url,每次采集 寫(xiě)完一篇文章,刪除當前文章 的url,讓下一篇文章 @文章的url出來(lái)了,繼續采集
  完整的實(shí)現代碼服務(wù)器:
  
var fs = require( 'fs' );
var http = require( 'http' );
var cheerio = require( 'cheerio' );
var jade = require( 'jade' );
var aList = [];
var aUrl = [];
function filterArticle(html) {
var $ = cheerio.load( html );
var arcDetail = {};
var title = $( "#cb_post_title_url" ).text();
var href = $( "#cb_post_title_url" ).attr( "href" );
var re = /\/(\d+)\.html/;
var id = href.match( re )[1];
var body = $( "#cnblogs_post_body" ).html();
return {
id : id,
title : title,
href : href,
body : body
};
}
function crawlerArc( url ){
var html = '';
var str = '';
var arcDetail = {};
http.get(url, function (res) {
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
arcDetail = filterArticle( html );
str = jade.renderFile('./views/layout.jade', arcDetail );
fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
if( err ) {
console.log( err );
}
console.log( 'success:' + url );
if ( aUrl.length ) crawlerArc( aUrl.shift() );
} );
});
});
}
function filterHtml(html) {
var $ = cheerio.load(html);
var arcList = [];
var aPost = $("#content").find(".post-list-item");
aPost.each(function () {
var ele = $(this);
var title = ele.find("h2 a").text();
var url = ele.find("h2 a").attr("href");
ele.find(".c_b_p_desc a").remove();
var entry = ele.find(".c_b_p_desc").text();
ele.find("small a").remove();
var listTime = ele.find("small").text();
var re = /\d{4}-\d{2}-\d{2}\s*\d{2}[:]\d{2}/;
listTime = listTime.match(re)[0];
arcList.push({
title: title,
url: url,
entry: entry,
listTime: listTime
});
});
return arcList;
}
function nextPage( html ){
var $ = cheerio.load(html);
var nextUrl = $("#pager a:last-child").attr('href');
if ( !nextUrl ) return getArcUrl( aList );
var curPage = $("#pager .current").text();
if( !curPage ) curPage = 1;
var nextPage = nextUrl.substring( nextUrl.indexOf( '=' ) + 1 );
if ( curPage < nextPage ) crawler( nextUrl );
}
function crawler(url) {
http.get(url, function (res) {
var html = '';
res.on('data', function (chunk) {
html += chunk;
});
res.on('end', function () {
aList.push( filterHtml(html) );
nextPage( html );
});
});
}
function getArcUrl( arcList ){
for( var key in arcList ){
for( var k in arcList[key] ){
aUrl.push( arcList[key][k]['url'] );
}
}
crawlerArc( aUrl.shift() );
}
var url = 'http://www.cnblogs.com/ghostwu/';
crawler( url );
  layout.jade 文件:
  
doctype html
html
head
meta(charset='utf-8')
title jade+node.js express
link(rel="stylesheet", href='./css/bower_components/bootstrap/dist/css/bootstrap.min.css')
body
block header
div.container
div.well.well-lg
h3 ghostwu的博客
p js高手之路
block container
div.container
h3
a(href="#{href}" rel="external nofollow" ) !{title}
p !{body}
block footer
div.container
footer 版權所有 - by ghostwu
  未來(lái)的計劃:
  1、使用mongodb進(jìn)行存儲
  2.支持斷點(diǎn)采集
  3. 采集 圖片
  4. 采集小說(shuō)
  等等…。
  上面node.+jade從博客爬取所有文章靜態(tài)html文件的例子就是編輯器分享的所有內容。希望能給大家一個(gè)參考,也希望大家多多支持前端開(kāi)發(fā)者。
  ? 本文來(lái)自:前端開(kāi)發(fā)者? 《Node.js+jade爬取文章的所有實(shí)例從blogs生成靜態(tài)html文件_萌西_前端開(kāi)發(fā)者》
  ? 本文鏈接:

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久