文章采集調用
文章采集調用(文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 173 次瀏覽 ? 2022-01-08 23:01
文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach第一個(gè)不能匹配的區塊第二個(gè)匹配不了,第三個(gè)已經(jīng)匹配上了,第四個(gè)依然匹配不上但是不能說(shuō)什么,打開(kāi)知乎的app,就是把手機拿到邊上就能上知乎在上面的搜索框里輸入這個(gè)id就可以找到它前些天也是同樣的問(wèn)題,也是用這個(gè),結果就是找不到想要的東西。
我試過(guò)了兩個(gè)方法1.可以把瀏覽頁(yè)面重定向到知乎客戶(hù)端里面,在里面找到感興趣的區塊,點(diǎn)擊檢索(也可以點(diǎn)擊右上角)2.可以在googleappstore里找下載一個(gè)知乎app,然后直接一鍵抓取,只要該網(wǎng)站有的,
樓主試試,一定對你有幫助。
感謝樓上,
用來(lái)偷菜吧
建議采集一下@笑道人老師關(guān)于對話(huà)頁(yè)面的每個(gè)選擇區塊。我們的服務(wù)器就被他惡心到了。
先打開(kāi)你想抓取對話(huà)的網(wǎng)站,找到想抓取的區塊在googleappstore里搜索下載一個(gè)知乎app,然后直接一鍵抓取你想要的內容!希望對樓主有幫助!
據我所知,
呵呵,
我用的chrome擴展了"可視化查詢(xún)"抓取
沒(méi)找到怎么抓,手動(dòng)抓卻很麻煩,這樣試試啊。
采集頁(yè)面就可以抓取了
依然是這個(gè)問(wèn)題。我手上也沒(méi)有任何知乎采集器。沒(méi)試過(guò), 查看全部
文章采集調用(文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach)
文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach第一個(gè)不能匹配的區塊第二個(gè)匹配不了,第三個(gè)已經(jīng)匹配上了,第四個(gè)依然匹配不上但是不能說(shuō)什么,打開(kāi)知乎的app,就是把手機拿到邊上就能上知乎在上面的搜索框里輸入這個(gè)id就可以找到它前些天也是同樣的問(wèn)題,也是用這個(gè),結果就是找不到想要的東西。
我試過(guò)了兩個(gè)方法1.可以把瀏覽頁(yè)面重定向到知乎客戶(hù)端里面,在里面找到感興趣的區塊,點(diǎn)擊檢索(也可以點(diǎn)擊右上角)2.可以在googleappstore里找下載一個(gè)知乎app,然后直接一鍵抓取,只要該網(wǎng)站有的,
樓主試試,一定對你有幫助。
感謝樓上,
用來(lái)偷菜吧
建議采集一下@笑道人老師關(guān)于對話(huà)頁(yè)面的每個(gè)選擇區塊。我們的服務(wù)器就被他惡心到了。
先打開(kāi)你想抓取對話(huà)的網(wǎng)站,找到想抓取的區塊在googleappstore里搜索下載一個(gè)知乎app,然后直接一鍵抓取你想要的內容!希望對樓主有幫助!
據我所知,
呵呵,
我用的chrome擴展了"可視化查詢(xún)"抓取
沒(méi)找到怎么抓,手動(dòng)抓卻很麻煩,這樣試試啊。
采集頁(yè)面就可以抓取了
依然是這個(gè)問(wèn)題。我手上也沒(méi)有任何知乎采集器。沒(méi)試過(guò),
文章采集調用(如何優(yōu)采云采集器如何利用Xpath來(lái)采集內容頁(yè)面可視化提取)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 141 次瀏覽 ? 2022-01-08 14:17
在上一篇文章《優(yōu)采云采集 List Page and Label Xpath Visual Extraction Function》中,我們講解了優(yōu)采云采集器如何使用Xpath來(lái)采集列出頁(yè)面。今天,我們將討論優(yōu)采云采集器如何使用Xpath 來(lái)采集內容頁(yè)面!
新建標簽,提前選擇數據方式,選擇“視覺(jué)提取”選項,如下圖:
同時(shí)單擊“通過(guò) XPath 瀏覽器獲取”按鈕。
和上面得到的地址一樣,輸入地址,訪(fǎng)問(wèn)地址為采集,如下圖:
然后單擊圖標開(kāi)始選擇。這里我們以標題獲取為例。
選擇淺藍色框中的標題,輕輕點(diǎn)擊鼠標,測試一下是否正確。如果正確單擊確定按鈕。這不像 采集 地址,需要執行兩次。如果測試彈出:
這表示無(wú)法通過(guò)這種方式獲取該頁(yè)面。
如下圖點(diǎn)擊確定:
此處自動(dòng)填寫(xiě)獲取此標題的表達式。讓我們測試一下結果:
結果是正確的。其他信息可以通過(guò)這種方式獲取。
有一個(gè)節點(diǎn)屬性如下圖:
這也是一個(gè)專(zhuān)業(yè)術(shù)語(yǔ)。你可以查資料了解一下。一般可以通過(guò)選擇InnerHtml和InnerText來(lái)獲取文本信息。如果您需要了解更多信息,請自行查找信息。
選擇“Href”獲取鏈接地址,選擇“OuterHtml”獲取文本和收錄的html代碼。不明白的可以實(shí)際測試一下結果。 查看全部
文章采集調用(如何優(yōu)采云采集器如何利用Xpath來(lái)采集內容頁(yè)面可視化提取)
在上一篇文章《優(yōu)采云采集 List Page and Label Xpath Visual Extraction Function》中,我們講解了優(yōu)采云采集器如何使用Xpath來(lái)采集列出頁(yè)面。今天,我們將討論優(yōu)采云采集器如何使用Xpath 來(lái)采集內容頁(yè)面!

新建標簽,提前選擇數據方式,選擇“視覺(jué)提取”選項,如下圖:

同時(shí)單擊“通過(guò) XPath 瀏覽器獲取”按鈕。
和上面得到的地址一樣,輸入地址,訪(fǎng)問(wèn)地址為采集,如下圖:

然后單擊圖標開(kāi)始選擇。這里我們以標題獲取為例。

選擇淺藍色框中的標題,輕輕點(diǎn)擊鼠標,測試一下是否正確。如果正確單擊確定按鈕。這不像 采集 地址,需要執行兩次。如果測試彈出:

這表示無(wú)法通過(guò)這種方式獲取該頁(yè)面。
如下圖點(diǎn)擊確定:

此處自動(dòng)填寫(xiě)獲取此標題的表達式。讓我們測試一下結果:

結果是正確的。其他信息可以通過(guò)這種方式獲取。
有一個(gè)節點(diǎn)屬性如下圖:

這也是一個(gè)專(zhuān)業(yè)術(shù)語(yǔ)。你可以查資料了解一下。一般可以通過(guò)選擇InnerHtml和InnerText來(lái)獲取文本信息。如果您需要了解更多信息,請自行查找信息。
選擇“Href”獲取鏈接地址,選擇“OuterHtml”獲取文本和收錄的html代碼。不明白的可以實(shí)際測試一下結果。
文章采集調用(小蜜蜂公眾號文章助手上線(xiàn),復制文字還沒(méi)有什么?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2022-01-08 14:15
現在小蜜蜂公眾號文章助手上線(xiàn),可以采集任意公眾號歷史文章,支持點(diǎn)贊數、閱讀數、評論數采集,支持導出PDF ,Excel,HTML,TXT格式導出,支持關(guān)鍵詞搜索,可以去官網(wǎng)查看
許多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上寫(xiě)作,而且通常在多個(gè)平臺上推送文章,例如今日頭條、知乎專(zhuān)欄、短書(shū)等,甚至有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一項非常耗時(shí)的工作。
大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
這時(shí)候嘗試搜索了一個(gè)這樣的插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),于是我開(kāi)發(fā)了一個(gè)叫Bee采集的插件,除了微信公眾號文章,還可以導入今日頭條、短書(shū)、知乎欄目的文章,并且還有各種多種可選功能,除此之外,還可以采集other網(wǎng)站,只要配置好相應的規則即可
使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,即批量導入功能,以及自動(dòng)同步采集公眾號的功能文章
下載的話(huà)直接在安裝插件頁(yè)面搜索蜜蜂采集就可以看到
希望這篇筆記可以幫到你 查看全部
文章采集調用(小蜜蜂公眾號文章助手上線(xiàn),復制文字還沒(méi)有什么?)
現在小蜜蜂公眾號文章助手上線(xiàn),可以采集任意公眾號歷史文章,支持點(diǎn)贊數、閱讀數、評論數采集,支持導出PDF ,Excel,HTML,TXT格式導出,支持關(guān)鍵詞搜索,可以去官網(wǎng)查看
許多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上寫(xiě)作,而且通常在多個(gè)平臺上推送文章,例如今日頭條、知乎專(zhuān)欄、短書(shū)等,甚至有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一項非常耗時(shí)的工作。
大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
這時(shí)候嘗試搜索了一個(gè)這樣的插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),于是我開(kāi)發(fā)了一個(gè)叫Bee采集的插件,除了微信公眾號文章,還可以導入今日頭條、短書(shū)、知乎欄目的文章,并且還有各種多種可選功能,除此之外,還可以采集other網(wǎng)站,只要配置好相應的規則即可
使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,即批量導入功能,以及自動(dòng)同步采集公眾號的功能文章
下載的話(huà)直接在安裝插件頁(yè)面搜索蜜蜂采集就可以看到
希望這篇筆記可以幫到你
文章采集調用(java項目中如何實(shí)現攝像頭圖像采集圖片數據采集? )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2022-01-08 02:06
)
最近的一個(gè)項目需要實(shí)現攝像頭圖像采集,經(jīng)過(guò)一系列的折騰,終于實(shí)現了這個(gè)功能,現在整理一下。
就java技術(shù)而言,為了實(shí)現相機的二次開(kāi)發(fā),采集相機圖片需要使用JMF。JMF 適合在 j2se 程序中使用。我需要在網(wǎng)絡(luò )程序中調用相機。顯然,JMF 處理不了?,F在想寫(xiě)個(gè)applet程序,但是那個(gè)東西需要客戶(hù)端有jre環(huán)境,不適合我。您不能指望用戶(hù)在訪(fǎng)問(wèn)您的 網(wǎng)站 jre 進(jìn)行安裝然后再次訪(fǎng)問(wèn)時(shí)下載一個(gè)大文件嗎?
既然JMF不適用,那么我們在java項目中如何控制攝像頭抓拍呢?在windows平臺下,我們可以使用視頻采集卡等二次開(kāi)發(fā)包來(lái)訪(fǎng)問(wèn)視頻數據,但是目前的攝像頭都是usb的,甚至筆記本電腦屏幕都有攝像頭,這種情況下的解決方案使用采集卡二次開(kāi)發(fā)包不適用。您只能編寫(xiě)自己的程序來(lái)做類(lèi)似于“相機相機軟件”的事情。經(jīng)過(guò)一系列的分析,終于實(shí)現了在web程序中調用攝像頭,可以通過(guò)js代碼控制攝像頭,通過(guò)ajax技術(shù)上傳數據。雖然我沒(méi)有在程序中測試過(guò),但是應該支持.net技術(shù),也可以在采集Camera data的項目中實(shí)現,例如,
羅嗦一大堆,程序放在csdn下載資源上面,以后不用到處找相機二次開(kāi)發(fā),直接下載使用即可。
攝像頭程序下載地址
壓縮包中收錄一個(gè)基于純網(wǎng)頁(yè)采集的相機照片示例程序,以及一個(gè)基于jquery框架的ajax數據操作程序示例。調用攝像頭的方法詳見(jiàn)示例代碼。相信稍微懂一點(diǎn)技術(shù)的人應該都能看懂。了解了,有一個(gè)完整的基于java技術(shù)的photo采集示例程序,使用jsp頁(yè)面采集的照片,serlvet程序接收攝像頭照片數據。
以下是程序運行效果示例:
查看全部
文章采集調用(java項目中如何實(shí)現攝像頭圖像采集圖片數據采集?
)
最近的一個(gè)項目需要實(shí)現攝像頭圖像采集,經(jīng)過(guò)一系列的折騰,終于實(shí)現了這個(gè)功能,現在整理一下。
就java技術(shù)而言,為了實(shí)現相機的二次開(kāi)發(fā),采集相機圖片需要使用JMF。JMF 適合在 j2se 程序中使用。我需要在網(wǎng)絡(luò )程序中調用相機。顯然,JMF 處理不了?,F在想寫(xiě)個(gè)applet程序,但是那個(gè)東西需要客戶(hù)端有jre環(huán)境,不適合我。您不能指望用戶(hù)在訪(fǎng)問(wèn)您的 網(wǎng)站 jre 進(jìn)行安裝然后再次訪(fǎng)問(wèn)時(shí)下載一個(gè)大文件嗎?
既然JMF不適用,那么我們在java項目中如何控制攝像頭抓拍呢?在windows平臺下,我們可以使用視頻采集卡等二次開(kāi)發(fā)包來(lái)訪(fǎng)問(wèn)視頻數據,但是目前的攝像頭都是usb的,甚至筆記本電腦屏幕都有攝像頭,這種情況下的解決方案使用采集卡二次開(kāi)發(fā)包不適用。您只能編寫(xiě)自己的程序來(lái)做類(lèi)似于“相機相機軟件”的事情。經(jīng)過(guò)一系列的分析,終于實(shí)現了在web程序中調用攝像頭,可以通過(guò)js代碼控制攝像頭,通過(guò)ajax技術(shù)上傳數據。雖然我沒(méi)有在程序中測試過(guò),但是應該支持.net技術(shù),也可以在采集Camera data的項目中實(shí)現,例如,
羅嗦一大堆,程序放在csdn下載資源上面,以后不用到處找相機二次開(kāi)發(fā),直接下載使用即可。
攝像頭程序下載地址
壓縮包中收錄一個(gè)基于純網(wǎng)頁(yè)采集的相機照片示例程序,以及一個(gè)基于jquery框架的ajax數據操作程序示例。調用攝像頭的方法詳見(jiàn)示例代碼。相信稍微懂一點(diǎn)技術(shù)的人應該都能看懂。了解了,有一個(gè)完整的基于java技術(shù)的photo采集示例程序,使用jsp頁(yè)面采集的照片,serlvet程序接收攝像頭照片數據。
以下是程序運行效果示例:
文章采集調用(測試阻礙交付,如何破解這一難題?(一)(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 165 次瀏覽 ? 2022-01-07 18:14
測試阻礙了交付。如何解決這個(gè)問(wèn)題呢?>>>
點(diǎn)擊上方“IT共享屋”關(guān)注
回復“資料”領(lǐng)取Python學(xué)習福利
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和 網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests、fake_useragent、json、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2. 如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集的。
1)F12 右鍵查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。
2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。
3. 如何訪(fǎng)問(wèn)網(wǎng)頁(yè)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,jsonfrom fake_useragent import UserAgentimport csv
class Doban(object): def __init__(self): self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self): pass
if __name__ == '__main__': Siper = Doban() Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects'] # print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf) html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求 parse_html2 = etree.HTML(html2) r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入 csv_file = open('scr.csv', 'a', encoding='gbk') csv_writer = csv.writer(csv_file) # 寫(xiě)入csv標題頭內容 csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"]) #寫(xiě)入數據 csv_writer.writerow([id, rate, urll])
7、請求的圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content dirname = "./圖/" + id + ".jpg" with open(dirname, 'wb') as f: f.write(html2) print("%s 【下載成功?。。?!】" % id)
8、 調用方法實(shí)現功能。
html = self.get_page(url) self.parse_page(html)
9、項目?jì)?yōu)化:1)設置延時(shí)。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0 self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。
2、 在控制臺顯示下載成功信息。
3、保存csv文件。
4、電影畫(huà)面顯示。
[七、總結]
1、 不建議抓太多數據,可能造成服務(wù)器負載,簡(jiǎn)單試一下。
2、這篇文章針對Python爬豆豆應用中的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止反爬,做了一個(gè)相對的解決方案。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、 需要本文源碼的請在下方公眾號后臺回復“豆瓣電影”獲取。
看完這篇文章你學(xué)會(huì )了嗎?請轉發(fā)并分享給更多人
IT共享家庭 查看全部
文章采集調用(測試阻礙交付,如何破解這一難題?(一)(組圖))
測試阻礙了交付。如何解決這個(gè)問(wèn)題呢?>>>

點(diǎn)擊上方“IT共享屋”關(guān)注
回復“資料”領(lǐng)取Python學(xué)習福利
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和 網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests、fake_useragent、json、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2. 如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集的。
1)F12 右鍵查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。

2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。

3. 如何訪(fǎng)問(wèn)網(wǎng)頁(yè)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,jsonfrom fake_useragent import UserAgentimport csv
class Doban(object): def __init__(self): self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self): pass
if __name__ == '__main__': Siper = Doban() Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects'] # print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf) html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求 parse_html2 = etree.HTML(html2) r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入 csv_file = open('scr.csv', 'a', encoding='gbk') csv_writer = csv.writer(csv_file) # 寫(xiě)入csv標題頭內容 csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"]) #寫(xiě)入數據 csv_writer.writerow([id, rate, urll])
7、請求的圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content dirname = "./圖/" + id + ".jpg" with open(dirname, 'wb') as f: f.write(html2) print("%s 【下載成功?。。?!】" % id)
8、 調用方法實(shí)現功能。
html = self.get_page(url) self.parse_page(html)
9、項目?jì)?yōu)化:1)設置延時(shí)。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0 self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。

2、 在控制臺顯示下載成功信息。

3、保存csv文件。

4、電影畫(huà)面顯示。

[七、總結]
1、 不建議抓太多數據,可能造成服務(wù)器負載,簡(jiǎn)單試一下。
2、這篇文章針對Python爬豆豆應用中的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止反爬,做了一個(gè)相對的解決方案。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、 需要本文源碼的請在下方公眾號后臺回復“豆瓣電影”獲取。
看完這篇文章你學(xué)會(huì )了嗎?請轉發(fā)并分享給更多人
IT共享家庭
文章采集調用(換個(gè)網(wǎng)站你什么都做不了,這個(gè)教程讓你一看即會(huì ))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 195 次瀏覽 ? 2022-01-06 07:05
很多網(wǎng)友對于織夢(mèng)的采集教程(DEDEcms)感到頭疼。確實(shí),官方教程太籠統,沒(méi)說(shuō)什么。換個(gè)網(wǎng)站你是什么?不會(huì )啊,這個(gè)教程是最詳細的教程了,趕緊看看吧!
一、列表采集
第一步,我們打開(kāi)織夢(mèng)后臺,點(diǎn)擊采集——采集節點(diǎn)管理——添加新節點(diǎn)
第二步,這里我們以采集normal文章為例,我們選擇normal文章,然后確認
第三步,進(jìn)入采集的設置頁(yè)面,填寫(xiě)節點(diǎn)名稱(chēng)。
第四步,打開(kāi)你要采集的文章列表頁(yè)。
以這個(gè)網(wǎng)站為例,打開(kāi)這個(gè)頁(yè)面,
右鍵查看源文件找到目標頁(yè)面編碼,就在charset之后)
第五步,填寫(xiě)頁(yè)面基本信息,填寫(xiě)后如圖
第六步,填寫(xiě)列表URL獲取規則,查看文章列表第一頁(yè)地址。
比較第二頁(yè)的地址
我們發(fā)現除了49_后面的數字是一樣的,所以我們可以這樣寫(xiě)
(*).html
就用(*)代替1,因為只有2頁(yè),所以我們從1到2填,每頁(yè)加1,當然2-1...等于1。
到這里我們完成了
可能你的一些采集列表沒(méi)有規則,所以你只需要手動(dòng)指定列表URL即可,如圖
每行寫(xiě)一個(gè)頁(yè)面地址
第七步:填寫(xiě)文章 URL匹配規則,返回文章列表頁(yè)面
右鍵查看源文件找到區域開(kāi)頭的HTML,也就是找到文章列表開(kāi)頭的標記。
我們可以很容易地找到如圖所示的“新聞列表”。從這里開(kāi)始,后面是文章列表,然后找到文章列表末尾的HTML
就是這樣,一個(gè)很容易找到的標志
如果鏈接收錄圖片:
不要將采集處理成縮略圖,這里根據自己的需要選擇
二、內容頁(yè)采集
第八步,重新篩選區域網(wǎng)站:
?。ㄊ褂谜齽t表達式)必須收錄:(優(yōu)先級高于后者)
不能收錄:打開(kāi)源文件,我們可以清楚地看到文章鏈接以.html結尾,所以我們必須收錄它并填寫(xiě).html。如果遇到一些比較麻煩的list,也可以在后面填寫(xiě)Cannot contains
點(diǎn)擊保存設置進(jìn)入下一步,可以看到我們得到的文章 URL
看到這個(gè)是對的,我們保存信息,進(jìn)入下一步設置內容字段獲取規則
看看文章有沒(méi)有分頁(yè),隨便輸入一篇文章看看吧。. 我們看到文章中沒(méi)有分頁(yè)
所以這里我們默認
找到文章標題等,輸入一篇文章文章,右鍵查看源文件
看看這些
根據源碼填寫(xiě)
第九步,填寫(xiě)文章內容的開(kāi)頭,結尾同上,找到開(kāi)始和結束標志。
開(kāi)始部分如圖
末端部分如圖所示
最后填寫(xiě)如圖
第十步,要過(guò)濾文章中的什么內容,寫(xiě)在過(guò)濾規則中,比如過(guò)濾文章中的圖片,
選擇常用規則,如圖
然后勾選IMG,如圖
然后確定
這樣我們過(guò)濾文本中的圖片
第十一步,設置完成后,點(diǎn)擊保存設置并預覽,如圖
寫(xiě)了這樣一個(gè)采集規則,很簡(jiǎn)單吧?有些網(wǎng)站很難寫(xiě),但你需要更努力。
我們點(diǎn)擊保存,啟動(dòng)采集-start 采集網(wǎng)頁(yè),采集就完成了
看看我們采集到達了什么文章
最后,導出數據
首先選擇要導入的列,在彈出的窗口中按“選擇”選擇需要導入的列。發(fā)布選項通常是默認選項,除非您不想立即發(fā)布。每批導入的默認值為30,修改與否都沒(méi)有關(guān)系。附加選項一般選擇“排除重復標題”。至于自動(dòng)生成HTML的選項,建議不要先生成,因為我們要批量提取摘要和關(guān)鍵字。
文章標題
匹配規則:【內容】
過(guò)濾規則:{dede:trimreplace=""}_XXX網(wǎng)站{/dede:trim}
來(lái)自百度
三、采集 規則補充(一) 文本過(guò)濾和替換方法
1.去除超鏈接,這個(gè)是最常用的。
{dede:trim replace="}]*)>{/dede:trim}
{dede:trim replace=”}{/dede:trim}
如果這樣填寫(xiě),那么鏈接的文字也被去掉了
{dede:trim replace=”}]*)>(.*){/dede:trim}
2. 過(guò)濾JS電話(huà)廣告,如GG廣告,添加:
{dede:trim replace=”}{/dede:trim}
3.過(guò)濾 div 標簽。
這是非常重要的。如果過(guò)濾不干凈,發(fā)布的 文章 頁(yè)面可能會(huì )錯位。目前遇到采集后出現錯位的大部分原因都在這里。
{dede:修剪替換=”}
{/dede:修剪}
{dede:修剪替換=”}
{/dede:修剪}
有時(shí)需要像這樣過(guò)濾:
{dede:修剪替換=”}
(.*)
{/dede:修剪}
4.根據以上規則可以引入其他過(guò)濾規則。
5.過(guò)濾摘要和關(guān)鍵字用法,經(jīng)常用到。
{dede:trim replace=”}{/dede:trim}
6. 簡(jiǎn)單替換。
{dede:trim replace='word after replacement'}要替換的單詞{/dede:trim}
7.刪除源代碼
{dede:trim replace=""}src="([^"]*)"{/dede:trim}
(二)內容頁(yè)注明作者和出處
可以通過(guò)指定 value 值來(lái)實(shí)現:
{dede:item field='writer' value='小軍' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
{dede:item field='source' value='Military Net' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
(三)內容頁(yè)分頁(yè)采集
在“內容分頁(yè)導航所在區域的匹配規則:”中填寫(xiě)規則,如 查看全部
文章采集調用(換個(gè)網(wǎng)站你什么都做不了,這個(gè)教程讓你一看即會(huì ))
很多網(wǎng)友對于織夢(mèng)的采集教程(DEDEcms)感到頭疼。確實(shí),官方教程太籠統,沒(méi)說(shuō)什么。換個(gè)網(wǎng)站你是什么?不會(huì )啊,這個(gè)教程是最詳細的教程了,趕緊看看吧!
一、列表采集
第一步,我們打開(kāi)織夢(mèng)后臺,點(diǎn)擊采集——采集節點(diǎn)管理——添加新節點(diǎn)

第二步,這里我們以采集normal文章為例,我們選擇normal文章,然后確認

第三步,進(jìn)入采集的設置頁(yè)面,填寫(xiě)節點(diǎn)名稱(chēng)。
第四步,打開(kāi)你要采集的文章列表頁(yè)。
以這個(gè)網(wǎng)站為例,打開(kāi)這個(gè)頁(yè)面,
右鍵查看源文件找到目標頁(yè)面編碼,就在charset之后)

第五步,填寫(xiě)頁(yè)面基本信息,填寫(xiě)后如圖

第六步,填寫(xiě)列表URL獲取規則,查看文章列表第一頁(yè)地址。
比較第二頁(yè)的地址
我們發(fā)現除了49_后面的數字是一樣的,所以我們可以這樣寫(xiě)
(*).html
就用(*)代替1,因為只有2頁(yè),所以我們從1到2填,每頁(yè)加1,當然2-1...等于1。
到這里我們完成了

可能你的一些采集列表沒(méi)有規則,所以你只需要手動(dòng)指定列表URL即可,如圖
每行寫(xiě)一個(gè)頁(yè)面地址

第七步:填寫(xiě)文章 URL匹配規則,返回文章列表頁(yè)面
右鍵查看源文件找到區域開(kāi)頭的HTML,也就是找到文章列表開(kāi)頭的標記。
我們可以很容易地找到如圖所示的“新聞列表”。從這里開(kāi)始,后面是文章列表,然后找到文章列表末尾的HTML
就是這樣,一個(gè)很容易找到的標志
如果鏈接收錄圖片:
不要將采集處理成縮略圖,這里根據自己的需要選擇


二、內容頁(yè)采集
第八步,重新篩選區域網(wǎng)站:
?。ㄊ褂谜齽t表達式)必須收錄:(優(yōu)先級高于后者)
不能收錄:打開(kāi)源文件,我們可以清楚地看到文章鏈接以.html結尾,所以我們必須收錄它并填寫(xiě).html。如果遇到一些比較麻煩的list,也可以在后面填寫(xiě)Cannot contains
點(diǎn)擊保存設置進(jìn)入下一步,可以看到我們得到的文章 URL
看到這個(gè)是對的,我們保存信息,進(jìn)入下一步設置內容字段獲取規則
看看文章有沒(méi)有分頁(yè),隨便輸入一篇文章看看吧。. 我們看到文章中沒(méi)有分頁(yè)
所以這里我們默認
找到文章標題等,輸入一篇文章文章,右鍵查看源文件
看看這些
根據源碼填寫(xiě)




第九步,填寫(xiě)文章內容的開(kāi)頭,結尾同上,找到開(kāi)始和結束標志。
開(kāi)始部分如圖
末端部分如圖所示
最后填寫(xiě)如圖



第十步,要過(guò)濾文章中的什么內容,寫(xiě)在過(guò)濾規則中,比如過(guò)濾文章中的圖片,
選擇常用規則,如圖
然后勾選IMG,如圖
然后確定
這樣我們過(guò)濾文本中的圖片


第十一步,設置完成后,點(diǎn)擊保存設置并預覽,如圖
寫(xiě)了這樣一個(gè)采集規則,很簡(jiǎn)單吧?有些網(wǎng)站很難寫(xiě),但你需要更努力。
我們點(diǎn)擊保存,啟動(dòng)采集-start 采集網(wǎng)頁(yè),采集就完成了
看看我們采集到達了什么文章




最后,導出數據
首先選擇要導入的列,在彈出的窗口中按“選擇”選擇需要導入的列。發(fā)布選項通常是默認選項,除非您不想立即發(fā)布。每批導入的默認值為30,修改與否都沒(méi)有關(guān)系。附加選項一般選擇“排除重復標題”。至于自動(dòng)生成HTML的選項,建議不要先生成,因為我們要批量提取摘要和關(guān)鍵字。
文章標題
匹配規則:【內容】
過(guò)濾規則:{dede:trimreplace=""}_XXX網(wǎng)站{/dede:trim}

來(lái)自百度
三、采集 規則補充(一) 文本過(guò)濾和替換方法
1.去除超鏈接,這個(gè)是最常用的。
{dede:trim replace="}]*)>{/dede:trim}
{dede:trim replace=”}{/dede:trim}
如果這樣填寫(xiě),那么鏈接的文字也被去掉了
{dede:trim replace=”}]*)>(.*){/dede:trim}
2. 過(guò)濾JS電話(huà)廣告,如GG廣告,添加:
{dede:trim replace=”}{/dede:trim}
3.過(guò)濾 div 標簽。
這是非常重要的。如果過(guò)濾不干凈,發(fā)布的 文章 頁(yè)面可能會(huì )錯位。目前遇到采集后出現錯位的大部分原因都在這里。
{dede:修剪替換=”}
{/dede:修剪}
{dede:修剪替換=”}
{/dede:修剪}
有時(shí)需要像這樣過(guò)濾:
{dede:修剪替換=”}
(.*)
{/dede:修剪}
4.根據以上規則可以引入其他過(guò)濾規則。
5.過(guò)濾摘要和關(guān)鍵字用法,經(jīng)常用到。
{dede:trim replace=”}{/dede:trim}
6. 簡(jiǎn)單替換。
{dede:trim replace='word after replacement'}要替換的單詞{/dede:trim}
7.刪除源代碼
{dede:trim replace=""}src="([^"]*)"{/dede:trim}
(二)內容頁(yè)注明作者和出處
可以通過(guò)指定 value 值來(lái)實(shí)現:
{dede:item field='writer' value='小軍' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
{dede:item field='source' value='Military Net' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
(三)內容頁(yè)分頁(yè)采集
在“內容分頁(yè)導航所在區域的匹配規則:”中填寫(xiě)規則,如
文章采集調用(下采集神器:chromedp+HeadlessChrome安裝安裝)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 468 次瀏覽 ? 2022-01-06 06:06
最近在采集微信文章的時(shí)候,遇到了一個(gè)比較棘手的問(wèn)題。通過(guò)搜狗搜索的微信搜索模式,正常的直接抓取頁(yè)面的方式無(wú)法繞過(guò)搜狗搜索的驗證。所以成功使用gorequest采集到微信文章。
選擇 chromedp + Headless Chrome
面對采集的目的沒(méi)有達到的問(wèn)題,我是不是就此放棄了?顯然這是不可能的。不就是簽名驗證嘛,只要不要求輸入驗證碼,總有辦法解決的(蒽,一般的驗證碼也可以解決)。于是犧牲了golang下的采集神器:chromedp。
簡(jiǎn)單來(lái)說(shuō),chromedp是golang語(yǔ)言用來(lái)調用Chrome調試協(xié)議來(lái)模擬瀏覽器行為的一個(gè)包,可以簡(jiǎn)單的驅動(dòng)瀏覽器。使用的前提很簡(jiǎn)單,就是在電腦上安裝Chrome瀏覽器。
Chrome瀏覽器的安裝在Windows和macOS下沒(méi)有問(wèn)題,在桌面版Linux下也沒(méi)有問(wèn)題。但是如果要在Linux服務(wù)器版本上安裝Chrome,就沒(méi)有那么簡(jiǎn)單了。至少目前,Chrome 還沒(méi)有可以直接安裝在服務(wù)器上的軟件包。
但是你必須放棄你剛剛想到的想法嗎?當然這是不可能的。翻閱chromedp文檔,我剛剛找到了一段:
最簡(jiǎn)單的方法是在 chromedp/headless-shell 映像中運行使用 chromedp 的 Go 程序。該圖像收錄 headless-shell,這是一種較小的 Chrome 無(wú)頭構建,chromedp 可以立即找到它。
他的意思是:最簡(jiǎn)單的方法就是用chromedp調用chromedp/headless-shell鏡像。chromedp/headless-shell 是一個(gè) docker 鏡像,收錄一個(gè)較小的 Chrome 無(wú)頭瀏覽器。
好的,既然是docker鏡像,我們就用docker安裝。
首先登錄我們的linux服務(wù)器,下面的操作就認為你已經(jīng)登錄到linux服務(wù)器了。
安裝 docker 并安裝 chromedp/headless-shell
如果您的服務(wù)器已經(jīng)安裝了 docker,請跳過(guò)此步驟。
使用yum安裝docker
yum install docker
復制代碼
安裝完成后,此時(shí)無(wú)法直接使用docker,需要執行以下命令激活
systemctl daemon-reload
service docker restart
復制代碼
然后安裝 chromedp/headless-shell 鏡像
docker pull chromedp/headless-shell:latest
復制代碼
等待安裝完成,然后運行docker鏡像
docker run -d -p 9222:9222 --rm --name headless-shell chromedp/headless-shell
復制代碼
運行后,測試chrome是否正常:
curl http://127.0.0.1:9222/json/version
復制代碼
如果看到類(lèi)似下面的內容,說(shuō)明chrome瀏覽器工作正常
{"瀏覽器": "Chrome/96.0.4664.110","協(xié)議版本": "1.3","用戶(hù)代理":" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36","V8-Version": "9.6.180.21","WebKit-Version": "537.36 (@d5ef0e8214bc14c9b5bbf69a1515e431394c62a6)","webSocketDebuggerUrl": "ws://127.0.0.1/devers-browse/dev22921 -4d5b-b9e6-37d634aa719a"}
chromedp代碼調用chromedp/headless-shell采集微信公眾號文章內容
Linux下可以正常使用Headless Chrome無(wú)頭瀏覽器。剩下的就是調用它的代碼了。
現在我們開(kāi)始編寫(xiě)采集微信文章使用的chrome代碼:
定義關(guān)鍵字,artile struct.go
package main
type Keyword struct {
Id int64 `json:"id"`
Name string `json:"name"`
Level int `json:"level"`
ArticleCount int `json:"article_count"`
LastTime int64 `json:"last_time"` //上次執行時(shí)間
}
type Article struct {
Id int64 `json:"id"`
KeywordId int64 `json:"keyword_id"`
Title string `json:"title"`
Keywords string `json:"keywords"`
Description string `json:"description"`
OriginUrl string `json:"origin_url"`
Status int `json:"status"`
CreatedTime int `json:"created_time"`
UpdatedTime int `json:"updated_time"`
Content string `json:"content"`
ContentText string `json:"-"`
}
復制代碼
編寫(xiě)核心代碼 core.go
package main
import (
"context"
"fmt"
"github.com/chromedp/cdproto/cdp"
"github.com/chromedp/chromedp"
"log"
"net"
"net/url"
"strings"
"time"
)
func CollectArticleFromWeixin(keyword *Keyword) []*Article {
timeCtx, cancel := context.WithTimeout(GetChromeCtx(false), 30*time.Second)
defer cancel()
var collectLink string
err := chromedp.Run(timeCtx,
chromedp.Navigate(fmt.Sprintf("https://weixin.sogou.com/weixi ... ot%3B, keyword.Name)),
chromedp.WaitVisible(`//ul[@class="news-list"]`),
chromedp.Location(&collectLink),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗1:", keyword.Name, err.Error())
return nil
}
log.Println("正在采集列表:", collectLink)
var aLinks []*cdp.Node
if err := chromedp.Run(timeCtx, chromedp.Nodes(`//ul[@class="news-list"]//h3//a`, &aLinks)); err != nil {
log.Println("讀取搜狗搜索列表失敗2:", keyword.Name, err.Error())
return nil
}
var articles []*Article
for i := 0; i < len(aLinks); i++ {
href := aLinks[i].AttributeValue("href")
href, _ = joinURL("https://weixin.sogou.com/", href)
article := &Article{}
err = chromedp.Run(timeCtx,
chromedp.Navigate(href),
chromedp.WaitVisible(`#js_article`),
chromedp.Location(&article.OriginUrl),
chromedp.Text(`#activity-name`, &article.Title, chromedp.NodeVisible),
chromedp.InnerHTML("#js_content", &article.Content, chromedp.ByID),
chromedp.Text("#js_content", &article.ContentText, chromedp.ByID),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗3:", keyword.Name, err.Error())
}
log.Println("采集文章:", article.Title, len(article.Content), article.OriginUrl)
articles = append(articles, article)
}
return articles
}
// 重組url
func joinURL(baseURL, subURL string) (fullURL, fullURLWithoutFrag string) {
baseURL = strings.TrimSpace(baseURL)
subURL = strings.TrimSpace(subURL)
baseURLObj, _ := url.Parse(baseURL)
subURLObj, _ := url.Parse(subURL)
fullURLObj := baseURLObj.ResolveReference(subURLObj)
fullURL = fullURLObj.String()
fullURLObj.Fragment = ""
fullURLWithoutFrag = fullURLObj.String()
return
}
//檢查是否有9222端口,來(lái)判斷是否運行在linux上
func checkChromePort() bool {
addr := net.JoinHostPort("", "9222")
conn, err := net.DialTimeout("tcp", addr, 1*time.Second)
if err != nil {
return false
}
defer conn.Close()
return true
}
// ChromeCtx 使用一個(gè)實(shí)例
var ChromeCtx context.Context
func GetChromeCtx(focus bool) context.Context {
if ChromeCtx == nil || focus {
allocOpts := chromedp.DefaultExecAllocatorOptions[:]
allocOpts = append(allocOpts,
chromedp.DisableGPU,
chromedp.Flag("blink-settings", "imagesEnabled=false"),
chromedp.UserAgent(`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36`),
chromedp.Flag("accept-language", `zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6`),
)
if checkChromePort() {
// 不知道為何,不能直接使用 NewExecAllocator ,因此增加 使用 ws://127.0.0.1:9222/ 來(lái)調用
c, _ := chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222/")
ChromeCtx, _ = chromedp.NewContext(c)
} else {
c, _ := chromedp.NewExecAllocator(context.Background(), allocOpts...)
ChromeCtx, _ = chromedp.NewContext(c)
}
}
return ChromeCtx
}
復制代碼
寫(xiě)入入口文件main.go
package main
import "log"
func main() {
word := Keyword{
Name: "golang",
}
result := CollectArticleFromWeixin(&word)
for i, v := range result {
log.Println(i, v.Title, len(v.Content), v.OriginUrl)
log.Println("純內容:", v.ContentText)
}
}
復制代碼
運行結果測試:
偉大的結果出來(lái)了。
如果您對此代碼感興趣,可以從這里獲取 /fesiong/gob...。
本采集代碼僅供研究學(xué)習之用,不得用于非法用途。 查看全部
文章采集調用(下采集神器:chromedp+HeadlessChrome安裝安裝)
最近在采集微信文章的時(shí)候,遇到了一個(gè)比較棘手的問(wèn)題。通過(guò)搜狗搜索的微信搜索模式,正常的直接抓取頁(yè)面的方式無(wú)法繞過(guò)搜狗搜索的驗證。所以成功使用gorequest采集到微信文章。
選擇 chromedp + Headless Chrome
面對采集的目的沒(méi)有達到的問(wèn)題,我是不是就此放棄了?顯然這是不可能的。不就是簽名驗證嘛,只要不要求輸入驗證碼,總有辦法解決的(蒽,一般的驗證碼也可以解決)。于是犧牲了golang下的采集神器:chromedp。
簡(jiǎn)單來(lái)說(shuō),chromedp是golang語(yǔ)言用來(lái)調用Chrome調試協(xié)議來(lái)模擬瀏覽器行為的一個(gè)包,可以簡(jiǎn)單的驅動(dòng)瀏覽器。使用的前提很簡(jiǎn)單,就是在電腦上安裝Chrome瀏覽器。
Chrome瀏覽器的安裝在Windows和macOS下沒(méi)有問(wèn)題,在桌面版Linux下也沒(méi)有問(wèn)題。但是如果要在Linux服務(wù)器版本上安裝Chrome,就沒(méi)有那么簡(jiǎn)單了。至少目前,Chrome 還沒(méi)有可以直接安裝在服務(wù)器上的軟件包。
但是你必須放棄你剛剛想到的想法嗎?當然這是不可能的。翻閱chromedp文檔,我剛剛找到了一段:
最簡(jiǎn)單的方法是在 chromedp/headless-shell 映像中運行使用 chromedp 的 Go 程序。該圖像收錄 headless-shell,這是一種較小的 Chrome 無(wú)頭構建,chromedp 可以立即找到它。
他的意思是:最簡(jiǎn)單的方法就是用chromedp調用chromedp/headless-shell鏡像。chromedp/headless-shell 是一個(gè) docker 鏡像,收錄一個(gè)較小的 Chrome 無(wú)頭瀏覽器。
好的,既然是docker鏡像,我們就用docker安裝。
首先登錄我們的linux服務(wù)器,下面的操作就認為你已經(jīng)登錄到linux服務(wù)器了。
安裝 docker 并安裝 chromedp/headless-shell
如果您的服務(wù)器已經(jīng)安裝了 docker,請跳過(guò)此步驟。
使用yum安裝docker
yum install docker
復制代碼
安裝完成后,此時(shí)無(wú)法直接使用docker,需要執行以下命令激活
systemctl daemon-reload
service docker restart
復制代碼
然后安裝 chromedp/headless-shell 鏡像
docker pull chromedp/headless-shell:latest
復制代碼
等待安裝完成,然后運行docker鏡像
docker run -d -p 9222:9222 --rm --name headless-shell chromedp/headless-shell
復制代碼
運行后,測試chrome是否正常:
curl http://127.0.0.1:9222/json/version
復制代碼
如果看到類(lèi)似下面的內容,說(shuō)明chrome瀏覽器工作正常
{"瀏覽器": "Chrome/96.0.4664.110","協(xié)議版本": "1.3","用戶(hù)代理":" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36","V8-Version": "9.6.180.21","WebKit-Version": "537.36 (@d5ef0e8214bc14c9b5bbf69a1515e431394c62a6)","webSocketDebuggerUrl": "ws://127.0.0.1/devers-browse/dev22921 -4d5b-b9e6-37d634aa719a"}
chromedp代碼調用chromedp/headless-shell采集微信公眾號文章內容
Linux下可以正常使用Headless Chrome無(wú)頭瀏覽器。剩下的就是調用它的代碼了。
現在我們開(kāi)始編寫(xiě)采集微信文章使用的chrome代碼:
定義關(guān)鍵字,artile struct.go
package main
type Keyword struct {
Id int64 `json:"id"`
Name string `json:"name"`
Level int `json:"level"`
ArticleCount int `json:"article_count"`
LastTime int64 `json:"last_time"` //上次執行時(shí)間
}
type Article struct {
Id int64 `json:"id"`
KeywordId int64 `json:"keyword_id"`
Title string `json:"title"`
Keywords string `json:"keywords"`
Description string `json:"description"`
OriginUrl string `json:"origin_url"`
Status int `json:"status"`
CreatedTime int `json:"created_time"`
UpdatedTime int `json:"updated_time"`
Content string `json:"content"`
ContentText string `json:"-"`
}
復制代碼
編寫(xiě)核心代碼 core.go
package main
import (
"context"
"fmt"
"github.com/chromedp/cdproto/cdp"
"github.com/chromedp/chromedp"
"log"
"net"
"net/url"
"strings"
"time"
)
func CollectArticleFromWeixin(keyword *Keyword) []*Article {
timeCtx, cancel := context.WithTimeout(GetChromeCtx(false), 30*time.Second)
defer cancel()
var collectLink string
err := chromedp.Run(timeCtx,
chromedp.Navigate(fmt.Sprintf("https://weixin.sogou.com/weixi ... ot%3B, keyword.Name)),
chromedp.WaitVisible(`//ul[@class="news-list"]`),
chromedp.Location(&collectLink),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗1:", keyword.Name, err.Error())
return nil
}
log.Println("正在采集列表:", collectLink)
var aLinks []*cdp.Node
if err := chromedp.Run(timeCtx, chromedp.Nodes(`//ul[@class="news-list"]//h3//a`, &aLinks)); err != nil {
log.Println("讀取搜狗搜索列表失敗2:", keyword.Name, err.Error())
return nil
}
var articles []*Article
for i := 0; i < len(aLinks); i++ {
href := aLinks[i].AttributeValue("href")
href, _ = joinURL("https://weixin.sogou.com/", href)
article := &Article{}
err = chromedp.Run(timeCtx,
chromedp.Navigate(href),
chromedp.WaitVisible(`#js_article`),
chromedp.Location(&article.OriginUrl),
chromedp.Text(`#activity-name`, &article.Title, chromedp.NodeVisible),
chromedp.InnerHTML("#js_content", &article.Content, chromedp.ByID),
chromedp.Text("#js_content", &article.ContentText, chromedp.ByID),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗3:", keyword.Name, err.Error())
}
log.Println("采集文章:", article.Title, len(article.Content), article.OriginUrl)
articles = append(articles, article)
}
return articles
}
// 重組url
func joinURL(baseURL, subURL string) (fullURL, fullURLWithoutFrag string) {
baseURL = strings.TrimSpace(baseURL)
subURL = strings.TrimSpace(subURL)
baseURLObj, _ := url.Parse(baseURL)
subURLObj, _ := url.Parse(subURL)
fullURLObj := baseURLObj.ResolveReference(subURLObj)
fullURL = fullURLObj.String()
fullURLObj.Fragment = ""
fullURLWithoutFrag = fullURLObj.String()
return
}
//檢查是否有9222端口,來(lái)判斷是否運行在linux上
func checkChromePort() bool {
addr := net.JoinHostPort("", "9222")
conn, err := net.DialTimeout("tcp", addr, 1*time.Second)
if err != nil {
return false
}
defer conn.Close()
return true
}
// ChromeCtx 使用一個(gè)實(shí)例
var ChromeCtx context.Context
func GetChromeCtx(focus bool) context.Context {
if ChromeCtx == nil || focus {
allocOpts := chromedp.DefaultExecAllocatorOptions[:]
allocOpts = append(allocOpts,
chromedp.DisableGPU,
chromedp.Flag("blink-settings", "imagesEnabled=false"),
chromedp.UserAgent(`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36`),
chromedp.Flag("accept-language", `zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6`),
)
if checkChromePort() {
// 不知道為何,不能直接使用 NewExecAllocator ,因此增加 使用 ws://127.0.0.1:9222/ 來(lái)調用
c, _ := chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222/")
ChromeCtx, _ = chromedp.NewContext(c)
} else {
c, _ := chromedp.NewExecAllocator(context.Background(), allocOpts...)
ChromeCtx, _ = chromedp.NewContext(c)
}
}
return ChromeCtx
}
復制代碼
寫(xiě)入入口文件main.go
package main
import "log"
func main() {
word := Keyword{
Name: "golang",
}
result := CollectArticleFromWeixin(&word)
for i, v := range result {
log.Println(i, v.Title, len(v.Content), v.OriginUrl)
log.Println("純內容:", v.ContentText)
}
}
復制代碼
運行結果測試:
偉大的結果出來(lái)了。
如果您對此代碼感興趣,可以從這里獲取 /fesiong/gob...。
本采集代碼僅供研究學(xué)習之用,不得用于非法用途。
文章采集調用( 如何使用Scrapy結合PhantomJS采集天貓商品內容的小程序?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 146 次瀏覽 ? 2022-01-04 21:01
如何使用Scrapy結合PhantomJS采集天貓商品內容的小程序?)
1、介紹
最近在看Scrapy爬蟲(chóng)框架,嘗試用Scrapy框架寫(xiě)一個(gè)簡(jiǎn)單的小程序,可以實(shí)現網(wǎng)頁(yè)信息采集。在嘗試的過(guò)程中遇到了很多小問(wèn)題,希望大家給點(diǎn)建議。
本文主要介紹如何使用Scrapy結合PhantomJS采集天貓產(chǎn)品內容。文章中自定義了一個(gè)DOWNLOADER_MIDDLEWARES,用于采集需要加載js的動(dòng)態(tài)網(wǎng)頁(yè)內容??戳撕芏嚓P(guān)于DOWNLOADER_MIDDLEWARES的資料,總結起來(lái),使用簡(jiǎn)單,但是會(huì )阻塞框架,所以性能不好。有資料提到自定義DOWNLOADER_HANDLER或者使用scrapyjs可以解決框架阻塞的問(wèn)題。有興趣的朋友可以去研究一下,這里就不多說(shuō)了。
2、具體實(shí)現2.1、環(huán)境要求
準備Python開(kāi)發(fā)運行環(huán)境需要進(jìn)行以下步驟:
Python--從官網(wǎng)下載安裝部署環(huán)境變量(本文使用的Python版本為3.5.1)
lxml--從官網(wǎng)庫下載對應版本的.whl文件,然后在命令行界面執行“pip install .whl文件路徑”
Scrapy--在命令行界面執行“pip install Scrapy”。詳情請參考《Scrapy的首次運行測試》
selenium--執行“pip install selenium”的命令行界面
PhantomJS --官網(wǎng)下載
以上步驟展示了兩種安裝方式: 1、安裝本地下載的wheel包; 2、使用Python安裝管理器進(jìn)行遠程下載安裝。注意:包版本需要與python版本匹配
2.2、開(kāi)發(fā)測試流程
首先找到需要采集的網(wǎng)頁(yè),這里簡(jiǎn)單搜索一個(gè)天貓產(chǎn)品,網(wǎng)址,頁(yè)面如下:
然后開(kāi)始寫(xiě)代碼,下面的代碼默認在命令行界面執行
1),創(chuàng )建一個(gè)scrapy爬蟲(chóng)項目tmSpider
E:\python-3.5.1>scrapy?startproject?tmSpider
2),修改settings.py配置
配置如下:
DOWNLOADER_MIDDLEWARES?=?{
????'tmSpider.middlewares.middleware.CustomMiddlewares':?543,
????'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':?None
}
3),在項目目錄下創(chuàng )建一個(gè)middlewares文件夾,然后在該文件夾下創(chuàng )建一個(gè)middleware.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
import?tmSpider.middlewares.downloader?as?downloader
class?CustomMiddlewares(object):
????def?process_request(self,?request,?spider):
????????url?=?str(request.url)
????????dl?=?downloader.CustomDownloader()
????????content?=?dl.VisitPersonPage(url)
????????return?HtmlResponse(url,?status?=?200,?body?=?content)
????
????def?process_response(self,?request,?response,?spider):
????????if?len(response.body)?==?100:
????????????return?IgnoreRequest("body?length?==?100")
????????else:
????????????return?response
4),使用selenium和PhantomJS編寫(xiě)一個(gè)網(wǎng)頁(yè)內容下載器,也在上一步創(chuàng )建的middlewares文件夾中創(chuàng )建一個(gè)downloader.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
import?time
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
from?selenium?import?webdriver
import?selenium.webdriver.support.ui?as?ui?
class?CustomDownloader(object):
????def?__init__(self):
????????#?use?any?browser?you?wish
????????cap?=?webdriver.DesiredCapabilities.PHANTOMJS
????????cap["phantomjs.page.settings.resourceTimeout"]?=?1000
????????cap["phantomjs.page.settings.loadImages"]?=?True
????????cap["phantomjs.page.settings.disk-cache"]?=?True
????????cap["phantomjs.page.customHeaders.Cookie"]?=?'SINAGLOBAL=3955422793326.2764.1451802953297;?'
????????self.driver?=?webdriver.PhantomJS(executable_path='F:/phantomjs/bin/phantomjs.exe',?desired_capabilities=cap)
????????wait?=?ui.WebDriverWait(self.driver,10)
????
????def?VisitPersonPage(self,?url):
????????print('正在加載網(wǎng)站.....')
????????self.driver.get(url)
????????time.sleep(1)
????????#?翻到底,詳情加載
????????js="var?q=document.documentElement.scrollTop=10000"
????????self.driver.execute_script(js)
????????time.sleep(5)
????????content?=?self.driver.page_source.encode('gbk',?'ignore')
????????print('網(wǎng)頁(yè)加載完畢.....')
????????return?content
????def?__del__(self):
????????self.driver.quit()
5) 創(chuàng )建爬蟲(chóng)模塊
在項目目錄E:python-3.5.1tmSpider,執行如下代碼:
E:\python-3.5.1\tmSpider>scrapy?genspider?tmall?'tmall.com'
執行后會(huì )在項目目錄E:python-3.5.1tmSpidermSpiderspiders下自動(dòng)生成tmall.py程序文件。該程序中的解析函數處理scrapy下載器返回的網(wǎng)頁(yè)內容。 采集網(wǎng)頁(yè)信息的方法可以是:
#?-*-?coding:?utf-8?-*-
import?time
import?scrapy
import?tmSpider.gooseeker.gsextractor?as?gsextractor
class?TmallSpider(scrapy.Spider):
????name?=?"tmall"
????allowed_domains?=?["tmall.com"]
????start_urls?=?(
????????'https://world.tmall.com/item/526449276263.htm',
????)
????
????#?獲得當前時(shí)間戳
????def?getTime(self):
????????current_time?=?str(time.time())
????????m?=?current_time.find('.')
????????current_time?=?current_time[0:m]
????????return?current_time
????def?parse(self,?response):
????????html?=?response.body
????????print("----------------------------------------------------------------------------")
????????extra=gsextractor.GsExtractor()
????????extra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e",?"淘寶天貓_商品詳情30474","tmall","list")
????????result?=?extra.extract(html)
????????print(str(result).encode('gbk',?'ignore').decode('gbk'))
????????#file_name?=?'F:/temp/淘寶天貓_商品詳情30474_'?+?self.getTime()?+?'.xml'
????????#open(file_name,"wb").write(result)
6),啟動(dòng)爬蟲(chóng)
在E:python-3.5.1tmSpider項目目錄下執行命令
E:\python-3.5.1\simpleSpider>scrapy?crawl?tmall
輸出結果:
提一下,上面的命令一次只能啟動(dòng)一個(gè)爬蟲(chóng)。如果你想同時(shí)啟動(dòng)多個(gè)爬蟲(chóng)怎么辦?然后需要自定義一個(gè)爬蟲(chóng)啟動(dòng)模塊,在spider下創(chuàng )建模塊文件runcrawl.py,代碼如下
#?-*-?coding:?utf-8?-*-
import?scrapy
from?twisted.internet?import?reactor
from?scrapy.crawler?import?CrawlerRunner
from?tmall?import?TmallSpider
...
spider?=?TmallSpider(domain='tmall.com')
runner?=?CrawlerRunner()
runner.crawl(spider)
...
d?=?runner.join()
d.addBoth(lambda?_:?reactor.stop())
reactor.run()
執行runcrawl.py文件并輸出結果:
3、展望
通過(guò)自定義DOWNLOADER_MIDDLEWARES調用PhantomJs實(shí)現爬蟲(chóng)后,一直在糾結框架阻塞的問(wèn)題,一直在想解決辦法。后面會(huì )研究scrapyjs、splash等調用瀏覽器的方式,看看能不能有效的解決這個(gè)問(wèn)題。
4、相關(guān)文件
1、Python即時(shí)網(wǎng)絡(luò )爬蟲(chóng):API說(shuō)明
5、采集GooSeeker開(kāi)源代碼下載源碼
1、GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源碼
6、文檔修改歷史
1, 2016-07-07: V1.0 查看全部
文章采集調用(
如何使用Scrapy結合PhantomJS采集天貓商品內容的小程序?)

1、介紹
最近在看Scrapy爬蟲(chóng)框架,嘗試用Scrapy框架寫(xiě)一個(gè)簡(jiǎn)單的小程序,可以實(shí)現網(wǎng)頁(yè)信息采集。在嘗試的過(guò)程中遇到了很多小問(wèn)題,希望大家給點(diǎn)建議。
本文主要介紹如何使用Scrapy結合PhantomJS采集天貓產(chǎn)品內容。文章中自定義了一個(gè)DOWNLOADER_MIDDLEWARES,用于采集需要加載js的動(dòng)態(tài)網(wǎng)頁(yè)內容??戳撕芏嚓P(guān)于DOWNLOADER_MIDDLEWARES的資料,總結起來(lái),使用簡(jiǎn)單,但是會(huì )阻塞框架,所以性能不好。有資料提到自定義DOWNLOADER_HANDLER或者使用scrapyjs可以解決框架阻塞的問(wèn)題。有興趣的朋友可以去研究一下,這里就不多說(shuō)了。
2、具體實(shí)現2.1、環(huán)境要求
準備Python開(kāi)發(fā)運行環(huán)境需要進(jìn)行以下步驟:
Python--從官網(wǎng)下載安裝部署環(huán)境變量(本文使用的Python版本為3.5.1)
lxml--從官網(wǎng)庫下載對應版本的.whl文件,然后在命令行界面執行“pip install .whl文件路徑”
Scrapy--在命令行界面執行“pip install Scrapy”。詳情請參考《Scrapy的首次運行測試》
selenium--執行“pip install selenium”的命令行界面
PhantomJS --官網(wǎng)下載
以上步驟展示了兩種安裝方式: 1、安裝本地下載的wheel包; 2、使用Python安裝管理器進(jìn)行遠程下載安裝。注意:包版本需要與python版本匹配
2.2、開(kāi)發(fā)測試流程
首先找到需要采集的網(wǎng)頁(yè),這里簡(jiǎn)單搜索一個(gè)天貓產(chǎn)品,網(wǎng)址,頁(yè)面如下:

然后開(kāi)始寫(xiě)代碼,下面的代碼默認在命令行界面執行
1),創(chuàng )建一個(gè)scrapy爬蟲(chóng)項目tmSpider
E:\python-3.5.1>scrapy?startproject?tmSpider
2),修改settings.py配置
配置如下:
DOWNLOADER_MIDDLEWARES?=?{
????'tmSpider.middlewares.middleware.CustomMiddlewares':?543,
????'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':?None
}
3),在項目目錄下創(chuàng )建一個(gè)middlewares文件夾,然后在該文件夾下創(chuàng )建一個(gè)middleware.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
import?tmSpider.middlewares.downloader?as?downloader
class?CustomMiddlewares(object):
????def?process_request(self,?request,?spider):
????????url?=?str(request.url)
????????dl?=?downloader.CustomDownloader()
????????content?=?dl.VisitPersonPage(url)
????????return?HtmlResponse(url,?status?=?200,?body?=?content)
????
????def?process_response(self,?request,?response,?spider):
????????if?len(response.body)?==?100:
????????????return?IgnoreRequest("body?length?==?100")
????????else:
????????????return?response
4),使用selenium和PhantomJS編寫(xiě)一個(gè)網(wǎng)頁(yè)內容下載器,也在上一步創(chuàng )建的middlewares文件夾中創(chuàng )建一個(gè)downloader.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
import?time
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
from?selenium?import?webdriver
import?selenium.webdriver.support.ui?as?ui?
class?CustomDownloader(object):
????def?__init__(self):
????????#?use?any?browser?you?wish
????????cap?=?webdriver.DesiredCapabilities.PHANTOMJS
????????cap["phantomjs.page.settings.resourceTimeout"]?=?1000
????????cap["phantomjs.page.settings.loadImages"]?=?True
????????cap["phantomjs.page.settings.disk-cache"]?=?True
????????cap["phantomjs.page.customHeaders.Cookie"]?=?'SINAGLOBAL=3955422793326.2764.1451802953297;?'
????????self.driver?=?webdriver.PhantomJS(executable_path='F:/phantomjs/bin/phantomjs.exe',?desired_capabilities=cap)
????????wait?=?ui.WebDriverWait(self.driver,10)
????
????def?VisitPersonPage(self,?url):
????????print('正在加載網(wǎng)站.....')
????????self.driver.get(url)
????????time.sleep(1)
????????#?翻到底,詳情加載
????????js="var?q=document.documentElement.scrollTop=10000"
????????self.driver.execute_script(js)
????????time.sleep(5)
????????content?=?self.driver.page_source.encode('gbk',?'ignore')
????????print('網(wǎng)頁(yè)加載完畢.....')
????????return?content
????def?__del__(self):
????????self.driver.quit()
5) 創(chuàng )建爬蟲(chóng)模塊
在項目目錄E:python-3.5.1tmSpider,執行如下代碼:
E:\python-3.5.1\tmSpider>scrapy?genspider?tmall?'tmall.com'
執行后會(huì )在項目目錄E:python-3.5.1tmSpidermSpiderspiders下自動(dòng)生成tmall.py程序文件。該程序中的解析函數處理scrapy下載器返回的網(wǎng)頁(yè)內容。 采集網(wǎng)頁(yè)信息的方法可以是:
#?-*-?coding:?utf-8?-*-
import?time
import?scrapy
import?tmSpider.gooseeker.gsextractor?as?gsextractor
class?TmallSpider(scrapy.Spider):
????name?=?"tmall"
????allowed_domains?=?["tmall.com"]
????start_urls?=?(
????????'https://world.tmall.com/item/526449276263.htm',
????)
????
????#?獲得當前時(shí)間戳
????def?getTime(self):
????????current_time?=?str(time.time())
????????m?=?current_time.find('.')
????????current_time?=?current_time[0:m]
????????return?current_time
????def?parse(self,?response):
????????html?=?response.body
????????print("----------------------------------------------------------------------------")
????????extra=gsextractor.GsExtractor()
????????extra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e",?"淘寶天貓_商品詳情30474","tmall","list")
????????result?=?extra.extract(html)
????????print(str(result).encode('gbk',?'ignore').decode('gbk'))
????????#file_name?=?'F:/temp/淘寶天貓_商品詳情30474_'?+?self.getTime()?+?'.xml'
????????#open(file_name,"wb").write(result)
6),啟動(dòng)爬蟲(chóng)
在E:python-3.5.1tmSpider項目目錄下執行命令
E:\python-3.5.1\simpleSpider>scrapy?crawl?tmall
輸出結果:

提一下,上面的命令一次只能啟動(dòng)一個(gè)爬蟲(chóng)。如果你想同時(shí)啟動(dòng)多個(gè)爬蟲(chóng)怎么辦?然后需要自定義一個(gè)爬蟲(chóng)啟動(dòng)模塊,在spider下創(chuàng )建模塊文件runcrawl.py,代碼如下
#?-*-?coding:?utf-8?-*-
import?scrapy
from?twisted.internet?import?reactor
from?scrapy.crawler?import?CrawlerRunner
from?tmall?import?TmallSpider
...
spider?=?TmallSpider(domain='tmall.com')
runner?=?CrawlerRunner()
runner.crawl(spider)
...
d?=?runner.join()
d.addBoth(lambda?_:?reactor.stop())
reactor.run()
執行runcrawl.py文件并輸出結果:

3、展望
通過(guò)自定義DOWNLOADER_MIDDLEWARES調用PhantomJs實(shí)現爬蟲(chóng)后,一直在糾結框架阻塞的問(wèn)題,一直在想解決辦法。后面會(huì )研究scrapyjs、splash等調用瀏覽器的方式,看看能不能有效的解決這個(gè)問(wèn)題。
4、相關(guān)文件
1、Python即時(shí)網(wǎng)絡(luò )爬蟲(chóng):API說(shuō)明
5、采集GooSeeker開(kāi)源代碼下載源碼
1、GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源碼
6、文檔修改歷史
1, 2016-07-07: V1.0
文章采集調用(無(wú)憂(yōu)主機php虛擬主機完美支持程序的外部鏈接,路徑知道嗎?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 149 次瀏覽 ? 2022-01-04 21:00
德德cms是一款功能強大的企業(yè)建站程序,完美支持無(wú)憂(yōu)主機php虛擬主機。在非常成熟的Dedecms程序面前,總會(huì )有一些不完善的地方。文章文章發(fā)表后,有可能被其他人轉發(fā),或者采集;如果在這個(gè)文章的內容中加入當前文檔地址和轉載說(shuō)明,則被轉載的<??@文章將收錄當前的文章 URL,一方面,網(wǎng)站@ >內部鏈接,另一方面,外部鏈接被轉載后無(wú)形中形成。像這種一石二鳥(niǎo)的做法,趕緊學(xué)起來(lái)吧!首先,織夢(mèng)程序以網(wǎng)站@>的主題為模板,為整個(gè)站點(diǎn)生成內容,然后我們直接把需要修改的模板文件下載到本地,文章內容模板文件的名字是:article_article.htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:
操作完成后保存上傳到網(wǎng)站@>空間,然后在織夢(mèng)后臺更新生成的文檔頁(yè)面。筆記: 查看全部
文章采集調用(無(wú)憂(yōu)主機php虛擬主機完美支持程序的外部鏈接,路徑知道嗎?)
德德cms是一款功能強大的企業(yè)建站程序,完美支持無(wú)憂(yōu)主機php虛擬主機。在非常成熟的Dedecms程序面前,總會(huì )有一些不完善的地方。文章文章發(fā)表后,有可能被其他人轉發(fā),或者采集;如果在這個(gè)文章的內容中加入當前文檔地址和轉載說(shuō)明,則被轉載的<??@文章將收錄當前的文章 URL,一方面,網(wǎng)站@ >內部鏈接,另一方面,外部鏈接被轉載后無(wú)形中形成。像這種一石二鳥(niǎo)的做法,趕緊學(xué)起來(lái)吧!首先,織夢(mèng)程序以網(wǎng)站@>的主題為模板,為整個(gè)站點(diǎn)生成內容,然后我們直接把需要修改的模板文件下載到本地,文章內容模板文件的名字是:article_article.htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:

操作完成后保存上傳到網(wǎng)站@>空間,然后在織夢(mèng)后臺更新生成的文檔頁(yè)面。筆記:
文章采集調用(pbootcms文章(PbootDemoSkycaiji)插件()(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 141 次瀏覽 ? 2022-01-04 06:00
pbootcms文章(PbootDemoSkycaiji)插件直接在優(yōu)采云采集器云平臺下載使用。該插件由無(wú)皮小芒果開(kāi)發(fā)。插件默認只能發(fā)布新聞欄目,產(chǎn)品案例過(guò)濾,需要手動(dòng)修改。
插件下載后,我們可以在網(wǎng)站根目錄優(yōu)采云采集器安裝目錄中找到路徑:網(wǎng)站根目錄采集器安裝目錄pluginleasecmsPbootDemoSkycaiji.php
打開(kāi)這個(gè)文件開(kāi)頭的代碼就是自動(dòng)讀取我們的數據庫信息,不管是mysql還是sqlite數據庫都是一樣的,自動(dòng)抓取鏈接。
這是我們網(wǎng)站對應的信息,如作者、文章內容、產(chǎn)品分類(lèi)、縮略圖等,這里可以根據我們網(wǎng)站的需要添加更多參數。
此處的信息對應于我們網(wǎng)站 數據庫中的字段。如果這里沒(méi)有字段,可以直接進(jìn)入數據庫添加進(jìn)去。 有一點(diǎn)需要注意的是,這里的數據庫字段必須與前面的參數一一對應。例如,如果我們的參數中添加了縮略圖,那么我們必須找到該字段并填寫(xiě)我們在參數中添加的名稱(chēng)。
這里默認過(guò)濾其他目錄,只取我們數據庫中的新聞列表信息。如果我們要發(fā)布產(chǎn)品或案例,則無(wú)法使用。我們需要做的就是添加
// $catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select ();//文章Categories 可以注釋或刪除。
添加 $catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章 分類(lèi)就可以了一個(gè)匹配所有網(wǎng)站的目錄,上面是pbootcms文章(PbootDemoSkycaiji)插件的詳細介紹,上面的描述基本上沒(méi)有什么問(wèn)題,怎么能你還可以,如果你明白可以咨詢(xún)我們。
相關(guān)知識點(diǎn):
本站文章均摘自權威資料、書(shū)籍或網(wǎng)絡(luò )原創(chuàng )文章。如有版權糾紛或侵權,請立即聯(lián)系我們刪除。允許復制和轉載!謝謝... 查看全部
文章采集調用(pbootcms文章(PbootDemoSkycaiji)插件()(組圖))
pbootcms文章(PbootDemoSkycaiji)插件直接在優(yōu)采云采集器云平臺下載使用。該插件由無(wú)皮小芒果開(kāi)發(fā)。插件默認只能發(fā)布新聞欄目,產(chǎn)品案例過(guò)濾,需要手動(dòng)修改。

插件下載后,我們可以在網(wǎng)站根目錄優(yōu)采云采集器安裝目錄中找到路徑:網(wǎng)站根目錄采集器安裝目錄pluginleasecmsPbootDemoSkycaiji.php

打開(kāi)這個(gè)文件開(kāi)頭的代碼就是自動(dòng)讀取我們的數據庫信息,不管是mysql還是sqlite數據庫都是一樣的,自動(dòng)抓取鏈接。

這是我們網(wǎng)站對應的信息,如作者、文章內容、產(chǎn)品分類(lèi)、縮略圖等,這里可以根據我們網(wǎng)站的需要添加更多參數。

此處的信息對應于我們網(wǎng)站 數據庫中的字段。如果這里沒(méi)有字段,可以直接進(jìn)入數據庫添加進(jìn)去。 有一點(diǎn)需要注意的是,這里的數據庫字段必須與前面的參數一一對應。例如,如果我們的參數中添加了縮略圖,那么我們必須找到該字段并填寫(xiě)我們在參數中添加的名稱(chēng)。

這里默認過(guò)濾其他目錄,只取我們數據庫中的新聞列表信息。如果我們要發(fā)布產(chǎn)品或案例,則無(wú)法使用。我們需要做的就是添加
// $catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select ();//文章Categories 可以注釋或刪除。
添加 $catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章 分類(lèi)就可以了一個(gè)匹配所有網(wǎng)站的目錄,上面是pbootcms文章(PbootDemoSkycaiji)插件的詳細介紹,上面的描述基本上沒(méi)有什么問(wèn)題,怎么能你還可以,如果你明白可以咨詢(xún)我們。
相關(guān)知識點(diǎn):
本站文章均摘自權威資料、書(shū)籍或網(wǎng)絡(luò )原創(chuàng )文章。如有版權糾紛或侵權,請立即聯(lián)系我們刪除。允許復制和轉載!謝謝...
文章采集調用(dedecms如何修改這一上限值)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 133 次瀏覽 ? 2022-01-03 10:09
dedecmsSystem文章 調用描述最大字符數為250字節,設置文章摘要(可通過(guò)infolen或description相關(guān)標簽調用)最多250個(gè)字符,設置上限的次要目的是減少數據庫的冗余,保證網(wǎng)絡(luò )的優(yōu)良性能。所以,對介紹的內容不設上限顯然是不合理的,但如果上限可以自由控制,dedecms仿站會(huì )對網(wǎng)頁(yè)內容的布局帶來(lái)積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,NET源代碼。頻道列表頁(yè)面的文章匯總經(jīng)常需要調用dedecms。如果文章摘要中的字數可以控制無(wú)效,頁(yè)面布局可以非常靈活。
我們先說(shuō)一下如何修改這個(gè)上限,這樣才能顯示出方法的要點(diǎn)[field:description function="cn_substr(@me, number of characters)"/]。
獲取Dedecms系統中文章抽象相關(guān)的php文件。主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
在添加頁(yè)面,有一句話(huà): $description = cn_substrR($description, $cfg_auot_description);這句話(huà)實(shí)現了[field:description function="cn_substr(@me, number of characters)"/] 這個(gè)Feature。由于此聲明確實(shí)對頁(yè)面布局有益,因此我們盡量不做任何更改。
在編輯頁(yè)面上,有一句:$description = cn_substrR($description, 250);,這句話(huà)出現了熟悉的字符數250,是系統設置文章抽象字符數上限,如果是gbk編碼,則顯示125個(gè)字,如果是utf-8編碼,則是81個(gè)字,顯然我們要突破文章抽象的上限字符,必須取??梢?,這里可以把250修改成別的值,比如500。這里不建議設置太高,一是列表頁(yè)不需要顯示太多內容(顯示內容太多還不如間接使用body),另一個(gè)是避免數據庫中的冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面,找到if($dsize>250) $dsize = 250;語(yǔ)句。這個(gè)限制了后臺可以檢索到的字符數,把250改成500。 ,織夢(mèng)仿站的意思是字符數和之前修改的不一樣。(如果你確認你的每個(gè)文章都是手動(dòng)添加的,手動(dòng)完成就不需要修改這個(gè)文件了摘要獲取。從摘要中獲取minor還是為大量文章和采集準備的。)
首先登錄后臺,在系統-系統基本參數-其他選項中,可以將驅動(dòng)摘要的長(cháng)度改為500,與之前修改的字符數不同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid="row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為web提供了更廣闊的空間頁(yè)面布局。
說(shuō)說(shuō)德德cms文章或者調用文章列表頁(yè)上的summary方法
1: [field:info /]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me, 字符數)"/]
第二種方法1、是間接調用文章的summary。在被調用的詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}在{/dede:arclist}中,設置摘要中的字符數(最多250)由系統設置;如果使用[field:description /],間接使用后臺設置的抽象字符上限(也有后臺上限為250個(gè)字符)。顯然這些兩種方法都非常被動(dòng)和靈活。
方法四3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在文章抽象內容的上限不正常修改的情況下,這四種方法區別不大。
==========================
1:[field:info /]
2:[field:description /]
3:[field:info function="cn_substr(@me,字符數)"/]
4:[field:description function="cn_substr(@me, 字符數)"/]
這四個(gè)方法用于調用文章描述標簽。但它最多只能調用前 250 個(gè)字符。如果要調用更多,需要修改幾個(gè)地方:
1.article_description_main.php頁(yè)面,找到“if($dsize>250) $dsize = 250;”這句,把250改成500
2.登錄后臺,在系統-系統基本參數-其他選項中,將自動(dòng)匯總的長(cháng)度改為500.
3.登錄后臺執行SQL語(yǔ)句:alter table `dede_archives` change `description` `description` varchar(1000)
調用標簽{dede:field.description function='cn_substr(@me,500)'/}??梢燥@示500個(gè)字符) 查看全部
文章采集調用(dedecms如何修改這一上限值)
dedecmsSystem文章 調用描述最大字符數為250字節,設置文章摘要(可通過(guò)infolen或description相關(guān)標簽調用)最多250個(gè)字符,設置上限的次要目的是減少數據庫的冗余,保證網(wǎng)絡(luò )的優(yōu)良性能。所以,對介紹的內容不設上限顯然是不合理的,但如果上限可以自由控制,dedecms仿站會(huì )對網(wǎng)頁(yè)內容的布局帶來(lái)積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,NET源代碼。頻道列表頁(yè)面的文章匯總經(jīng)常需要調用dedecms。如果文章摘要中的字數可以控制無(wú)效,頁(yè)面布局可以非常靈活。
我們先說(shuō)一下如何修改這個(gè)上限,這樣才能顯示出方法的要點(diǎn)[field:description function="cn_substr(@me, number of characters)"/]。
獲取Dedecms系統中文章抽象相關(guān)的php文件。主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
在添加頁(yè)面,有一句話(huà): $description = cn_substrR($description, $cfg_auot_description);這句話(huà)實(shí)現了[field:description function="cn_substr(@me, number of characters)"/] 這個(gè)Feature。由于此聲明確實(shí)對頁(yè)面布局有益,因此我們盡量不做任何更改。
在編輯頁(yè)面上,有一句:$description = cn_substrR($description, 250);,這句話(huà)出現了熟悉的字符數250,是系統設置文章抽象字符數上限,如果是gbk編碼,則顯示125個(gè)字,如果是utf-8編碼,則是81個(gè)字,顯然我們要突破文章抽象的上限字符,必須取??梢?,這里可以把250修改成別的值,比如500。這里不建議設置太高,一是列表頁(yè)不需要顯示太多內容(顯示內容太多還不如間接使用body),另一個(gè)是避免數據庫中的冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面,找到if($dsize>250) $dsize = 250;語(yǔ)句。這個(gè)限制了后臺可以檢索到的字符數,把250改成500。 ,織夢(mèng)仿站的意思是字符數和之前修改的不一樣。(如果你確認你的每個(gè)文章都是手動(dòng)添加的,手動(dòng)完成就不需要修改這個(gè)文件了摘要獲取。從摘要中獲取minor還是為大量文章和采集準備的。)
首先登錄后臺,在系統-系統基本參數-其他選項中,可以將驅動(dòng)摘要的長(cháng)度改為500,與之前修改的字符數不同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid="row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為web提供了更廣闊的空間頁(yè)面布局。
說(shuō)說(shuō)德德cms文章或者調用文章列表頁(yè)上的summary方法
1: [field:info /]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me, 字符數)"/]
第二種方法1、是間接調用文章的summary。在被調用的詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}在{/dede:arclist}中,設置摘要中的字符數(最多250)由系統設置;如果使用[field:description /],間接使用后臺設置的抽象字符上限(也有后臺上限為250個(gè)字符)。顯然這些兩種方法都非常被動(dòng)和靈活。
方法四3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在文章抽象內容的上限不正常修改的情況下,這四種方法區別不大。
==========================
1:[field:info /]
2:[field:description /]
3:[field:info function="cn_substr(@me,字符數)"/]
4:[field:description function="cn_substr(@me, 字符數)"/]
這四個(gè)方法用于調用文章描述標簽。但它最多只能調用前 250 個(gè)字符。如果要調用更多,需要修改幾個(gè)地方:
1.article_description_main.php頁(yè)面,找到“if($dsize>250) $dsize = 250;”這句,把250改成500
2.登錄后臺,在系統-系統基本參數-其他選項中,將自動(dòng)匯總的長(cháng)度改為500.
3.登錄后臺執行SQL語(yǔ)句:alter table `dede_archives` change `description` `description` varchar(1000)
調用標簽{dede:field.description function='cn_substr(@me,500)'/}??梢燥@示500個(gè)字符)
文章采集調用( 鄭剛SEO培訓:自動(dòng)調用隨機TAGFTP標簽和自定義數量 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2022-01-03 00:08
鄭剛SEO培訓:自動(dòng)調用隨機TAGFTP標簽和自定義數量
)
鄭景誠:簡(jiǎn)單改造wordpress采集頁(yè)面調用代碼和指令增加收錄
昨天花了一點(diǎn)時(shí)間對網(wǎng)站鄭剛SEO培訓做一個(gè)簡(jiǎn)單的頁(yè)面調整。主要修改的是采集頁(yè)面。
這篇網(wǎng)站是用WP做的,所以如果你也用WP建網(wǎng)站或者用采集的內容,可以采集這篇文章文章,這對親們有效測試代碼和操作方法。
主要目的是讓采集的頁(yè)面變化與原來(lái)的內容不同,至少有收獲,進(jìn)一步提高頁(yè)面收錄的概率。
1、自動(dòng)調用隨機TAG標簽和自定義數量
1、[修改頁(yè)面:single.php]
只要把上面的代碼放在你想要的任何頁(yè)面或位置,你就可以直接調用隨機的TAG標簽,下面的9表示調用9,這是每個(gè)頁(yè)面調用的總和不同。這叫做隨機標簽。
原因:這個(gè)動(dòng)作是為了讓每個(gè)頁(yè)面調用不同的隨機標簽來(lái)提高標簽頁(yè)收錄的概率和進(jìn)入率,因為WP的主要排名多是TAG標簽頁(yè)。
2、采集在內容頁(yè)插入隨機圖片**
第一步:修改第1頁(yè):functions.php
/* 文章隨機插圖 */
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/zt/".rand(1,3).".png";
}
return $first_img;
}
將上面的代碼放在functions.php頁(yè)面的底部,點(diǎn)擊save。請記住將中間的網(wǎng)址替換為您的網(wǎng)址。
第2步:修改第2頁(yè):single.php
<p align="center">】,鄭景承SEO培訓提供在線(xiàn)實(shí)戰SEO最新視頻,優(yōu)化工具,加微信611247免費領(lǐng)取SEO教程。 查看全部
文章采集調用(
鄭剛SEO培訓:自動(dòng)調用隨機TAGFTP標簽和自定義數量
)
鄭景誠:簡(jiǎn)單改造wordpress采集頁(yè)面調用代碼和指令增加收錄

昨天花了一點(diǎn)時(shí)間對網(wǎng)站鄭剛SEO培訓做一個(gè)簡(jiǎn)單的頁(yè)面調整。主要修改的是采集頁(yè)面。
這篇網(wǎng)站是用WP做的,所以如果你也用WP建網(wǎng)站或者用采集的內容,可以采集這篇文章文章,這對親們有效測試代碼和操作方法。
主要目的是讓采集的頁(yè)面變化與原來(lái)的內容不同,至少有收獲,進(jìn)一步提高頁(yè)面收錄的概率。
1、自動(dòng)調用隨機TAG標簽和自定義數量
1、[修改頁(yè)面:single.php]
只要把上面的代碼放在你想要的任何頁(yè)面或位置,你就可以直接調用隨機的TAG標簽,下面的9表示調用9,這是每個(gè)頁(yè)面調用的總和不同。這叫做隨機標簽。
原因:這個(gè)動(dòng)作是為了讓每個(gè)頁(yè)面調用不同的隨機標簽來(lái)提高標簽頁(yè)收錄的概率和進(jìn)入率,因為WP的主要排名多是TAG標簽頁(yè)。
2、采集在內容頁(yè)插入隨機圖片**
第一步:修改第1頁(yè):functions.php
/* 文章隨機插圖 */
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/zt/".rand(1,3).".png";
}
return $first_img;
}
將上面的代碼放在functions.php頁(yè)面的底部,點(diǎn)擊save。請記住將中間的網(wǎng)址替換為您的網(wǎng)址。
第2步:修改第2頁(yè):single.php
<p align="center">】,鄭景承SEO培訓提供在線(xiàn)實(shí)戰SEO最新視頻,優(yōu)化工具,加微信611247免費領(lǐng)取SEO教程。
文章采集調用(是因為使用分布式追蹤系統監控服務(wù)(1)_社會(huì )萬(wàn)象_光明網(wǎng)(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2021-12-28 20:07
上周的工作是開(kāi)發(fā)一個(gè)運維需求——一個(gè)連接到公有云的分布式跟蹤系統。在服務(wù)上線(xiàn)商業(yè)化之前,運維能力需要滿(mǎn)足商業(yè)化需求,而在商業(yè)化運維需求中,使用分布式跟蹤系統來(lái)監控服務(wù)是必須的,所以就有了這個(gè)需求。一個(gè)星期后,代碼已經(jīng)開(kāi)發(fā)的差不多了,還缺少驗證和上線(xiàn)工作。在此之前,我會(huì )先回顧一下。
之所以連接分布式跟蹤系統如此重要,是因為使用分布式跟蹤系統監控服務(wù)有以下好處
我們的服務(wù)主要使用Python和Go語(yǔ)言開(kāi)發(fā),您可以分別獲取相應的SDK進(jìn)行開(kāi)發(fā)。整個(gè)開(kāi)發(fā)對接流程大致如下:
聯(lián)系接口人溝通嵌入解決方案,使用統一的SDK進(jìn)行嵌入代碼開(kāi)發(fā)測試,整理服務(wù)——微服務(wù)——節點(diǎn)——日志路徑信息,服務(wù)——微服務(wù)——業(yè)務(wù)——URL信息。公司分布式跟蹤系統的日志采集借用了現有日志服務(wù)的能力。日志服務(wù)收到調用鏈日志后,會(huì )直接轉發(fā)到分布式跟蹤系統,因此需要將信息分別反饋給日志采集系統和分布式跟蹤系統在服務(wù)節點(diǎn)上安裝日志采集代理升級微服務(wù),打開(kāi)開(kāi)關(guān)打印調用鏈日志(開(kāi)始打印調用鏈日志,同時(shí),節點(diǎn)上的日志采集代理將采集到的調用鏈日志信息上報給日志系統)生產(chǎn)環(huán)境驗證連接效果:本地打印調用鏈日志正常,日志采集代理正常上報調用鏈日志;分布式跟蹤系統可以檢索到服務(wù)的跟蹤信息,可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?
與性能調優(yōu)類(lèi)似,管理可以包括:HTTP請求服務(wù)/客戶(hù)端、RPC請求服務(wù)/客戶(hù)端、數據庫訪(fǎng)問(wèn)、中間件調用和本地方法調用。
默認情況下應該跟蹤哪些點(diǎn)?
我認為對于所有項目,我們應該默認收錄
5 種點(diǎn):
埋點(diǎn)法
聽(tīng)說(shuō)Go還有辦法直接替換Go-SDK來(lái)完成嵌入式函數注入...
兩個(gè)重要的紙張標準
由 Uber 發(fā)起的 OpenTracing 現已成為云原生計算基金會(huì )的成員項目。OpenTracing 語(yǔ)義規范定義了數據模型和一些用于數據采集
的接口。它應該被視為分布式跟蹤系統的接口標準。著(zhù)名的 Jaeger 和 Zipkin 都實(shí)現了 OpenTracing API。
行業(yè)實(shí)踐參考鏈接 查看全部
文章采集調用(是因為使用分布式追蹤系統監控服務(wù)(1)_社會(huì )萬(wàn)象_光明網(wǎng)(組圖))
上周的工作是開(kāi)發(fā)一個(gè)運維需求——一個(gè)連接到公有云的分布式跟蹤系統。在服務(wù)上線(xiàn)商業(yè)化之前,運維能力需要滿(mǎn)足商業(yè)化需求,而在商業(yè)化運維需求中,使用分布式跟蹤系統來(lái)監控服務(wù)是必須的,所以就有了這個(gè)需求。一個(gè)星期后,代碼已經(jīng)開(kāi)發(fā)的差不多了,還缺少驗證和上線(xiàn)工作。在此之前,我會(huì )先回顧一下。
之所以連接分布式跟蹤系統如此重要,是因為使用分布式跟蹤系統監控服務(wù)有以下好處
我們的服務(wù)主要使用Python和Go語(yǔ)言開(kāi)發(fā),您可以分別獲取相應的SDK進(jìn)行開(kāi)發(fā)。整個(gè)開(kāi)發(fā)對接流程大致如下:
聯(lián)系接口人溝通嵌入解決方案,使用統一的SDK進(jìn)行嵌入代碼開(kāi)發(fā)測試,整理服務(wù)——微服務(wù)——節點(diǎn)——日志路徑信息,服務(wù)——微服務(wù)——業(yè)務(wù)——URL信息。公司分布式跟蹤系統的日志采集借用了現有日志服務(wù)的能力。日志服務(wù)收到調用鏈日志后,會(huì )直接轉發(fā)到分布式跟蹤系統,因此需要將信息分別反饋給日志采集系統和分布式跟蹤系統在服務(wù)節點(diǎn)上安裝日志采集代理升級微服務(wù),打開(kāi)開(kāi)關(guān)打印調用鏈日志(開(kāi)始打印調用鏈日志,同時(shí),節點(diǎn)上的日志采集代理將采集到的調用鏈日志信息上報給日志系統)生產(chǎn)環(huán)境驗證連接效果:本地打印調用鏈日志正常,日志采集代理正常上報調用鏈日志;分布式跟蹤系統可以檢索到服務(wù)的跟蹤信息,可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?
與性能調優(yōu)類(lèi)似,管理可以包括:HTTP請求服務(wù)/客戶(hù)端、RPC請求服務(wù)/客戶(hù)端、數據庫訪(fǎng)問(wèn)、中間件調用和本地方法調用。
默認情況下應該跟蹤哪些點(diǎn)?
我認為對于所有項目,我們應該默認收錄
5 種點(diǎn):
埋點(diǎn)法
聽(tīng)說(shuō)Go還有辦法直接替換Go-SDK來(lái)完成嵌入式函數注入...
兩個(gè)重要的紙張標準
由 Uber 發(fā)起的 OpenTracing 現已成為云原生計算基金會(huì )的成員項目。OpenTracing 語(yǔ)義規范定義了數據模型和一些用于數據采集
的接口。它應該被視為分布式跟蹤系統的接口標準。著(zhù)名的 Jaeger 和 Zipkin 都實(shí)現了 OpenTracing API。
行業(yè)實(shí)踐參考鏈接
文章采集調用(豆瓣網(wǎng)影評:電影中如何獲取真正請求的地址?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 488 次瀏覽 ? 2021-12-27 16:17
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests****、fake_useragent、json****、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2、如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集
的。
1)F12 右擊查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。
2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。
如何上網(wǎng)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,json
from fake_useragent import UserAgent
import csv
class Doban(object):
def __init__(self):
self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self):
pass
if __name__ == '__main__':
Siper = Doban()
Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects']
# print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf)
html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求
parse_html2 = etree.HTML(html2)
r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入
csv_file = open('scr.csv', 'a', encoding='gbk')
csv_writer = csv.writer(csv_file)
# 寫(xiě)入csv標題頭內容
csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"])
#寫(xiě)入數據
csv_writer.writerow([id, rate, urll])
7、求圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content
dirname = "./圖/" + id + ".jpg"
with open(dirname, 'wb') as f:
f.write(html2)
print("%s 【下載成功?。。?!】" % id)
8、 調用方法來(lái)實(shí)現功能。
html = self.get_page(url)
self.parse_page(html)
9、項目?jì)?yōu)化:
1) 設置時(shí)間延遲。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0
self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。
2、 控制臺會(huì )顯示下載成功信息。
3、保存 csv 文件。
4、電影圖片顯示。
[七、總結]
1、 不建議抓太多數據,可能會(huì )造成服務(wù)器負載,簡(jiǎn)單試一下。
2、 這篇文章就Python爬豆瓣的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止回爬做了相對的解決。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、需要本文源碼的可以在后臺回復“豆瓣電影”獲取。
****看完這篇文章你有收獲嗎?請轉發(fā)并分享給更多人****
IT共享家庭 查看全部
文章采集調用(豆瓣網(wǎng)影評:電影中如何獲取真正請求的地址?)
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests****、fake_useragent、json****、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2、如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集
的。
1)F12 右擊查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。
2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。
如何上網(wǎng)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,json
from fake_useragent import UserAgent
import csv
class Doban(object):
def __init__(self):
self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self):
pass
if __name__ == '__main__':
Siper = Doban()
Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects']
# print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf)
html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求
parse_html2 = etree.HTML(html2)
r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入
csv_file = open('scr.csv', 'a', encoding='gbk')
csv_writer = csv.writer(csv_file)
# 寫(xiě)入csv標題頭內容
csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"])
#寫(xiě)入數據
csv_writer.writerow([id, rate, urll])
7、求圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content
dirname = "./圖/" + id + ".jpg"
with open(dirname, 'wb') as f:
f.write(html2)
print("%s 【下載成功?。。?!】" % id)
8、 調用方法來(lái)實(shí)現功能。
html = self.get_page(url)
self.parse_page(html)
9、項目?jì)?yōu)化:
1) 設置時(shí)間延遲。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0
self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。
2、 控制臺會(huì )顯示下載成功信息。
3、保存 csv 文件。
4、電影圖片顯示。
[七、總結]
1、 不建議抓太多數據,可能會(huì )造成服務(wù)器負載,簡(jiǎn)單試一下。
2、 這篇文章就Python爬豆瓣的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止回爬做了相對的解決。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、需要本文源碼的可以在后臺回復“豆瓣電影”獲取。
****看完這篇文章你有收獲嗎?請轉發(fā)并分享給更多人****
IT共享家庭
文章采集調用(前臺會(huì )員中心調用顯示wordpress會(huì )員投搞發(fā)表的文章數量)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2021-12-26 06:15
想打電話(huà)給前臺的會(huì )員中心,顯示W(wǎng)ordPress會(huì )員發(fā)表的文章數,習慣性的搜索谷歌看看有沒(méi)有相關(guān)的教程功能代碼。如果沒(méi)有功能代碼,就找插件。如果沒(méi)有插件,那就自己考慮代碼調用。, 有幸找到zwwooooo發(fā)布的WordPress:獲取某作者文章數的教程,剛好滿(mǎn)足需要,無(wú)需自己找插件或研究,謝謝作者!
操作方法:通過(guò)WP_Query()函數實(shí)現,循環(huán)獲取數量。
在當前主題的functions.php文件中添加如下函數代碼:
1
2
3
4
5
6
7
8
9
10
/* number of author's posts by zwwooooo */
function num_of_author_posts($authorID=''){ //根據作者ID獲取該作者的文章數量
if ($authorID) {
$author_query = new WP_Query( 'posts_per_page=-1&author='.$authorID );
$i=0;
while ($author_query->have_posts()) : $author_query->the_post(); ++$i; endwhile; wp_reset_postdata();
return $i;
}
return false;
}
在要顯示作者文章數量的地方添加調用代碼:
1
注意:$authorID的獲取方式有很多種,每個(gè)頁(yè)面的獲取方式都不一樣。自行研究。一般這些函數是get_the_author_meta(), get_userdata()... 去WordPress官方查一下(直接谷歌搜索函數名即可)
相關(guān)功能代碼來(lái)自zwwooooo博客
除特別注明外,文章均由博客網(wǎng)整理發(fā)布,歡迎轉載。 查看全部
文章采集調用(前臺會(huì )員中心調用顯示wordpress會(huì )員投搞發(fā)表的文章數量)
想打電話(huà)給前臺的會(huì )員中心,顯示W(wǎng)ordPress會(huì )員發(fā)表的文章數,習慣性的搜索谷歌看看有沒(méi)有相關(guān)的教程功能代碼。如果沒(méi)有功能代碼,就找插件。如果沒(méi)有插件,那就自己考慮代碼調用。, 有幸找到zwwooooo發(fā)布的WordPress:獲取某作者文章數的教程,剛好滿(mǎn)足需要,無(wú)需自己找插件或研究,謝謝作者!
操作方法:通過(guò)WP_Query()函數實(shí)現,循環(huán)獲取數量。
在當前主題的functions.php文件中添加如下函數代碼:
1
2
3
4
5
6
7
8
9
10
/* number of author's posts by zwwooooo */
function num_of_author_posts($authorID=''){ //根據作者ID獲取該作者的文章數量
if ($authorID) {
$author_query = new WP_Query( 'posts_per_page=-1&author='.$authorID );
$i=0;
while ($author_query->have_posts()) : $author_query->the_post(); ++$i; endwhile; wp_reset_postdata();
return $i;
}
return false;
}
在要顯示作者文章數量的地方添加調用代碼:
1
注意:$authorID的獲取方式有很多種,每個(gè)頁(yè)面的獲取方式都不一樣。自行研究。一般這些函數是get_the_author_meta(), get_userdata()... 去WordPress官方查一下(直接谷歌搜索函數名即可)
相關(guān)功能代碼來(lái)自zwwooooo博客
除特別注明外,文章均由博客網(wǎng)整理發(fā)布,歡迎轉載。
文章采集調用(微服務(wù)下的幾個(gè)監控維度(下)化服務(wù))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 209 次瀏覽 ? 2021-12-26 06:01
前言
微服務(wù)是一種架構風(fēng)格。一個(gè)大型復雜的軟件應用程序通常由多個(gè)微服務(wù)組成。系統中的每一個(gè)微服務(wù)都可以獨立部署,每一個(gè)微服務(wù)都是松耦合的。每個(gè)微服務(wù)只專(zhuān)注于完成一項任務(wù),并且很好地完成該任務(wù)。
微服務(wù)之前的很多單體應用,監控復雜度相對較低,場(chǎng)景單一。在微服務(wù)下,因為業(yè)務(wù)邏輯分散在很多流程中(很多大的業(yè)務(wù),一個(gè)業(yè)務(wù)流程涉及幾十個(gè)服務(wù)),一旦一個(gè)業(yè)務(wù)出現問(wèn)題,追根溯源就像大海撈針。這時(shí)候就需要一個(gè)完整的監控系統。
一個(gè)完整的監控系統建設周期長(cháng),隨著(zhù)業(yè)務(wù)場(chǎng)景的變化,也需要迭代優(yōu)化。本文僅從幾個(gè)監控維度和霧化場(chǎng)景談如何建立統一的監控數據采集和展示系統,希望能啟發(fā)大家繼續思考監控系統的建設。
微服務(wù)下的幾個(gè)監控維度
與傳統應用的監控相比,微服務(wù)監控最明顯的變化就是視角的改變。我們已將監控從機器角度轉變?yōu)橐苑?wù)為中心的角度。從微服務(wù)的角度,可以從數據和資源兩個(gè)維度來(lái)查看監控。用代碼維度分層,如下圖:
數據維度
目前的WEB服務(wù)是主流。每個(gè)WEB服務(wù)都有一個(gè)入口,無(wú)論是APP還是WEB頁(yè)面,入口負責與用戶(hù)進(jìn)行交互,并將用戶(hù)的信息發(fā)送到后端。后端一般可以訪(fǎng)問(wèn)LB或者Gateway,負責負載。將數據平衡轉發(fā)給特定的應用程序進(jìn)行處理,最后由應用程序處理后寫(xiě)入數據庫。
資源維度
現在很多服務(wù)都部署在云中,涉及到虛擬化技術(shù)。虛擬主機運行在物理服務(wù)器上,虛擬主機通過(guò)虛擬網(wǎng)絡(luò )相互連接。資源層面的監控是必不可少的環(huán)節。我們不僅需要采集虛擬主機的性能指標,還需要知道運行虛擬主機的服務(wù)器上的CPU、內存、磁盤(pán)IO等數據,以及虛擬主機之間的連接情況。虛擬網(wǎng)絡(luò )的帶寬負載等。
代碼維度
APM,即代碼端的應用性能分析、監控和采集
,隨著(zhù)微服務(wù)的興起而出現。微服務(wù)場(chǎng)景下,一個(gè)業(yè)務(wù)流程跨越幾十個(gè)服務(wù)場(chǎng)景,只有傳統的監控數據,很難定位問(wèn)題的根源。
我們可以為代碼的技術(shù)棧開(kāi)發(fā)一個(gè)特定的集合框架。在可接受的性能損失范圍內,我們可以采集
函數之間的調用關(guān)系,服務(wù)之間的調用拓撲,并測量函數或服務(wù)的響應時(shí)間。有針對性地優(yōu)化性能或提前預測故障。
關(guān)鍵監測指標情景描述
微服務(wù)監控最大的特點(diǎn)可以用一句話(huà)概括:服務(wù)這么多,服務(wù)之間的調用也很復雜。當系統出現問(wèn)題時(shí),要想在數百個(gè)相關(guān)且錯綜復雜的服務(wù)系統中快速定位故障系統,就需要依靠關(guān)鍵的監控指標?;谝陨先齻€(gè)維度,我們分析了每個(gè)維度下各個(gè)級別可能產(chǎn)生的告警,總結了URL監控、主機監控??、產(chǎn)品監控8個(gè)原子監控場(chǎng)景。
URL監控:無(wú)論是APP還是WEB,本質(zhì)上都是通過(guò)URL發(fā)起后臺調用。您可以使用 MOCK 調用 API 獲取響應時(shí)間、響應狀態(tài)碼等指標來(lái)展示監控業(yè)務(wù)的整體健康狀況。
主機監控:通過(guò)安裝代理,采集
主機的基本監控信息,如CPU、內存、IO等。同時(shí),用戶(hù)可以通過(guò)配置文件打開(kāi)其他開(kāi)源應用如Tomcat、Nginx等數據采集開(kāi)關(guān)。
產(chǎn)品監控:公有云以產(chǎn)品的形式向用戶(hù)提供主機、網(wǎng)絡(luò )、存儲和一些中間件。產(chǎn)品服務(wù)后臺上報各個(gè)產(chǎn)品的相關(guān)指標數據,監控各個(gè)產(chǎn)品資源的健康狀況。
組件監控:一些開(kāi)源組件,如Tomcat、Nginx、Netty等監控數據采集,可以通過(guò)宿主機上的代理加載相應組件的監控采集程序。
自定義監控:服務(wù)實(shí)例采集
業(yè)務(wù)相關(guān)數據,定期調用API接口上報數據,支持多個(gè)服務(wù)實(shí)例同時(shí)上報一個(gè)監控項,支持多維度查詢(xún)告警。
資源監控:用戶(hù)根據資源上報自定義數據。每個(gè)資源具有相同的監控項,每個(gè)資源的監控項相互獨立。
APM:根據各個(gè)語(yǔ)言棧的不同,實(shí)現服務(wù)間函數調用關(guān)系和調用拓撲的展示。根據每種語(yǔ)言的不同,有的需要侵入代碼,以SDK嵌入的形式采集數據,有的與代碼解耦,通過(guò)元編程重新加載一些方法來(lái)實(shí)現數據采集。
事件監控:對公有云產(chǎn)品和業(yè)務(wù)邏輯中的不連續事件,如云盤(pán)不可用事件、SSD硬盤(pán)Reset事件等,提供統一的存儲、分析和展示。
通過(guò)以上原子場(chǎng)景的數據采集,我們可以通過(guò)UI統一展示監控數據,并基于上述三個(gè)維度設計圖形化頁(yè)面,以用戶(hù)體驗為核心。圖形化一般以時(shí)間序列為橫軸,顯示隨時(shí)間變化的指標。對于一些統計指標,分析比較結果也可以通過(guò)餅圖、直方圖等方式展示。
本文主要介紹監控系統中數據的采集和展示。至于數據存儲和報警過(guò)程,感興趣的同學(xué)可以繼續關(guān)注后續監控相關(guān)文章。
關(guān)于作者
董磊:UCloud技術(shù)專(zhuān)家。十年IT行業(yè)開(kāi)發(fā)經(jīng)驗,目前負責UCloud混合云及監控產(chǎn)品的設計開(kāi)發(fā),持續專(zhuān)注于微服務(wù)架構、監控、DevOps等領(lǐng)域。 查看全部
文章采集調用(微服務(wù)下的幾個(gè)監控維度(下)化服務(wù))
前言
微服務(wù)是一種架構風(fēng)格。一個(gè)大型復雜的軟件應用程序通常由多個(gè)微服務(wù)組成。系統中的每一個(gè)微服務(wù)都可以獨立部署,每一個(gè)微服務(wù)都是松耦合的。每個(gè)微服務(wù)只專(zhuān)注于完成一項任務(wù),并且很好地完成該任務(wù)。
微服務(wù)之前的很多單體應用,監控復雜度相對較低,場(chǎng)景單一。在微服務(wù)下,因為業(yè)務(wù)邏輯分散在很多流程中(很多大的業(yè)務(wù),一個(gè)業(yè)務(wù)流程涉及幾十個(gè)服務(wù)),一旦一個(gè)業(yè)務(wù)出現問(wèn)題,追根溯源就像大海撈針。這時(shí)候就需要一個(gè)完整的監控系統。
一個(gè)完整的監控系統建設周期長(cháng),隨著(zhù)業(yè)務(wù)場(chǎng)景的變化,也需要迭代優(yōu)化。本文僅從幾個(gè)監控維度和霧化場(chǎng)景談如何建立統一的監控數據采集和展示系統,希望能啟發(fā)大家繼續思考監控系統的建設。
微服務(wù)下的幾個(gè)監控維度
與傳統應用的監控相比,微服務(wù)監控最明顯的變化就是視角的改變。我們已將監控從機器角度轉變?yōu)橐苑?wù)為中心的角度。從微服務(wù)的角度,可以從數據和資源兩個(gè)維度來(lái)查看監控。用代碼維度分層,如下圖:
數據維度
目前的WEB服務(wù)是主流。每個(gè)WEB服務(wù)都有一個(gè)入口,無(wú)論是APP還是WEB頁(yè)面,入口負責與用戶(hù)進(jìn)行交互,并將用戶(hù)的信息發(fā)送到后端。后端一般可以訪(fǎng)問(wèn)LB或者Gateway,負責負載。將數據平衡轉發(fā)給特定的應用程序進(jìn)行處理,最后由應用程序處理后寫(xiě)入數據庫。
資源維度
現在很多服務(wù)都部署在云中,涉及到虛擬化技術(shù)。虛擬主機運行在物理服務(wù)器上,虛擬主機通過(guò)虛擬網(wǎng)絡(luò )相互連接。資源層面的監控是必不可少的環(huán)節。我們不僅需要采集虛擬主機的性能指標,還需要知道運行虛擬主機的服務(wù)器上的CPU、內存、磁盤(pán)IO等數據,以及虛擬主機之間的連接情況。虛擬網(wǎng)絡(luò )的帶寬負載等。
代碼維度
APM,即代碼端的應用性能分析、監控和采集
,隨著(zhù)微服務(wù)的興起而出現。微服務(wù)場(chǎng)景下,一個(gè)業(yè)務(wù)流程跨越幾十個(gè)服務(wù)場(chǎng)景,只有傳統的監控數據,很難定位問(wèn)題的根源。
我們可以為代碼的技術(shù)棧開(kāi)發(fā)一個(gè)特定的集合框架。在可接受的性能損失范圍內,我們可以采集
函數之間的調用關(guān)系,服務(wù)之間的調用拓撲,并測量函數或服務(wù)的響應時(shí)間。有針對性地優(yōu)化性能或提前預測故障。
關(guān)鍵監測指標情景描述
微服務(wù)監控最大的特點(diǎn)可以用一句話(huà)概括:服務(wù)這么多,服務(wù)之間的調用也很復雜。當系統出現問(wèn)題時(shí),要想在數百個(gè)相關(guān)且錯綜復雜的服務(wù)系統中快速定位故障系統,就需要依靠關(guān)鍵的監控指標?;谝陨先齻€(gè)維度,我們分析了每個(gè)維度下各個(gè)級別可能產(chǎn)生的告警,總結了URL監控、主機監控??、產(chǎn)品監控8個(gè)原子監控場(chǎng)景。
URL監控:無(wú)論是APP還是WEB,本質(zhì)上都是通過(guò)URL發(fā)起后臺調用。您可以使用 MOCK 調用 API 獲取響應時(shí)間、響應狀態(tài)碼等指標來(lái)展示監控業(yè)務(wù)的整體健康狀況。
主機監控:通過(guò)安裝代理,采集
主機的基本監控信息,如CPU、內存、IO等。同時(shí),用戶(hù)可以通過(guò)配置文件打開(kāi)其他開(kāi)源應用如Tomcat、Nginx等數據采集開(kāi)關(guān)。
產(chǎn)品監控:公有云以產(chǎn)品的形式向用戶(hù)提供主機、網(wǎng)絡(luò )、存儲和一些中間件。產(chǎn)品服務(wù)后臺上報各個(gè)產(chǎn)品的相關(guān)指標數據,監控各個(gè)產(chǎn)品資源的健康狀況。
組件監控:一些開(kāi)源組件,如Tomcat、Nginx、Netty等監控數據采集,可以通過(guò)宿主機上的代理加載相應組件的監控采集程序。
自定義監控:服務(wù)實(shí)例采集
業(yè)務(wù)相關(guān)數據,定期調用API接口上報數據,支持多個(gè)服務(wù)實(shí)例同時(shí)上報一個(gè)監控項,支持多維度查詢(xún)告警。
資源監控:用戶(hù)根據資源上報自定義數據。每個(gè)資源具有相同的監控項,每個(gè)資源的監控項相互獨立。
APM:根據各個(gè)語(yǔ)言棧的不同,實(shí)現服務(wù)間函數調用關(guān)系和調用拓撲的展示。根據每種語(yǔ)言的不同,有的需要侵入代碼,以SDK嵌入的形式采集數據,有的與代碼解耦,通過(guò)元編程重新加載一些方法來(lái)實(shí)現數據采集。
事件監控:對公有云產(chǎn)品和業(yè)務(wù)邏輯中的不連續事件,如云盤(pán)不可用事件、SSD硬盤(pán)Reset事件等,提供統一的存儲、分析和展示。
通過(guò)以上原子場(chǎng)景的數據采集,我們可以通過(guò)UI統一展示監控數據,并基于上述三個(gè)維度設計圖形化頁(yè)面,以用戶(hù)體驗為核心。圖形化一般以時(shí)間序列為橫軸,顯示隨時(shí)間變化的指標。對于一些統計指標,分析比較結果也可以通過(guò)餅圖、直方圖等方式展示。
本文主要介紹監控系統中數據的采集和展示。至于數據存儲和報警過(guò)程,感興趣的同學(xué)可以繼續關(guān)注后續監控相關(guān)文章。
關(guān)于作者
董磊:UCloud技術(shù)專(zhuān)家。十年IT行業(yè)開(kāi)發(fā)經(jīng)驗,目前負責UCloud混合云及監控產(chǎn)品的設計開(kāi)發(fā),持續專(zhuān)注于微服務(wù)架構、監控、DevOps等領(lǐng)域。
文章采集調用(給你八分鐘搞定dedeCMS(織夢(mèng)內容管理系統)(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2021-12-23 02:13
給你八分鐘搞定dedecms(織夢(mèng)內容管理系統)
,并且在易用性方面,有了長(cháng)足的發(fā)展。德德cms免費版的主要目標用戶(hù)鎖定在個(gè)人站長(cháng),功能更側重于個(gè)人網(wǎng)站或中小型門(mén)戶(hù)網(wǎng)站的建設。當然,也有企業(yè)用戶(hù)和學(xué)校使用這個(gè)系統。當我第一次看到這個(gè)界面時(shí),我很陌生。只知道界面有很多功能,但不知道具體是做什么的……我用dedecms做官網(wǎng),所以沒(méi)用很多功能。. 第4分鐘_這里的核心主要是生成網(wǎng)站的導航,可以在導航中添加文章(這里特別強調,原因是喜歡這里的想法…… 把它放在導航里所有的內容都可以用文章的形式表達)這是工作的第一步,至少我是這么認為的..第5分鐘_系統在系統欄,什么我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面
1.3K 查看全部
文章采集調用(給你八分鐘搞定dedeCMS(織夢(mèng)內容管理系統)(圖))
給你八分鐘搞定dedecms(織夢(mèng)內容管理系統)
,并且在易用性方面,有了長(cháng)足的發(fā)展。德德cms免費版的主要目標用戶(hù)鎖定在個(gè)人站長(cháng),功能更側重于個(gè)人網(wǎng)站或中小型門(mén)戶(hù)網(wǎng)站的建設。當然,也有企業(yè)用戶(hù)和學(xué)校使用這個(gè)系統。當我第一次看到這個(gè)界面時(shí),我很陌生。只知道界面有很多功能,但不知道具體是做什么的……我用dedecms做官網(wǎng),所以沒(méi)用很多功能。. 第4分鐘_這里的核心主要是生成網(wǎng)站的導航,可以在導航中添加文章(這里特別強調,原因是喜歡這里的想法…… 把它放在導航里所有的內容都可以用文章的形式表達)這是工作的第一步,至少我是這么認為的..第5分鐘_系統在系統欄,什么我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面
1.3K
文章采集調用(免費開(kāi)源可商用的PHP萬(wàn)能建站程序-DiYunCMS(帝云CMS))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2021-12-20 15:03
免費、開(kāi)源、可商用的PHP通用建站程序-帝云cms(帝云cms)
對于個(gè)性化的需求,需要在首頁(yè)或者其他模板頁(yè)面的指定分類(lèi)下調用文章,那么我們就可以實(shí)現:
網(wǎng)上很容易找到這個(gè)教程,但是有個(gè)問(wèn)題。調用的文章沒(méi)有按最新排序,或者發(fā)布時(shí)間越早排在前面,肯定是不合理的。已修復一流的資源網(wǎng)絡(luò )。這個(gè)問(wèn)題。
1、首先打開(kāi)index.php文件,找到如下代碼:
$smarty->assign('new_articles',?index_get_new_articles());?//?最新文章
在此行下方添加以下代碼:
$smarty->assign('class_articles_4',?index_get_class_articles(4,6));?//?分類(lèi)調用文章
4 是 文章 類(lèi)別 ID,6 是顯示的項目數。
如果調用的category很多,只需要復制粘貼上一行即可,但是文章category id和調用次數要根據自己的需要修改。
打開(kāi)ecshop根目錄下的includes/init.php文件,在最下方添加如下代碼,并添加到?>。
2、還在這個(gè)文件中嗎?> 在這之前添加以下函數:
/**
*?獲得指定欄目最新的文章列表。
*
*?@access?private
*?@return?array
*/
function?index_get_class_articles($cat_aid,?$cat_num)
{
$sql?=?"SELECT?article_id,?title,open_type,cat_id,file_url,description?FROM?"?.$GLOBALS['ecs']->table('article').?"?WHERE?cat_id?=?".$cat_aid."?and?is_open?=?1?ORDER?BY?add_time?DESC?LIMIT?"?.?$cat_num;
$res?=?$GLOBALS['db']->getAll($sql);
$arr?=?array();
foreach?($res?AS?$idx?=>?$row)
{
$arr[$idx]['id']?=?$row['article_id'];
$arr[$idx]['title']?=?$row['title'];
$arr[$idx]['file_url']?=?$row['file_url'];
$arr[$idx]['description']?=?$row['description'];
$arr[$idx]['short_title']?=?$GLOBALS['_CFG']['article_title_length']?>?0??
sub_str($row['title'],?$GLOBALS['_CFG']['article_title_length'])?:?$row['title'];
$arr[$idx]['cat_name']?=?$row['cat_name'];
$arr[$idx]['add_time']?=?local_date($GLOBALS['_CFG']['date_format'],?$row['add_time']);
$arr[$idx]['url']?=?$row['open_type']?!=?1??
build_uri('article',?array('aid'?=>?$row['article_id']),?$row['title'])?:?trim($row['file_url']);
$arr[$idx]['cat_url']?=?build_uri('article_cat',?array('acid'?=>?$row['cat_id']));
}
return?$arr;
}
<p>3、在要調用index.dwt模板的地方添加如下代碼(注意:調整上面設置中的文章列表,類(lèi)別ID為4): 查看全部
文章采集調用(免費開(kāi)源可商用的PHP萬(wàn)能建站程序-DiYunCMS(帝云CMS))
免費、開(kāi)源、可商用的PHP通用建站程序-帝云cms(帝云cms)
對于個(gè)性化的需求,需要在首頁(yè)或者其他模板頁(yè)面的指定分類(lèi)下調用文章,那么我們就可以實(shí)現:
網(wǎng)上很容易找到這個(gè)教程,但是有個(gè)問(wèn)題。調用的文章沒(méi)有按最新排序,或者發(fā)布時(shí)間越早排在前面,肯定是不合理的。已修復一流的資源網(wǎng)絡(luò )。這個(gè)問(wèn)題。
1、首先打開(kāi)index.php文件,找到如下代碼:
$smarty->assign('new_articles',?index_get_new_articles());?//?最新文章
在此行下方添加以下代碼:
$smarty->assign('class_articles_4',?index_get_class_articles(4,6));?//?分類(lèi)調用文章
4 是 文章 類(lèi)別 ID,6 是顯示的項目數。
如果調用的category很多,只需要復制粘貼上一行即可,但是文章category id和調用次數要根據自己的需要修改。
打開(kāi)ecshop根目錄下的includes/init.php文件,在最下方添加如下代碼,并添加到?>。
2、還在這個(gè)文件中嗎?> 在這之前添加以下函數:
/**
*?獲得指定欄目最新的文章列表。
*
*?@access?private
*?@return?array
*/
function?index_get_class_articles($cat_aid,?$cat_num)
{
$sql?=?"SELECT?article_id,?title,open_type,cat_id,file_url,description?FROM?"?.$GLOBALS['ecs']->table('article').?"?WHERE?cat_id?=?".$cat_aid."?and?is_open?=?1?ORDER?BY?add_time?DESC?LIMIT?"?.?$cat_num;
$res?=?$GLOBALS['db']->getAll($sql);
$arr?=?array();
foreach?($res?AS?$idx?=>?$row)
{
$arr[$idx]['id']?=?$row['article_id'];
$arr[$idx]['title']?=?$row['title'];
$arr[$idx]['file_url']?=?$row['file_url'];
$arr[$idx]['description']?=?$row['description'];
$arr[$idx]['short_title']?=?$GLOBALS['_CFG']['article_title_length']?>?0??
sub_str($row['title'],?$GLOBALS['_CFG']['article_title_length'])?:?$row['title'];
$arr[$idx]['cat_name']?=?$row['cat_name'];
$arr[$idx]['add_time']?=?local_date($GLOBALS['_CFG']['date_format'],?$row['add_time']);
$arr[$idx]['url']?=?$row['open_type']?!=?1??
build_uri('article',?array('aid'?=>?$row['article_id']),?$row['title'])?:?trim($row['file_url']);
$arr[$idx]['cat_url']?=?build_uri('article_cat',?array('acid'?=>?$row['cat_id']));
}
return?$arr;
}
<p>3、在要調用index.dwt模板的地方添加如下代碼(注意:調整上面設置中的文章列表,類(lèi)別ID為4):
文章采集調用()
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 128 次瀏覽 ? 2021-12-19 11:12
在Dedecms系統中,文章摘要(可以通過(guò)infolen或description相關(guān)標簽調用)設置為最多250個(gè)字符。設置上限的主要目的是減少數據庫的冗余,保證網(wǎng)站良好的性能。所以,如果不給profile的內容設置上限,顯然是不合理的。但是,如果您可以自由控制此上限,則會(huì )對網(wǎng)頁(yè)內容的布局產(chǎn)生積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,經(jīng)常需要對文章摘要進(jìn)行列表頁(yè)面調用。如果文章摘要中的字數能夠得到有效控制,那么頁(yè)面布局就可以變得非常靈活。
一、使用infolen限制調用文章描述詞的數量,如下標簽所示:
{dede:arclist row="1" infolen='170'}
[字段:信息/]...
{/dede:arclist}
上面的infolen='170'表示調用170字節的文章描述
二、使用 [field:description function='cn_substr(@me,250)'/] 代替 [field:info/] 標簽,其中 250 是字節限制,您可以將其用作多字隨你改,注意這里的250是一個(gè)字節,一個(gè)字等于2個(gè)字節,也就是這里調用了125個(gè)字。
在Dedecms中,調用列表頁(yè)文章匯總的主要方法有:
1:[字段:信息/]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me,字符數)"/]
1、的第二種方法是直接調用文章的summary。在調用的單詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}{/dede :arclist},設置調用摘要中的字符數(向上到系統設置的250));如果使用[field:description /],則直接使用后臺設置的摘要字符上限。很明顯,這兩種方法都非常被動(dòng),靈活性太差。
第四種方法3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在不修改文章抽象內容字符上限的情況下,這四種方法區別不大。不過(guò)下面我們來(lái)說(shuō)說(shuō)如何修改這個(gè)上限來(lái)體現方法的重要性[field:description function="cn_substr(@me,number of characters)"/]。
在dedecms中,與文章的摘要相關(guān)的php文件主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
//
在添加頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,$cfg_autot_description);
這句話(huà)實(shí)現了
[field:description function="cn_substr(@me,字符數)"/]
此功能。因為這個(gè)語(yǔ)句確實(shí)有利于頁(yè)面布局,所以我們在實(shí)驗中沒(méi)有修改。
在編輯頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,250);
這句話(huà)出現了熟悉的字符數“250”,這是系統設置的文章抽象字符數的上限。如果是gbk編碼,顯示125個(gè)字。如果是utf-8編碼,則是81個(gè)字符。很明顯,我們要突破文章抽象字符的上限,必須要拿下。是的,在這里您可以將“250”修改為其他值,例如“500”。這里不建議設置太高。一是不需要在列表頁(yè)面顯示太多內容。最好直接用body來(lái)顯示太多的內容。一是避免數據庫冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面找到“if($dsize>250) $dsize = 250;”這句話(huà),限制了后臺可以自動(dòng)獲取的字符數,這里修改“250”到“500”是的,也就是和之前修改的字符數一樣。如果你確認你的每個(gè)文章都是手動(dòng)添加的,如果手動(dòng)完成就不需要修改這個(gè)文件了摘要采集,自動(dòng)摘要采集主要是為大量文章和采集準備的。
最后登錄后臺,在系統-系統基本參數-其他選項中,可以將自動(dòng)匯總長(cháng)度改為500,與之前修改的字符數相同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid='' row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為網(wǎng)頁(yè)布局提供了更廣闊的空間。
轉載于: 查看全部
文章采集調用()
在Dedecms系統中,文章摘要(可以通過(guò)infolen或description相關(guān)標簽調用)設置為最多250個(gè)字符。設置上限的主要目的是減少數據庫的冗余,保證網(wǎng)站良好的性能。所以,如果不給profile的內容設置上限,顯然是不合理的。但是,如果您可以自由控制此上限,則會(huì )對網(wǎng)頁(yè)內容的布局產(chǎn)生積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,經(jīng)常需要對文章摘要進(jìn)行列表頁(yè)面調用。如果文章摘要中的字數能夠得到有效控制,那么頁(yè)面布局就可以變得非常靈活。
一、使用infolen限制調用文章描述詞的數量,如下標簽所示:
{dede:arclist row="1" infolen='170'}
[字段:信息/]...
{/dede:arclist}
上面的infolen='170'表示調用170字節的文章描述
二、使用 [field:description function='cn_substr(@me,250)'/] 代替 [field:info/] 標簽,其中 250 是字節限制,您可以將其用作多字隨你改,注意這里的250是一個(gè)字節,一個(gè)字等于2個(gè)字節,也就是這里調用了125個(gè)字。
在Dedecms中,調用列表頁(yè)文章匯總的主要方法有:
1:[字段:信息/]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me,字符數)"/]
1、的第二種方法是直接調用文章的summary。在調用的單詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}{/dede :arclist},設置調用摘要中的字符數(向上到系統設置的250));如果使用[field:description /],則直接使用后臺設置的摘要字符上限。很明顯,這兩種方法都非常被動(dòng),靈活性太差。
第四種方法3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在不修改文章抽象內容字符上限的情況下,這四種方法區別不大。不過(guò)下面我們來(lái)說(shuō)說(shuō)如何修改這個(gè)上限來(lái)體現方法的重要性[field:description function="cn_substr(@me,number of characters)"/]。
在dedecms中,與文章的摘要相關(guān)的php文件主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
//
在添加頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,$cfg_autot_description);
這句話(huà)實(shí)現了
[field:description function="cn_substr(@me,字符數)"/]
此功能。因為這個(gè)語(yǔ)句確實(shí)有利于頁(yè)面布局,所以我們在實(shí)驗中沒(méi)有修改。
在編輯頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,250);
這句話(huà)出現了熟悉的字符數“250”,這是系統設置的文章抽象字符數的上限。如果是gbk編碼,顯示125個(gè)字。如果是utf-8編碼,則是81個(gè)字符。很明顯,我們要突破文章抽象字符的上限,必須要拿下。是的,在這里您可以將“250”修改為其他值,例如“500”。這里不建議設置太高。一是不需要在列表頁(yè)面顯示太多內容。最好直接用body來(lái)顯示太多的內容。一是避免數據庫冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面找到“if($dsize>250) $dsize = 250;”這句話(huà),限制了后臺可以自動(dòng)獲取的字符數,這里修改“250”到“500”是的,也就是和之前修改的字符數一樣。如果你確認你的每個(gè)文章都是手動(dòng)添加的,如果手動(dòng)完成就不需要修改這個(gè)文件了摘要采集,自動(dòng)摘要采集主要是為大量文章和采集準備的。
最后登錄后臺,在系統-系統基本參數-其他選項中,可以將自動(dòng)匯總長(cháng)度改為500,與之前修改的字符數相同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid='' row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為網(wǎng)頁(yè)布局提供了更廣闊的空間。
轉載于:
文章采集調用(美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,最終結果還沒(méi)有出來(lái))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 162 次瀏覽 ? 2021-12-16 21:04
嗯,不是失敗,只是記錄了爬蟲(chóng)分析的過(guò)程采集,最終結果還沒(méi)出來(lái)。
簡(jiǎn)單描述一下美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,結果不理想,可以通過(guò)調用JS實(shí)現。
一開(kāi)始,我直接選擇了美團的網(wǎng)頁(yè)版,選擇一個(gè)地方,進(jìn)入外賣(mài)商家列表。
這時(shí)候直接開(kāi)始寫(xiě)JAVA Jsoup代碼,把所有的請求頭和請求參數都放到請求的代碼中,結果只有一個(gè)返回:
{"數據":{"customer_ip":"61.135.15.2"},"code":200100,"msg":""}
也就是說(shuō),沒(méi)有得到任何數據,此時(shí)我也不知道接下來(lái)要做什么。于是在網(wǎng)上搜索了美團外賣(mài)爬蟲(chóng)。這里有一點(diǎn),如果你是美團商戶(hù)采集,就是那種可以遍歷全網(wǎng)的??梢垣@得該商家數據。但是如果是外賣(mài),就得單獨做采集。
當然,在網(wǎng)頁(yè)采集的不利情況下,我也查了美團APP的外賣(mài)鏈接:參數太多了,啟動(dòng)不了,然后從網(wǎng)頁(yè)文章開(kāi)始搜索@>
終于找到一篇文章@>:這篇文章提供了一個(gè)思路。你可以先看看這個(gè)文章@>。
首先分析美團H5頁(yè)面上的數據
結合CSDN文章文章@>,也就是說(shuō)只要知道token的生成方法,然后通過(guò)參數調用這個(gè)方法來(lái)獲取token,當然這篇文章文章@>也有一點(diǎn)提示,但僅此而已,剛剛介紹了如何直接調用JS代碼。你仍然需要自己做才能獲得足夠的食物和衣服。
接下來(lái)我們應該分析一下token是如何產(chǎn)生的?我也在網(wǎng)上搜索了很多文章@>,也有一些提示。這是一個(gè)很長(cháng)的文章@>。不注意的話(huà)真的很糟糕。
這時(shí)候直接進(jìn)入H5頁(yè)面,先找到j(luò )s文件。我們不能直接使用文章中的js,因為有可能js已經(jīng)升級了,所以我們找最新版本的js文件。
這時(shí)候我已經(jīng)驗證了破解網(wǎng)上文章@>那篇文章所說(shuō)的內容,接下來(lái)我們在原h(huán)5頁(yè)面上搜索Rohr_Opt這個(gè)詞。
既然不一樣了,就得看看美團外賣(mài)頁(yè)面列表是怎么調用這個(gè)reload方法的,繼續搜索Rohr_Opt。因為是全局的,所以調用的時(shí)候會(huì )直接用這個(gè)名字來(lái)調用。注意此時(shí)的搜索不是在查看源碼中搜索,而是在調試頁(yè)面的源碼中搜索。畢竟,它現在處于運行時(shí)狀態(tài)。恭喜:
我們把紅框中的代碼復制一下,分析一下代碼結構,看看能出現什么樣的結果。
現在我們已經(jīng)確定了 t+p,用 test.html 測試一下:
到此為止,我們繼續觀(guān)察這個(gè)reload是怎么實(shí)現的,里面有什么,為什么同樣的參數刷新不同。打開(kāi)min.js文件,直接搜索reload:
這個(gè)時(shí)間戳就這樣一直存在,搜索沒(méi)有找到用處,作為一個(gè)對象的內部字段,它應該已經(jīng)被使用了。
分析完這個(gè),我們來(lái)測試一下JAVA調用JS的技術(shù)。但這部分事情還沒(méi)有弄清楚!如果有人修復它,請告訴我。復制一個(gè)簡(jiǎn)單的調用代碼:
參考鏈接 查看全部
文章采集調用(美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,最終結果還沒(méi)有出來(lái))
嗯,不是失敗,只是記錄了爬蟲(chóng)分析的過(guò)程采集,最終結果還沒(méi)出來(lái)。
簡(jiǎn)單描述一下美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,結果不理想,可以通過(guò)調用JS實(shí)現。
一開(kāi)始,我直接選擇了美團的網(wǎng)頁(yè)版,選擇一個(gè)地方,進(jìn)入外賣(mài)商家列表。
這時(shí)候直接開(kāi)始寫(xiě)JAVA Jsoup代碼,把所有的請求頭和請求參數都放到請求的代碼中,結果只有一個(gè)返回:
{"數據":{"customer_ip":"61.135.15.2"},"code":200100,"msg":""}
也就是說(shuō),沒(méi)有得到任何數據,此時(shí)我也不知道接下來(lái)要做什么。于是在網(wǎng)上搜索了美團外賣(mài)爬蟲(chóng)。這里有一點(diǎn),如果你是美團商戶(hù)采集,就是那種可以遍歷全網(wǎng)的??梢垣@得該商家數據。但是如果是外賣(mài),就得單獨做采集。
當然,在網(wǎng)頁(yè)采集的不利情況下,我也查了美團APP的外賣(mài)鏈接:參數太多了,啟動(dòng)不了,然后從網(wǎng)頁(yè)文章開(kāi)始搜索@>
終于找到一篇文章@>:這篇文章提供了一個(gè)思路。你可以先看看這個(gè)文章@>。
首先分析美團H5頁(yè)面上的數據
結合CSDN文章文章@>,也就是說(shuō)只要知道token的生成方法,然后通過(guò)參數調用這個(gè)方法來(lái)獲取token,當然這篇文章文章@>也有一點(diǎn)提示,但僅此而已,剛剛介紹了如何直接調用JS代碼。你仍然需要自己做才能獲得足夠的食物和衣服。
接下來(lái)我們應該分析一下token是如何產(chǎn)生的?我也在網(wǎng)上搜索了很多文章@>,也有一些提示。這是一個(gè)很長(cháng)的文章@>。不注意的話(huà)真的很糟糕。
這時(shí)候直接進(jìn)入H5頁(yè)面,先找到j(luò )s文件。我們不能直接使用文章中的js,因為有可能js已經(jīng)升級了,所以我們找最新版本的js文件。
這時(shí)候我已經(jīng)驗證了破解網(wǎng)上文章@>那篇文章所說(shuō)的內容,接下來(lái)我們在原h(huán)5頁(yè)面上搜索Rohr_Opt這個(gè)詞。
既然不一樣了,就得看看美團外賣(mài)頁(yè)面列表是怎么調用這個(gè)reload方法的,繼續搜索Rohr_Opt。因為是全局的,所以調用的時(shí)候會(huì )直接用這個(gè)名字來(lái)調用。注意此時(shí)的搜索不是在查看源碼中搜索,而是在調試頁(yè)面的源碼中搜索。畢竟,它現在處于運行時(shí)狀態(tài)。恭喜:
我們把紅框中的代碼復制一下,分析一下代碼結構,看看能出現什么樣的結果。
現在我們已經(jīng)確定了 t+p,用 test.html 測試一下:
到此為止,我們繼續觀(guān)察這個(gè)reload是怎么實(shí)現的,里面有什么,為什么同樣的參數刷新不同。打開(kāi)min.js文件,直接搜索reload:
這個(gè)時(shí)間戳就這樣一直存在,搜索沒(méi)有找到用處,作為一個(gè)對象的內部字段,它應該已經(jīng)被使用了。
分析完這個(gè),我們來(lái)測試一下JAVA調用JS的技術(shù)。但這部分事情還沒(méi)有弄清楚!如果有人修復它,請告訴我。復制一個(gè)簡(jiǎn)單的調用代碼:
參考鏈接
文章采集調用(文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 173 次瀏覽 ? 2022-01-08 23:01
文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach第一個(gè)不能匹配的區塊第二個(gè)匹配不了,第三個(gè)已經(jīng)匹配上了,第四個(gè)依然匹配不上但是不能說(shuō)什么,打開(kāi)知乎的app,就是把手機拿到邊上就能上知乎在上面的搜索框里輸入這個(gè)id就可以找到它前些天也是同樣的問(wèn)題,也是用這個(gè),結果就是找不到想要的東西。
我試過(guò)了兩個(gè)方法1.可以把瀏覽頁(yè)面重定向到知乎客戶(hù)端里面,在里面找到感興趣的區塊,點(diǎn)擊檢索(也可以點(diǎn)擊右上角)2.可以在googleappstore里找下載一個(gè)知乎app,然后直接一鍵抓取,只要該網(wǎng)站有的,
樓主試試,一定對你有幫助。
感謝樓上,
用來(lái)偷菜吧
建議采集一下@笑道人老師關(guān)于對話(huà)頁(yè)面的每個(gè)選擇區塊。我們的服務(wù)器就被他惡心到了。
先打開(kāi)你想抓取對話(huà)的網(wǎng)站,找到想抓取的區塊在googleappstore里搜索下載一個(gè)知乎app,然后直接一鍵抓取你想要的內容!希望對樓主有幫助!
據我所知,
呵呵,
我用的chrome擴展了"可視化查詢(xún)"抓取
沒(méi)找到怎么抓,手動(dòng)抓卻很麻煩,這樣試試啊。
采集頁(yè)面就可以抓取了
依然是這個(gè)問(wèn)題。我手上也沒(méi)有任何知乎采集器。沒(méi)試過(guò), 查看全部
文章采集調用(文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach)
文章采集調用知乎官方api接口,就會(huì )發(fā)現有很多countlyuseroach第一個(gè)不能匹配的區塊第二個(gè)匹配不了,第三個(gè)已經(jīng)匹配上了,第四個(gè)依然匹配不上但是不能說(shuō)什么,打開(kāi)知乎的app,就是把手機拿到邊上就能上知乎在上面的搜索框里輸入這個(gè)id就可以找到它前些天也是同樣的問(wèn)題,也是用這個(gè),結果就是找不到想要的東西。
我試過(guò)了兩個(gè)方法1.可以把瀏覽頁(yè)面重定向到知乎客戶(hù)端里面,在里面找到感興趣的區塊,點(diǎn)擊檢索(也可以點(diǎn)擊右上角)2.可以在googleappstore里找下載一個(gè)知乎app,然后直接一鍵抓取,只要該網(wǎng)站有的,
樓主試試,一定對你有幫助。
感謝樓上,
用來(lái)偷菜吧
建議采集一下@笑道人老師關(guān)于對話(huà)頁(yè)面的每個(gè)選擇區塊。我們的服務(wù)器就被他惡心到了。
先打開(kāi)你想抓取對話(huà)的網(wǎng)站,找到想抓取的區塊在googleappstore里搜索下載一個(gè)知乎app,然后直接一鍵抓取你想要的內容!希望對樓主有幫助!
據我所知,
呵呵,
我用的chrome擴展了"可視化查詢(xún)"抓取
沒(méi)找到怎么抓,手動(dòng)抓卻很麻煩,這樣試試啊。
采集頁(yè)面就可以抓取了
依然是這個(gè)問(wèn)題。我手上也沒(méi)有任何知乎采集器。沒(méi)試過(guò),
文章采集調用(如何優(yōu)采云采集器如何利用Xpath來(lái)采集內容頁(yè)面可視化提取)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 141 次瀏覽 ? 2022-01-08 14:17
在上一篇文章《優(yōu)采云采集 List Page and Label Xpath Visual Extraction Function》中,我們講解了優(yōu)采云采集器如何使用Xpath來(lái)采集列出頁(yè)面。今天,我們將討論優(yōu)采云采集器如何使用Xpath 來(lái)采集內容頁(yè)面!
新建標簽,提前選擇數據方式,選擇“視覺(jué)提取”選項,如下圖:
同時(shí)單擊“通過(guò) XPath 瀏覽器獲取”按鈕。
和上面得到的地址一樣,輸入地址,訪(fǎng)問(wèn)地址為采集,如下圖:
然后單擊圖標開(kāi)始選擇。這里我們以標題獲取為例。
選擇淺藍色框中的標題,輕輕點(diǎn)擊鼠標,測試一下是否正確。如果正確單擊確定按鈕。這不像 采集 地址,需要執行兩次。如果測試彈出:
這表示無(wú)法通過(guò)這種方式獲取該頁(yè)面。
如下圖點(diǎn)擊確定:
此處自動(dòng)填寫(xiě)獲取此標題的表達式。讓我們測試一下結果:
結果是正確的。其他信息可以通過(guò)這種方式獲取。
有一個(gè)節點(diǎn)屬性如下圖:
這也是一個(gè)專(zhuān)業(yè)術(shù)語(yǔ)。你可以查資料了解一下。一般可以通過(guò)選擇InnerHtml和InnerText來(lái)獲取文本信息。如果您需要了解更多信息,請自行查找信息。
選擇“Href”獲取鏈接地址,選擇“OuterHtml”獲取文本和收錄的html代碼。不明白的可以實(shí)際測試一下結果。 查看全部
文章采集調用(如何優(yōu)采云采集器如何利用Xpath來(lái)采集內容頁(yè)面可視化提取)
在上一篇文章《優(yōu)采云采集 List Page and Label Xpath Visual Extraction Function》中,我們講解了優(yōu)采云采集器如何使用Xpath來(lái)采集列出頁(yè)面。今天,我們將討論優(yōu)采云采集器如何使用Xpath 來(lái)采集內容頁(yè)面!

新建標簽,提前選擇數據方式,選擇“視覺(jué)提取”選項,如下圖:

同時(shí)單擊“通過(guò) XPath 瀏覽器獲取”按鈕。
和上面得到的地址一樣,輸入地址,訪(fǎng)問(wèn)地址為采集,如下圖:

然后單擊圖標開(kāi)始選擇。這里我們以標題獲取為例。

選擇淺藍色框中的標題,輕輕點(diǎn)擊鼠標,測試一下是否正確。如果正確單擊確定按鈕。這不像 采集 地址,需要執行兩次。如果測試彈出:

這表示無(wú)法通過(guò)這種方式獲取該頁(yè)面。
如下圖點(diǎn)擊確定:

此處自動(dòng)填寫(xiě)獲取此標題的表達式。讓我們測試一下結果:

結果是正確的。其他信息可以通過(guò)這種方式獲取。
有一個(gè)節點(diǎn)屬性如下圖:

這也是一個(gè)專(zhuān)業(yè)術(shù)語(yǔ)。你可以查資料了解一下。一般可以通過(guò)選擇InnerHtml和InnerText來(lái)獲取文本信息。如果您需要了解更多信息,請自行查找信息。
選擇“Href”獲取鏈接地址,選擇“OuterHtml”獲取文本和收錄的html代碼。不明白的可以實(shí)際測試一下結果。
文章采集調用(小蜜蜂公眾號文章助手上線(xiàn),復制文字還沒(méi)有什么?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2022-01-08 14:15
現在小蜜蜂公眾號文章助手上線(xiàn),可以采集任意公眾號歷史文章,支持點(diǎn)贊數、閱讀數、評論數采集,支持導出PDF ,Excel,HTML,TXT格式導出,支持關(guān)鍵詞搜索,可以去官網(wǎng)查看
許多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上寫(xiě)作,而且通常在多個(gè)平臺上推送文章,例如今日頭條、知乎專(zhuān)欄、短書(shū)等,甚至有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一項非常耗時(shí)的工作。
大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
這時(shí)候嘗試搜索了一個(gè)這樣的插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),于是我開(kāi)發(fā)了一個(gè)叫Bee采集的插件,除了微信公眾號文章,還可以導入今日頭條、短書(shū)、知乎欄目的文章,并且還有各種多種可選功能,除此之外,還可以采集other網(wǎng)站,只要配置好相應的規則即可
使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,即批量導入功能,以及自動(dòng)同步采集公眾號的功能文章
下載的話(huà)直接在安裝插件頁(yè)面搜索蜜蜂采集就可以看到
希望這篇筆記可以幫到你 查看全部
文章采集調用(小蜜蜂公眾號文章助手上線(xiàn),復制文字還沒(méi)有什么?)
現在小蜜蜂公眾號文章助手上線(xiàn),可以采集任意公眾號歷史文章,支持點(diǎn)贊數、閱讀數、評論數采集,支持導出PDF ,Excel,HTML,TXT格式導出,支持關(guān)鍵詞搜索,可以去官網(wǎng)查看
許多微信公眾號作者(個(gè)人、組織、公司)不僅在微信公眾平臺上寫(xiě)作,而且通常在多個(gè)平臺上推送文章,例如今日頭條、知乎專(zhuān)欄、短書(shū)等,甚至有自己的網(wǎng)站(官網(wǎng)),但是在多個(gè)平臺上發(fā)布文章是一項非常耗時(shí)的工作。
大多數 網(wǎng)站 構建都基于 WordPress,因為該平臺非常簡(jiǎn)單實(shí)用,并且有大量插件。因此,我也不例外。當我選擇建站系統時(shí),首先選擇的是 WordPress。不過(guò)我經(jīng)常寫(xiě)文章發(fā)現一個(gè)問(wèn)題,就是每次在公眾號寫(xiě)文章,我把文章@文章手動(dòng)復制到WordPress上,復制文字沒(méi)什么,但是復制圖片會(huì )害死我,微信公眾號文章的圖片不能直接復制到WordPress,會(huì )顯示為“無(wú)法顯示。這張圖片”,因為微信已對圖片實(shí)施防盜鏈措施。
這時(shí)候嘗試搜索了一個(gè)這樣的插件,可以通過(guò)粘貼公眾號文章的鏈接直接將內容導入WordPress,并將圖片下載到本地(媒體庫),于是我開(kāi)發(fā)了一個(gè)叫Bee采集的插件,除了微信公眾號文章,還可以導入今日頭條、短書(shū)、知乎欄目的文章,并且還有各種多種可選功能,除此之外,還可以采集other網(wǎng)站,只要配置好相應的規則即可
使用起來(lái)也很簡(jiǎn)單,只要粘貼鏈接,就可以同時(shí)導入多個(gè)文章,即批量導入功能,以及自動(dòng)同步采集公眾號的功能文章
下載的話(huà)直接在安裝插件頁(yè)面搜索蜜蜂采集就可以看到
希望這篇筆記可以幫到你
文章采集調用(java項目中如何實(shí)現攝像頭圖像采集圖片數據采集? )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2022-01-08 02:06
)
最近的一個(gè)項目需要實(shí)現攝像頭圖像采集,經(jīng)過(guò)一系列的折騰,終于實(shí)現了這個(gè)功能,現在整理一下。
就java技術(shù)而言,為了實(shí)現相機的二次開(kāi)發(fā),采集相機圖片需要使用JMF。JMF 適合在 j2se 程序中使用。我需要在網(wǎng)絡(luò )程序中調用相機。顯然,JMF 處理不了?,F在想寫(xiě)個(gè)applet程序,但是那個(gè)東西需要客戶(hù)端有jre環(huán)境,不適合我。您不能指望用戶(hù)在訪(fǎng)問(wèn)您的 網(wǎng)站 jre 進(jìn)行安裝然后再次訪(fǎng)問(wèn)時(shí)下載一個(gè)大文件嗎?
既然JMF不適用,那么我們在java項目中如何控制攝像頭抓拍呢?在windows平臺下,我們可以使用視頻采集卡等二次開(kāi)發(fā)包來(lái)訪(fǎng)問(wèn)視頻數據,但是目前的攝像頭都是usb的,甚至筆記本電腦屏幕都有攝像頭,這種情況下的解決方案使用采集卡二次開(kāi)發(fā)包不適用。您只能編寫(xiě)自己的程序來(lái)做類(lèi)似于“相機相機軟件”的事情。經(jīng)過(guò)一系列的分析,終于實(shí)現了在web程序中調用攝像頭,可以通過(guò)js代碼控制攝像頭,通過(guò)ajax技術(shù)上傳數據。雖然我沒(méi)有在程序中測試過(guò),但是應該支持.net技術(shù),也可以在采集Camera data的項目中實(shí)現,例如,
羅嗦一大堆,程序放在csdn下載資源上面,以后不用到處找相機二次開(kāi)發(fā),直接下載使用即可。
攝像頭程序下載地址
壓縮包中收錄一個(gè)基于純網(wǎng)頁(yè)采集的相機照片示例程序,以及一個(gè)基于jquery框架的ajax數據操作程序示例。調用攝像頭的方法詳見(jiàn)示例代碼。相信稍微懂一點(diǎn)技術(shù)的人應該都能看懂。了解了,有一個(gè)完整的基于java技術(shù)的photo采集示例程序,使用jsp頁(yè)面采集的照片,serlvet程序接收攝像頭照片數據。
以下是程序運行效果示例:
查看全部
文章采集調用(java項目中如何實(shí)現攝像頭圖像采集圖片數據采集?
)
最近的一個(gè)項目需要實(shí)現攝像頭圖像采集,經(jīng)過(guò)一系列的折騰,終于實(shí)現了這個(gè)功能,現在整理一下。
就java技術(shù)而言,為了實(shí)現相機的二次開(kāi)發(fā),采集相機圖片需要使用JMF。JMF 適合在 j2se 程序中使用。我需要在網(wǎng)絡(luò )程序中調用相機。顯然,JMF 處理不了?,F在想寫(xiě)個(gè)applet程序,但是那個(gè)東西需要客戶(hù)端有jre環(huán)境,不適合我。您不能指望用戶(hù)在訪(fǎng)問(wèn)您的 網(wǎng)站 jre 進(jìn)行安裝然后再次訪(fǎng)問(wèn)時(shí)下載一個(gè)大文件嗎?
既然JMF不適用,那么我們在java項目中如何控制攝像頭抓拍呢?在windows平臺下,我們可以使用視頻采集卡等二次開(kāi)發(fā)包來(lái)訪(fǎng)問(wèn)視頻數據,但是目前的攝像頭都是usb的,甚至筆記本電腦屏幕都有攝像頭,這種情況下的解決方案使用采集卡二次開(kāi)發(fā)包不適用。您只能編寫(xiě)自己的程序來(lái)做類(lèi)似于“相機相機軟件”的事情。經(jīng)過(guò)一系列的分析,終于實(shí)現了在web程序中調用攝像頭,可以通過(guò)js代碼控制攝像頭,通過(guò)ajax技術(shù)上傳數據。雖然我沒(méi)有在程序中測試過(guò),但是應該支持.net技術(shù),也可以在采集Camera data的項目中實(shí)現,例如,
羅嗦一大堆,程序放在csdn下載資源上面,以后不用到處找相機二次開(kāi)發(fā),直接下載使用即可。
攝像頭程序下載地址
壓縮包中收錄一個(gè)基于純網(wǎng)頁(yè)采集的相機照片示例程序,以及一個(gè)基于jquery框架的ajax數據操作程序示例。調用攝像頭的方法詳見(jiàn)示例代碼。相信稍微懂一點(diǎn)技術(shù)的人應該都能看懂。了解了,有一個(gè)完整的基于java技術(shù)的photo采集示例程序,使用jsp頁(yè)面采集的照片,serlvet程序接收攝像頭照片數據。
以下是程序運行效果示例:
文章采集調用(測試阻礙交付,如何破解這一難題?(一)(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 165 次瀏覽 ? 2022-01-07 18:14
測試阻礙了交付。如何解決這個(gè)問(wèn)題呢?>>>
點(diǎn)擊上方“IT共享屋”關(guān)注
回復“資料”領(lǐng)取Python學(xué)習福利
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和 網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests、fake_useragent、json、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2. 如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集的。
1)F12 右鍵查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。
2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。
3. 如何訪(fǎng)問(wèn)網(wǎng)頁(yè)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,jsonfrom fake_useragent import UserAgentimport csv
class Doban(object): def __init__(self): self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self): pass
if __name__ == '__main__': Siper = Doban() Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects'] # print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf) html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求 parse_html2 = etree.HTML(html2) r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入 csv_file = open('scr.csv', 'a', encoding='gbk') csv_writer = csv.writer(csv_file) # 寫(xiě)入csv標題頭內容 csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"]) #寫(xiě)入數據 csv_writer.writerow([id, rate, urll])
7、請求的圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content dirname = "./圖/" + id + ".jpg" with open(dirname, 'wb') as f: f.write(html2) print("%s 【下載成功?。。?!】" % id)
8、 調用方法實(shí)現功能。
html = self.get_page(url) self.parse_page(html)
9、項目?jì)?yōu)化:1)設置延時(shí)。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0 self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。
2、 在控制臺顯示下載成功信息。
3、保存csv文件。
4、電影畫(huà)面顯示。
[七、總結]
1、 不建議抓太多數據,可能造成服務(wù)器負載,簡(jiǎn)單試一下。
2、這篇文章針對Python爬豆豆應用中的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止反爬,做了一個(gè)相對的解決方案。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、 需要本文源碼的請在下方公眾號后臺回復“豆瓣電影”獲取。
看完這篇文章你學(xué)會(huì )了嗎?請轉發(fā)并分享給更多人
IT共享家庭 查看全部
文章采集調用(測試阻礙交付,如何破解這一難題?(一)(組圖))
測試阻礙了交付。如何解決這個(gè)問(wèn)題呢?>>>

點(diǎn)擊上方“IT共享屋”關(guān)注
回復“資料”領(lǐng)取Python學(xué)習福利
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和 網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests、fake_useragent、json、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2. 如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集的。
1)F12 右鍵查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。

2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。

3. 如何訪(fǎng)問(wèn)網(wǎng)頁(yè)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,jsonfrom fake_useragent import UserAgentimport csv
class Doban(object): def __init__(self): self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self): pass
if __name__ == '__main__': Siper = Doban() Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects'] # print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf) html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求 parse_html2 = etree.HTML(html2) r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入 csv_file = open('scr.csv', 'a', encoding='gbk') csv_writer = csv.writer(csv_file) # 寫(xiě)入csv標題頭內容 csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"]) #寫(xiě)入數據 csv_writer.writerow([id, rate, urll])
7、請求的圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content dirname = "./圖/" + id + ".jpg" with open(dirname, 'wb') as f: f.write(html2) print("%s 【下載成功?。。?!】" % id)
8、 調用方法實(shí)現功能。
html = self.get_page(url) self.parse_page(html)
9、項目?jì)?yōu)化:1)設置延時(shí)。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0 self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。

2、 在控制臺顯示下載成功信息。

3、保存csv文件。

4、電影畫(huà)面顯示。

[七、總結]
1、 不建議抓太多數據,可能造成服務(wù)器負載,簡(jiǎn)單試一下。
2、這篇文章針對Python爬豆豆應用中的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止反爬,做了一個(gè)相對的解決方案。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、 需要本文源碼的請在下方公眾號后臺回復“豆瓣電影”獲取。
看完這篇文章你學(xué)會(huì )了嗎?請轉發(fā)并分享給更多人
IT共享家庭
文章采集調用(換個(gè)網(wǎng)站你什么都做不了,這個(gè)教程讓你一看即會(huì ))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 195 次瀏覽 ? 2022-01-06 07:05
很多網(wǎng)友對于織夢(mèng)的采集教程(DEDEcms)感到頭疼。確實(shí),官方教程太籠統,沒(méi)說(shuō)什么。換個(gè)網(wǎng)站你是什么?不會(huì )啊,這個(gè)教程是最詳細的教程了,趕緊看看吧!
一、列表采集
第一步,我們打開(kāi)織夢(mèng)后臺,點(diǎn)擊采集——采集節點(diǎn)管理——添加新節點(diǎn)
第二步,這里我們以采集normal文章為例,我們選擇normal文章,然后確認
第三步,進(jìn)入采集的設置頁(yè)面,填寫(xiě)節點(diǎn)名稱(chēng)。
第四步,打開(kāi)你要采集的文章列表頁(yè)。
以這個(gè)網(wǎng)站為例,打開(kāi)這個(gè)頁(yè)面,
右鍵查看源文件找到目標頁(yè)面編碼,就在charset之后)
第五步,填寫(xiě)頁(yè)面基本信息,填寫(xiě)后如圖
第六步,填寫(xiě)列表URL獲取規則,查看文章列表第一頁(yè)地址。
比較第二頁(yè)的地址
我們發(fā)現除了49_后面的數字是一樣的,所以我們可以這樣寫(xiě)
(*).html
就用(*)代替1,因為只有2頁(yè),所以我們從1到2填,每頁(yè)加1,當然2-1...等于1。
到這里我們完成了
可能你的一些采集列表沒(méi)有規則,所以你只需要手動(dòng)指定列表URL即可,如圖
每行寫(xiě)一個(gè)頁(yè)面地址
第七步:填寫(xiě)文章 URL匹配規則,返回文章列表頁(yè)面
右鍵查看源文件找到區域開(kāi)頭的HTML,也就是找到文章列表開(kāi)頭的標記。
我們可以很容易地找到如圖所示的“新聞列表”。從這里開(kāi)始,后面是文章列表,然后找到文章列表末尾的HTML
就是這樣,一個(gè)很容易找到的標志
如果鏈接收錄圖片:
不要將采集處理成縮略圖,這里根據自己的需要選擇
二、內容頁(yè)采集
第八步,重新篩選區域網(wǎng)站:
?。ㄊ褂谜齽t表達式)必須收錄:(優(yōu)先級高于后者)
不能收錄:打開(kāi)源文件,我們可以清楚地看到文章鏈接以.html結尾,所以我們必須收錄它并填寫(xiě).html。如果遇到一些比較麻煩的list,也可以在后面填寫(xiě)Cannot contains
點(diǎn)擊保存設置進(jìn)入下一步,可以看到我們得到的文章 URL
看到這個(gè)是對的,我們保存信息,進(jìn)入下一步設置內容字段獲取規則
看看文章有沒(méi)有分頁(yè),隨便輸入一篇文章看看吧。. 我們看到文章中沒(méi)有分頁(yè)
所以這里我們默認
找到文章標題等,輸入一篇文章文章,右鍵查看源文件
看看這些
根據源碼填寫(xiě)
第九步,填寫(xiě)文章內容的開(kāi)頭,結尾同上,找到開(kāi)始和結束標志。
開(kāi)始部分如圖
末端部分如圖所示
最后填寫(xiě)如圖
第十步,要過(guò)濾文章中的什么內容,寫(xiě)在過(guò)濾規則中,比如過(guò)濾文章中的圖片,
選擇常用規則,如圖
然后勾選IMG,如圖
然后確定
這樣我們過(guò)濾文本中的圖片
第十一步,設置完成后,點(diǎn)擊保存設置并預覽,如圖
寫(xiě)了這樣一個(gè)采集規則,很簡(jiǎn)單吧?有些網(wǎng)站很難寫(xiě),但你需要更努力。
我們點(diǎn)擊保存,啟動(dòng)采集-start 采集網(wǎng)頁(yè),采集就完成了
看看我們采集到達了什么文章
最后,導出數據
首先選擇要導入的列,在彈出的窗口中按“選擇”選擇需要導入的列。發(fā)布選項通常是默認選項,除非您不想立即發(fā)布。每批導入的默認值為30,修改與否都沒(méi)有關(guān)系。附加選項一般選擇“排除重復標題”。至于自動(dòng)生成HTML的選項,建議不要先生成,因為我們要批量提取摘要和關(guān)鍵字。
文章標題
匹配規則:【內容】
過(guò)濾規則:{dede:trimreplace=""}_XXX網(wǎng)站{/dede:trim}
來(lái)自百度
三、采集 規則補充(一) 文本過(guò)濾和替換方法
1.去除超鏈接,這個(gè)是最常用的。
{dede:trim replace="}]*)>{/dede:trim}
{dede:trim replace=”}{/dede:trim}
如果這樣填寫(xiě),那么鏈接的文字也被去掉了
{dede:trim replace=”}]*)>(.*){/dede:trim}
2. 過(guò)濾JS電話(huà)廣告,如GG廣告,添加:
{dede:trim replace=”}{/dede:trim}
3.過(guò)濾 div 標簽。
這是非常重要的。如果過(guò)濾不干凈,發(fā)布的 文章 頁(yè)面可能會(huì )錯位。目前遇到采集后出現錯位的大部分原因都在這里。
{dede:修剪替換=”}
{/dede:修剪}
{dede:修剪替換=”}
{/dede:修剪}
有時(shí)需要像這樣過(guò)濾:
{dede:修剪替換=”}
(.*)
{/dede:修剪}
4.根據以上規則可以引入其他過(guò)濾規則。
5.過(guò)濾摘要和關(guān)鍵字用法,經(jīng)常用到。
{dede:trim replace=”}{/dede:trim}
6. 簡(jiǎn)單替換。
{dede:trim replace='word after replacement'}要替換的單詞{/dede:trim}
7.刪除源代碼
{dede:trim replace=""}src="([^"]*)"{/dede:trim}
(二)內容頁(yè)注明作者和出處
可以通過(guò)指定 value 值來(lái)實(shí)現:
{dede:item field='writer' value='小軍' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
{dede:item field='source' value='Military Net' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
(三)內容頁(yè)分頁(yè)采集
在“內容分頁(yè)導航所在區域的匹配規則:”中填寫(xiě)規則,如 查看全部
文章采集調用(換個(gè)網(wǎng)站你什么都做不了,這個(gè)教程讓你一看即會(huì ))
很多網(wǎng)友對于織夢(mèng)的采集教程(DEDEcms)感到頭疼。確實(shí),官方教程太籠統,沒(méi)說(shuō)什么。換個(gè)網(wǎng)站你是什么?不會(huì )啊,這個(gè)教程是最詳細的教程了,趕緊看看吧!
一、列表采集
第一步,我們打開(kāi)織夢(mèng)后臺,點(diǎn)擊采集——采集節點(diǎn)管理——添加新節點(diǎn)

第二步,這里我們以采集normal文章為例,我們選擇normal文章,然后確認

第三步,進(jìn)入采集的設置頁(yè)面,填寫(xiě)節點(diǎn)名稱(chēng)。
第四步,打開(kāi)你要采集的文章列表頁(yè)。
以這個(gè)網(wǎng)站為例,打開(kāi)這個(gè)頁(yè)面,
右鍵查看源文件找到目標頁(yè)面編碼,就在charset之后)

第五步,填寫(xiě)頁(yè)面基本信息,填寫(xiě)后如圖

第六步,填寫(xiě)列表URL獲取規則,查看文章列表第一頁(yè)地址。
比較第二頁(yè)的地址
我們發(fā)現除了49_后面的數字是一樣的,所以我們可以這樣寫(xiě)
(*).html
就用(*)代替1,因為只有2頁(yè),所以我們從1到2填,每頁(yè)加1,當然2-1...等于1。
到這里我們完成了

可能你的一些采集列表沒(méi)有規則,所以你只需要手動(dòng)指定列表URL即可,如圖
每行寫(xiě)一個(gè)頁(yè)面地址

第七步:填寫(xiě)文章 URL匹配規則,返回文章列表頁(yè)面
右鍵查看源文件找到區域開(kāi)頭的HTML,也就是找到文章列表開(kāi)頭的標記。
我們可以很容易地找到如圖所示的“新聞列表”。從這里開(kāi)始,后面是文章列表,然后找到文章列表末尾的HTML
就是這樣,一個(gè)很容易找到的標志
如果鏈接收錄圖片:
不要將采集處理成縮略圖,這里根據自己的需要選擇


二、內容頁(yè)采集
第八步,重新篩選區域網(wǎng)站:
?。ㄊ褂谜齽t表達式)必須收錄:(優(yōu)先級高于后者)
不能收錄:打開(kāi)源文件,我們可以清楚地看到文章鏈接以.html結尾,所以我們必須收錄它并填寫(xiě).html。如果遇到一些比較麻煩的list,也可以在后面填寫(xiě)Cannot contains
點(diǎn)擊保存設置進(jìn)入下一步,可以看到我們得到的文章 URL
看到這個(gè)是對的,我們保存信息,進(jìn)入下一步設置內容字段獲取規則
看看文章有沒(méi)有分頁(yè),隨便輸入一篇文章看看吧。. 我們看到文章中沒(méi)有分頁(yè)
所以這里我們默認
找到文章標題等,輸入一篇文章文章,右鍵查看源文件
看看這些
根據源碼填寫(xiě)




第九步,填寫(xiě)文章內容的開(kāi)頭,結尾同上,找到開(kāi)始和結束標志。
開(kāi)始部分如圖
末端部分如圖所示
最后填寫(xiě)如圖



第十步,要過(guò)濾文章中的什么內容,寫(xiě)在過(guò)濾規則中,比如過(guò)濾文章中的圖片,
選擇常用規則,如圖
然后勾選IMG,如圖
然后確定
這樣我們過(guò)濾文本中的圖片


第十一步,設置完成后,點(diǎn)擊保存設置并預覽,如圖
寫(xiě)了這樣一個(gè)采集規則,很簡(jiǎn)單吧?有些網(wǎng)站很難寫(xiě),但你需要更努力。
我們點(diǎn)擊保存,啟動(dòng)采集-start 采集網(wǎng)頁(yè),采集就完成了
看看我們采集到達了什么文章




最后,導出數據
首先選擇要導入的列,在彈出的窗口中按“選擇”選擇需要導入的列。發(fā)布選項通常是默認選項,除非您不想立即發(fā)布。每批導入的默認值為30,修改與否都沒(méi)有關(guān)系。附加選項一般選擇“排除重復標題”。至于自動(dòng)生成HTML的選項,建議不要先生成,因為我們要批量提取摘要和關(guān)鍵字。
文章標題
匹配規則:【內容】
過(guò)濾規則:{dede:trimreplace=""}_XXX網(wǎng)站{/dede:trim}

來(lái)自百度
三、采集 規則補充(一) 文本過(guò)濾和替換方法
1.去除超鏈接,這個(gè)是最常用的。
{dede:trim replace="}]*)>{/dede:trim}
{dede:trim replace=”}{/dede:trim}
如果這樣填寫(xiě),那么鏈接的文字也被去掉了
{dede:trim replace=”}]*)>(.*){/dede:trim}
2. 過(guò)濾JS電話(huà)廣告,如GG廣告,添加:
{dede:trim replace=”}{/dede:trim}
3.過(guò)濾 div 標簽。
這是非常重要的。如果過(guò)濾不干凈,發(fā)布的 文章 頁(yè)面可能會(huì )錯位。目前遇到采集后出現錯位的大部分原因都在這里。
{dede:修剪替換=”}
{/dede:修剪}
{dede:修剪替換=”}
{/dede:修剪}
有時(shí)需要像這樣過(guò)濾:
{dede:修剪替換=”}
(.*)
{/dede:修剪}
4.根據以上規則可以引入其他過(guò)濾規則。
5.過(guò)濾摘要和關(guān)鍵字用法,經(jīng)常用到。
{dede:trim replace=”}{/dede:trim}
6. 簡(jiǎn)單替換。
{dede:trim replace='word after replacement'}要替換的單詞{/dede:trim}
7.刪除源代碼
{dede:trim replace=""}src="([^"]*)"{/dede:trim}
(二)內容頁(yè)注明作者和出處
可以通過(guò)指定 value 值來(lái)實(shí)現:
{dede:item field='writer' value='小軍' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
{dede:item field='source' value='Military Net' isunit='' isdown=''}
{dede:match}{/dede:match}
{dede:function}{/dede:function}
{/dede:item}
(三)內容頁(yè)分頁(yè)采集
在“內容分頁(yè)導航所在區域的匹配規則:”中填寫(xiě)規則,如
文章采集調用(下采集神器:chromedp+HeadlessChrome安裝安裝)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 468 次瀏覽 ? 2022-01-06 06:06
最近在采集微信文章的時(shí)候,遇到了一個(gè)比較棘手的問(wèn)題。通過(guò)搜狗搜索的微信搜索模式,正常的直接抓取頁(yè)面的方式無(wú)法繞過(guò)搜狗搜索的驗證。所以成功使用gorequest采集到微信文章。
選擇 chromedp + Headless Chrome
面對采集的目的沒(méi)有達到的問(wèn)題,我是不是就此放棄了?顯然這是不可能的。不就是簽名驗證嘛,只要不要求輸入驗證碼,總有辦法解決的(蒽,一般的驗證碼也可以解決)。于是犧牲了golang下的采集神器:chromedp。
簡(jiǎn)單來(lái)說(shuō),chromedp是golang語(yǔ)言用來(lái)調用Chrome調試協(xié)議來(lái)模擬瀏覽器行為的一個(gè)包,可以簡(jiǎn)單的驅動(dòng)瀏覽器。使用的前提很簡(jiǎn)單,就是在電腦上安裝Chrome瀏覽器。
Chrome瀏覽器的安裝在Windows和macOS下沒(méi)有問(wèn)題,在桌面版Linux下也沒(méi)有問(wèn)題。但是如果要在Linux服務(wù)器版本上安裝Chrome,就沒(méi)有那么簡(jiǎn)單了。至少目前,Chrome 還沒(méi)有可以直接安裝在服務(wù)器上的軟件包。
但是你必須放棄你剛剛想到的想法嗎?當然這是不可能的。翻閱chromedp文檔,我剛剛找到了一段:
最簡(jiǎn)單的方法是在 chromedp/headless-shell 映像中運行使用 chromedp 的 Go 程序。該圖像收錄 headless-shell,這是一種較小的 Chrome 無(wú)頭構建,chromedp 可以立即找到它。
他的意思是:最簡(jiǎn)單的方法就是用chromedp調用chromedp/headless-shell鏡像。chromedp/headless-shell 是一個(gè) docker 鏡像,收錄一個(gè)較小的 Chrome 無(wú)頭瀏覽器。
好的,既然是docker鏡像,我們就用docker安裝。
首先登錄我們的linux服務(wù)器,下面的操作就認為你已經(jīng)登錄到linux服務(wù)器了。
安裝 docker 并安裝 chromedp/headless-shell
如果您的服務(wù)器已經(jīng)安裝了 docker,請跳過(guò)此步驟。
使用yum安裝docker
yum install docker
復制代碼
安裝完成后,此時(shí)無(wú)法直接使用docker,需要執行以下命令激活
systemctl daemon-reload
service docker restart
復制代碼
然后安裝 chromedp/headless-shell 鏡像
docker pull chromedp/headless-shell:latest
復制代碼
等待安裝完成,然后運行docker鏡像
docker run -d -p 9222:9222 --rm --name headless-shell chromedp/headless-shell
復制代碼
運行后,測試chrome是否正常:
curl http://127.0.0.1:9222/json/version
復制代碼
如果看到類(lèi)似下面的內容,說(shuō)明chrome瀏覽器工作正常
{"瀏覽器": "Chrome/96.0.4664.110","協(xié)議版本": "1.3","用戶(hù)代理":" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36","V8-Version": "9.6.180.21","WebKit-Version": "537.36 (@d5ef0e8214bc14c9b5bbf69a1515e431394c62a6)","webSocketDebuggerUrl": "ws://127.0.0.1/devers-browse/dev22921 -4d5b-b9e6-37d634aa719a"}
chromedp代碼調用chromedp/headless-shell采集微信公眾號文章內容
Linux下可以正常使用Headless Chrome無(wú)頭瀏覽器。剩下的就是調用它的代碼了。
現在我們開(kāi)始編寫(xiě)采集微信文章使用的chrome代碼:
定義關(guān)鍵字,artile struct.go
package main
type Keyword struct {
Id int64 `json:"id"`
Name string `json:"name"`
Level int `json:"level"`
ArticleCount int `json:"article_count"`
LastTime int64 `json:"last_time"` //上次執行時(shí)間
}
type Article struct {
Id int64 `json:"id"`
KeywordId int64 `json:"keyword_id"`
Title string `json:"title"`
Keywords string `json:"keywords"`
Description string `json:"description"`
OriginUrl string `json:"origin_url"`
Status int `json:"status"`
CreatedTime int `json:"created_time"`
UpdatedTime int `json:"updated_time"`
Content string `json:"content"`
ContentText string `json:"-"`
}
復制代碼
編寫(xiě)核心代碼 core.go
package main
import (
"context"
"fmt"
"github.com/chromedp/cdproto/cdp"
"github.com/chromedp/chromedp"
"log"
"net"
"net/url"
"strings"
"time"
)
func CollectArticleFromWeixin(keyword *Keyword) []*Article {
timeCtx, cancel := context.WithTimeout(GetChromeCtx(false), 30*time.Second)
defer cancel()
var collectLink string
err := chromedp.Run(timeCtx,
chromedp.Navigate(fmt.Sprintf("https://weixin.sogou.com/weixi ... ot%3B, keyword.Name)),
chromedp.WaitVisible(`//ul[@class="news-list"]`),
chromedp.Location(&collectLink),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗1:", keyword.Name, err.Error())
return nil
}
log.Println("正在采集列表:", collectLink)
var aLinks []*cdp.Node
if err := chromedp.Run(timeCtx, chromedp.Nodes(`//ul[@class="news-list"]//h3//a`, &aLinks)); err != nil {
log.Println("讀取搜狗搜索列表失敗2:", keyword.Name, err.Error())
return nil
}
var articles []*Article
for i := 0; i < len(aLinks); i++ {
href := aLinks[i].AttributeValue("href")
href, _ = joinURL("https://weixin.sogou.com/", href)
article := &Article{}
err = chromedp.Run(timeCtx,
chromedp.Navigate(href),
chromedp.WaitVisible(`#js_article`),
chromedp.Location(&article.OriginUrl),
chromedp.Text(`#activity-name`, &article.Title, chromedp.NodeVisible),
chromedp.InnerHTML("#js_content", &article.Content, chromedp.ByID),
chromedp.Text("#js_content", &article.ContentText, chromedp.ByID),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗3:", keyword.Name, err.Error())
}
log.Println("采集文章:", article.Title, len(article.Content), article.OriginUrl)
articles = append(articles, article)
}
return articles
}
// 重組url
func joinURL(baseURL, subURL string) (fullURL, fullURLWithoutFrag string) {
baseURL = strings.TrimSpace(baseURL)
subURL = strings.TrimSpace(subURL)
baseURLObj, _ := url.Parse(baseURL)
subURLObj, _ := url.Parse(subURL)
fullURLObj := baseURLObj.ResolveReference(subURLObj)
fullURL = fullURLObj.String()
fullURLObj.Fragment = ""
fullURLWithoutFrag = fullURLObj.String()
return
}
//檢查是否有9222端口,來(lái)判斷是否運行在linux上
func checkChromePort() bool {
addr := net.JoinHostPort("", "9222")
conn, err := net.DialTimeout("tcp", addr, 1*time.Second)
if err != nil {
return false
}
defer conn.Close()
return true
}
// ChromeCtx 使用一個(gè)實(shí)例
var ChromeCtx context.Context
func GetChromeCtx(focus bool) context.Context {
if ChromeCtx == nil || focus {
allocOpts := chromedp.DefaultExecAllocatorOptions[:]
allocOpts = append(allocOpts,
chromedp.DisableGPU,
chromedp.Flag("blink-settings", "imagesEnabled=false"),
chromedp.UserAgent(`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36`),
chromedp.Flag("accept-language", `zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6`),
)
if checkChromePort() {
// 不知道為何,不能直接使用 NewExecAllocator ,因此增加 使用 ws://127.0.0.1:9222/ 來(lái)調用
c, _ := chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222/")
ChromeCtx, _ = chromedp.NewContext(c)
} else {
c, _ := chromedp.NewExecAllocator(context.Background(), allocOpts...)
ChromeCtx, _ = chromedp.NewContext(c)
}
}
return ChromeCtx
}
復制代碼
寫(xiě)入入口文件main.go
package main
import "log"
func main() {
word := Keyword{
Name: "golang",
}
result := CollectArticleFromWeixin(&word)
for i, v := range result {
log.Println(i, v.Title, len(v.Content), v.OriginUrl)
log.Println("純內容:", v.ContentText)
}
}
復制代碼
運行結果測試:
偉大的結果出來(lái)了。
如果您對此代碼感興趣,可以從這里獲取 /fesiong/gob...。
本采集代碼僅供研究學(xué)習之用,不得用于非法用途。 查看全部
文章采集調用(下采集神器:chromedp+HeadlessChrome安裝安裝)
最近在采集微信文章的時(shí)候,遇到了一個(gè)比較棘手的問(wèn)題。通過(guò)搜狗搜索的微信搜索模式,正常的直接抓取頁(yè)面的方式無(wú)法繞過(guò)搜狗搜索的驗證。所以成功使用gorequest采集到微信文章。
選擇 chromedp + Headless Chrome
面對采集的目的沒(méi)有達到的問(wèn)題,我是不是就此放棄了?顯然這是不可能的。不就是簽名驗證嘛,只要不要求輸入驗證碼,總有辦法解決的(蒽,一般的驗證碼也可以解決)。于是犧牲了golang下的采集神器:chromedp。
簡(jiǎn)單來(lái)說(shuō),chromedp是golang語(yǔ)言用來(lái)調用Chrome調試協(xié)議來(lái)模擬瀏覽器行為的一個(gè)包,可以簡(jiǎn)單的驅動(dòng)瀏覽器。使用的前提很簡(jiǎn)單,就是在電腦上安裝Chrome瀏覽器。
Chrome瀏覽器的安裝在Windows和macOS下沒(méi)有問(wèn)題,在桌面版Linux下也沒(méi)有問(wèn)題。但是如果要在Linux服務(wù)器版本上安裝Chrome,就沒(méi)有那么簡(jiǎn)單了。至少目前,Chrome 還沒(méi)有可以直接安裝在服務(wù)器上的軟件包。
但是你必須放棄你剛剛想到的想法嗎?當然這是不可能的。翻閱chromedp文檔,我剛剛找到了一段:
最簡(jiǎn)單的方法是在 chromedp/headless-shell 映像中運行使用 chromedp 的 Go 程序。該圖像收錄 headless-shell,這是一種較小的 Chrome 無(wú)頭構建,chromedp 可以立即找到它。
他的意思是:最簡(jiǎn)單的方法就是用chromedp調用chromedp/headless-shell鏡像。chromedp/headless-shell 是一個(gè) docker 鏡像,收錄一個(gè)較小的 Chrome 無(wú)頭瀏覽器。
好的,既然是docker鏡像,我們就用docker安裝。
首先登錄我們的linux服務(wù)器,下面的操作就認為你已經(jīng)登錄到linux服務(wù)器了。
安裝 docker 并安裝 chromedp/headless-shell
如果您的服務(wù)器已經(jīng)安裝了 docker,請跳過(guò)此步驟。
使用yum安裝docker
yum install docker
復制代碼
安裝完成后,此時(shí)無(wú)法直接使用docker,需要執行以下命令激活
systemctl daemon-reload
service docker restart
復制代碼
然后安裝 chromedp/headless-shell 鏡像
docker pull chromedp/headless-shell:latest
復制代碼
等待安裝完成,然后運行docker鏡像
docker run -d -p 9222:9222 --rm --name headless-shell chromedp/headless-shell
復制代碼
運行后,測試chrome是否正常:
curl http://127.0.0.1:9222/json/version
復制代碼
如果看到類(lèi)似下面的內容,說(shuō)明chrome瀏覽器工作正常
{"瀏覽器": "Chrome/96.0.4664.110","協(xié)議版本": "1.3","用戶(hù)代理":" Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36","V8-Version": "9.6.180.21","WebKit-Version": "537.36 (@d5ef0e8214bc14c9b5bbf69a1515e431394c62a6)","webSocketDebuggerUrl": "ws://127.0.0.1/devers-browse/dev22921 -4d5b-b9e6-37d634aa719a"}
chromedp代碼調用chromedp/headless-shell采集微信公眾號文章內容
Linux下可以正常使用Headless Chrome無(wú)頭瀏覽器。剩下的就是調用它的代碼了。
現在我們開(kāi)始編寫(xiě)采集微信文章使用的chrome代碼:
定義關(guān)鍵字,artile struct.go
package main
type Keyword struct {
Id int64 `json:"id"`
Name string `json:"name"`
Level int `json:"level"`
ArticleCount int `json:"article_count"`
LastTime int64 `json:"last_time"` //上次執行時(shí)間
}
type Article struct {
Id int64 `json:"id"`
KeywordId int64 `json:"keyword_id"`
Title string `json:"title"`
Keywords string `json:"keywords"`
Description string `json:"description"`
OriginUrl string `json:"origin_url"`
Status int `json:"status"`
CreatedTime int `json:"created_time"`
UpdatedTime int `json:"updated_time"`
Content string `json:"content"`
ContentText string `json:"-"`
}
復制代碼
編寫(xiě)核心代碼 core.go
package main
import (
"context"
"fmt"
"github.com/chromedp/cdproto/cdp"
"github.com/chromedp/chromedp"
"log"
"net"
"net/url"
"strings"
"time"
)
func CollectArticleFromWeixin(keyword *Keyword) []*Article {
timeCtx, cancel := context.WithTimeout(GetChromeCtx(false), 30*time.Second)
defer cancel()
var collectLink string
err := chromedp.Run(timeCtx,
chromedp.Navigate(fmt.Sprintf("https://weixin.sogou.com/weixi ... ot%3B, keyword.Name)),
chromedp.WaitVisible(`//ul[@class="news-list"]`),
chromedp.Location(&collectLink),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗1:", keyword.Name, err.Error())
return nil
}
log.Println("正在采集列表:", collectLink)
var aLinks []*cdp.Node
if err := chromedp.Run(timeCtx, chromedp.Nodes(`//ul[@class="news-list"]//h3//a`, &aLinks)); err != nil {
log.Println("讀取搜狗搜索列表失敗2:", keyword.Name, err.Error())
return nil
}
var articles []*Article
for i := 0; i < len(aLinks); i++ {
href := aLinks[i].AttributeValue("href")
href, _ = joinURL("https://weixin.sogou.com/", href)
article := &Article{}
err = chromedp.Run(timeCtx,
chromedp.Navigate(href),
chromedp.WaitVisible(`#js_article`),
chromedp.Location(&article.OriginUrl),
chromedp.Text(`#activity-name`, &article.Title, chromedp.NodeVisible),
chromedp.InnerHTML("#js_content", &article.Content, chromedp.ByID),
chromedp.Text("#js_content", &article.ContentText, chromedp.ByID),
)
if err != nil {
log.Println("讀取搜狗搜索列表失敗3:", keyword.Name, err.Error())
}
log.Println("采集文章:", article.Title, len(article.Content), article.OriginUrl)
articles = append(articles, article)
}
return articles
}
// 重組url
func joinURL(baseURL, subURL string) (fullURL, fullURLWithoutFrag string) {
baseURL = strings.TrimSpace(baseURL)
subURL = strings.TrimSpace(subURL)
baseURLObj, _ := url.Parse(baseURL)
subURLObj, _ := url.Parse(subURL)
fullURLObj := baseURLObj.ResolveReference(subURLObj)
fullURL = fullURLObj.String()
fullURLObj.Fragment = ""
fullURLWithoutFrag = fullURLObj.String()
return
}
//檢查是否有9222端口,來(lái)判斷是否運行在linux上
func checkChromePort() bool {
addr := net.JoinHostPort("", "9222")
conn, err := net.DialTimeout("tcp", addr, 1*time.Second)
if err != nil {
return false
}
defer conn.Close()
return true
}
// ChromeCtx 使用一個(gè)實(shí)例
var ChromeCtx context.Context
func GetChromeCtx(focus bool) context.Context {
if ChromeCtx == nil || focus {
allocOpts := chromedp.DefaultExecAllocatorOptions[:]
allocOpts = append(allocOpts,
chromedp.DisableGPU,
chromedp.Flag("blink-settings", "imagesEnabled=false"),
chromedp.UserAgent(`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36`),
chromedp.Flag("accept-language", `zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6`),
)
if checkChromePort() {
// 不知道為何,不能直接使用 NewExecAllocator ,因此增加 使用 ws://127.0.0.1:9222/ 來(lái)調用
c, _ := chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222/")
ChromeCtx, _ = chromedp.NewContext(c)
} else {
c, _ := chromedp.NewExecAllocator(context.Background(), allocOpts...)
ChromeCtx, _ = chromedp.NewContext(c)
}
}
return ChromeCtx
}
復制代碼
寫(xiě)入入口文件main.go
package main
import "log"
func main() {
word := Keyword{
Name: "golang",
}
result := CollectArticleFromWeixin(&word)
for i, v := range result {
log.Println(i, v.Title, len(v.Content), v.OriginUrl)
log.Println("純內容:", v.ContentText)
}
}
復制代碼
運行結果測試:
偉大的結果出來(lái)了。
如果您對此代碼感興趣,可以從這里獲取 /fesiong/gob...。
本采集代碼僅供研究學(xué)習之用,不得用于非法用途。
文章采集調用( 如何使用Scrapy結合PhantomJS采集天貓商品內容的小程序?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 146 次瀏覽 ? 2022-01-04 21:01
如何使用Scrapy結合PhantomJS采集天貓商品內容的小程序?)
1、介紹
最近在看Scrapy爬蟲(chóng)框架,嘗試用Scrapy框架寫(xiě)一個(gè)簡(jiǎn)單的小程序,可以實(shí)現網(wǎng)頁(yè)信息采集。在嘗試的過(guò)程中遇到了很多小問(wèn)題,希望大家給點(diǎn)建議。
本文主要介紹如何使用Scrapy結合PhantomJS采集天貓產(chǎn)品內容。文章中自定義了一個(gè)DOWNLOADER_MIDDLEWARES,用于采集需要加載js的動(dòng)態(tài)網(wǎng)頁(yè)內容??戳撕芏嚓P(guān)于DOWNLOADER_MIDDLEWARES的資料,總結起來(lái),使用簡(jiǎn)單,但是會(huì )阻塞框架,所以性能不好。有資料提到自定義DOWNLOADER_HANDLER或者使用scrapyjs可以解決框架阻塞的問(wèn)題。有興趣的朋友可以去研究一下,這里就不多說(shuō)了。
2、具體實(shí)現2.1、環(huán)境要求
準備Python開(kāi)發(fā)運行環(huán)境需要進(jìn)行以下步驟:
Python--從官網(wǎng)下載安裝部署環(huán)境變量(本文使用的Python版本為3.5.1)
lxml--從官網(wǎng)庫下載對應版本的.whl文件,然后在命令行界面執行“pip install .whl文件路徑”
Scrapy--在命令行界面執行“pip install Scrapy”。詳情請參考《Scrapy的首次運行測試》
selenium--執行“pip install selenium”的命令行界面
PhantomJS --官網(wǎng)下載
以上步驟展示了兩種安裝方式: 1、安裝本地下載的wheel包; 2、使用Python安裝管理器進(jìn)行遠程下載安裝。注意:包版本需要與python版本匹配
2.2、開(kāi)發(fā)測試流程
首先找到需要采集的網(wǎng)頁(yè),這里簡(jiǎn)單搜索一個(gè)天貓產(chǎn)品,網(wǎng)址,頁(yè)面如下:
然后開(kāi)始寫(xiě)代碼,下面的代碼默認在命令行界面執行
1),創(chuàng )建一個(gè)scrapy爬蟲(chóng)項目tmSpider
E:\python-3.5.1>scrapy?startproject?tmSpider
2),修改settings.py配置
配置如下:
DOWNLOADER_MIDDLEWARES?=?{
????'tmSpider.middlewares.middleware.CustomMiddlewares':?543,
????'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':?None
}
3),在項目目錄下創(chuàng )建一個(gè)middlewares文件夾,然后在該文件夾下創(chuàng )建一個(gè)middleware.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
import?tmSpider.middlewares.downloader?as?downloader
class?CustomMiddlewares(object):
????def?process_request(self,?request,?spider):
????????url?=?str(request.url)
????????dl?=?downloader.CustomDownloader()
????????content?=?dl.VisitPersonPage(url)
????????return?HtmlResponse(url,?status?=?200,?body?=?content)
????
????def?process_response(self,?request,?response,?spider):
????????if?len(response.body)?==?100:
????????????return?IgnoreRequest("body?length?==?100")
????????else:
????????????return?response
4),使用selenium和PhantomJS編寫(xiě)一個(gè)網(wǎng)頁(yè)內容下載器,也在上一步創(chuàng )建的middlewares文件夾中創(chuàng )建一個(gè)downloader.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
import?time
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
from?selenium?import?webdriver
import?selenium.webdriver.support.ui?as?ui?
class?CustomDownloader(object):
????def?__init__(self):
????????#?use?any?browser?you?wish
????????cap?=?webdriver.DesiredCapabilities.PHANTOMJS
????????cap["phantomjs.page.settings.resourceTimeout"]?=?1000
????????cap["phantomjs.page.settings.loadImages"]?=?True
????????cap["phantomjs.page.settings.disk-cache"]?=?True
????????cap["phantomjs.page.customHeaders.Cookie"]?=?'SINAGLOBAL=3955422793326.2764.1451802953297;?'
????????self.driver?=?webdriver.PhantomJS(executable_path='F:/phantomjs/bin/phantomjs.exe',?desired_capabilities=cap)
????????wait?=?ui.WebDriverWait(self.driver,10)
????
????def?VisitPersonPage(self,?url):
????????print('正在加載網(wǎng)站.....')
????????self.driver.get(url)
????????time.sleep(1)
????????#?翻到底,詳情加載
????????js="var?q=document.documentElement.scrollTop=10000"
????????self.driver.execute_script(js)
????????time.sleep(5)
????????content?=?self.driver.page_source.encode('gbk',?'ignore')
????????print('網(wǎng)頁(yè)加載完畢.....')
????????return?content
????def?__del__(self):
????????self.driver.quit()
5) 創(chuàng )建爬蟲(chóng)模塊
在項目目錄E:python-3.5.1tmSpider,執行如下代碼:
E:\python-3.5.1\tmSpider>scrapy?genspider?tmall?'tmall.com'
執行后會(huì )在項目目錄E:python-3.5.1tmSpidermSpiderspiders下自動(dòng)生成tmall.py程序文件。該程序中的解析函數處理scrapy下載器返回的網(wǎng)頁(yè)內容。 采集網(wǎng)頁(yè)信息的方法可以是:
#?-*-?coding:?utf-8?-*-
import?time
import?scrapy
import?tmSpider.gooseeker.gsextractor?as?gsextractor
class?TmallSpider(scrapy.Spider):
????name?=?"tmall"
????allowed_domains?=?["tmall.com"]
????start_urls?=?(
????????'https://world.tmall.com/item/526449276263.htm',
????)
????
????#?獲得當前時(shí)間戳
????def?getTime(self):
????????current_time?=?str(time.time())
????????m?=?current_time.find('.')
????????current_time?=?current_time[0:m]
????????return?current_time
????def?parse(self,?response):
????????html?=?response.body
????????print("----------------------------------------------------------------------------")
????????extra=gsextractor.GsExtractor()
????????extra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e",?"淘寶天貓_商品詳情30474","tmall","list")
????????result?=?extra.extract(html)
????????print(str(result).encode('gbk',?'ignore').decode('gbk'))
????????#file_name?=?'F:/temp/淘寶天貓_商品詳情30474_'?+?self.getTime()?+?'.xml'
????????#open(file_name,"wb").write(result)
6),啟動(dòng)爬蟲(chóng)
在E:python-3.5.1tmSpider項目目錄下執行命令
E:\python-3.5.1\simpleSpider>scrapy?crawl?tmall
輸出結果:
提一下,上面的命令一次只能啟動(dòng)一個(gè)爬蟲(chóng)。如果你想同時(shí)啟動(dòng)多個(gè)爬蟲(chóng)怎么辦?然后需要自定義一個(gè)爬蟲(chóng)啟動(dòng)模塊,在spider下創(chuàng )建模塊文件runcrawl.py,代碼如下
#?-*-?coding:?utf-8?-*-
import?scrapy
from?twisted.internet?import?reactor
from?scrapy.crawler?import?CrawlerRunner
from?tmall?import?TmallSpider
...
spider?=?TmallSpider(domain='tmall.com')
runner?=?CrawlerRunner()
runner.crawl(spider)
...
d?=?runner.join()
d.addBoth(lambda?_:?reactor.stop())
reactor.run()
執行runcrawl.py文件并輸出結果:
3、展望
通過(guò)自定義DOWNLOADER_MIDDLEWARES調用PhantomJs實(shí)現爬蟲(chóng)后,一直在糾結框架阻塞的問(wèn)題,一直在想解決辦法。后面會(huì )研究scrapyjs、splash等調用瀏覽器的方式,看看能不能有效的解決這個(gè)問(wèn)題。
4、相關(guān)文件
1、Python即時(shí)網(wǎng)絡(luò )爬蟲(chóng):API說(shuō)明
5、采集GooSeeker開(kāi)源代碼下載源碼
1、GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源碼
6、文檔修改歷史
1, 2016-07-07: V1.0 查看全部
文章采集調用(
如何使用Scrapy結合PhantomJS采集天貓商品內容的小程序?)

1、介紹
最近在看Scrapy爬蟲(chóng)框架,嘗試用Scrapy框架寫(xiě)一個(gè)簡(jiǎn)單的小程序,可以實(shí)現網(wǎng)頁(yè)信息采集。在嘗試的過(guò)程中遇到了很多小問(wèn)題,希望大家給點(diǎn)建議。
本文主要介紹如何使用Scrapy結合PhantomJS采集天貓產(chǎn)品內容。文章中自定義了一個(gè)DOWNLOADER_MIDDLEWARES,用于采集需要加載js的動(dòng)態(tài)網(wǎng)頁(yè)內容??戳撕芏嚓P(guān)于DOWNLOADER_MIDDLEWARES的資料,總結起來(lái),使用簡(jiǎn)單,但是會(huì )阻塞框架,所以性能不好。有資料提到自定義DOWNLOADER_HANDLER或者使用scrapyjs可以解決框架阻塞的問(wèn)題。有興趣的朋友可以去研究一下,這里就不多說(shuō)了。
2、具體實(shí)現2.1、環(huán)境要求
準備Python開(kāi)發(fā)運行環(huán)境需要進(jìn)行以下步驟:
Python--從官網(wǎng)下載安裝部署環(huán)境變量(本文使用的Python版本為3.5.1)
lxml--從官網(wǎng)庫下載對應版本的.whl文件,然后在命令行界面執行“pip install .whl文件路徑”
Scrapy--在命令行界面執行“pip install Scrapy”。詳情請參考《Scrapy的首次運行測試》
selenium--執行“pip install selenium”的命令行界面
PhantomJS --官網(wǎng)下載
以上步驟展示了兩種安裝方式: 1、安裝本地下載的wheel包; 2、使用Python安裝管理器進(jìn)行遠程下載安裝。注意:包版本需要與python版本匹配
2.2、開(kāi)發(fā)測試流程
首先找到需要采集的網(wǎng)頁(yè),這里簡(jiǎn)單搜索一個(gè)天貓產(chǎn)品,網(wǎng)址,頁(yè)面如下:

然后開(kāi)始寫(xiě)代碼,下面的代碼默認在命令行界面執行
1),創(chuàng )建一個(gè)scrapy爬蟲(chóng)項目tmSpider
E:\python-3.5.1>scrapy?startproject?tmSpider
2),修改settings.py配置
配置如下:
DOWNLOADER_MIDDLEWARES?=?{
????'tmSpider.middlewares.middleware.CustomMiddlewares':?543,
????'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':?None
}
3),在項目目錄下創(chuàng )建一個(gè)middlewares文件夾,然后在該文件夾下創(chuàng )建一個(gè)middleware.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
import?tmSpider.middlewares.downloader?as?downloader
class?CustomMiddlewares(object):
????def?process_request(self,?request,?spider):
????????url?=?str(request.url)
????????dl?=?downloader.CustomDownloader()
????????content?=?dl.VisitPersonPage(url)
????????return?HtmlResponse(url,?status?=?200,?body?=?content)
????
????def?process_response(self,?request,?response,?spider):
????????if?len(response.body)?==?100:
????????????return?IgnoreRequest("body?length?==?100")
????????else:
????????????return?response
4),使用selenium和PhantomJS編寫(xiě)一個(gè)網(wǎng)頁(yè)內容下載器,也在上一步創(chuàng )建的middlewares文件夾中創(chuàng )建一個(gè)downloader.py文件,代碼如下:
#?-*-?coding:?utf-8?-*-
import?time
from?scrapy.exceptions?import?IgnoreRequest
from?scrapy.http?import?HtmlResponse,?Response
from?selenium?import?webdriver
import?selenium.webdriver.support.ui?as?ui?
class?CustomDownloader(object):
????def?__init__(self):
????????#?use?any?browser?you?wish
????????cap?=?webdriver.DesiredCapabilities.PHANTOMJS
????????cap["phantomjs.page.settings.resourceTimeout"]?=?1000
????????cap["phantomjs.page.settings.loadImages"]?=?True
????????cap["phantomjs.page.settings.disk-cache"]?=?True
????????cap["phantomjs.page.customHeaders.Cookie"]?=?'SINAGLOBAL=3955422793326.2764.1451802953297;?'
????????self.driver?=?webdriver.PhantomJS(executable_path='F:/phantomjs/bin/phantomjs.exe',?desired_capabilities=cap)
????????wait?=?ui.WebDriverWait(self.driver,10)
????
????def?VisitPersonPage(self,?url):
????????print('正在加載網(wǎng)站.....')
????????self.driver.get(url)
????????time.sleep(1)
????????#?翻到底,詳情加載
????????js="var?q=document.documentElement.scrollTop=10000"
????????self.driver.execute_script(js)
????????time.sleep(5)
????????content?=?self.driver.page_source.encode('gbk',?'ignore')
????????print('網(wǎng)頁(yè)加載完畢.....')
????????return?content
????def?__del__(self):
????????self.driver.quit()
5) 創(chuàng )建爬蟲(chóng)模塊
在項目目錄E:python-3.5.1tmSpider,執行如下代碼:
E:\python-3.5.1\tmSpider>scrapy?genspider?tmall?'tmall.com'
執行后會(huì )在項目目錄E:python-3.5.1tmSpidermSpiderspiders下自動(dòng)生成tmall.py程序文件。該程序中的解析函數處理scrapy下載器返回的網(wǎng)頁(yè)內容。 采集網(wǎng)頁(yè)信息的方法可以是:
#?-*-?coding:?utf-8?-*-
import?time
import?scrapy
import?tmSpider.gooseeker.gsextractor?as?gsextractor
class?TmallSpider(scrapy.Spider):
????name?=?"tmall"
????allowed_domains?=?["tmall.com"]
????start_urls?=?(
????????'https://world.tmall.com/item/526449276263.htm',
????)
????
????#?獲得當前時(shí)間戳
????def?getTime(self):
????????current_time?=?str(time.time())
????????m?=?current_time.find('.')
????????current_time?=?current_time[0:m]
????????return?current_time
????def?parse(self,?response):
????????html?=?response.body
????????print("----------------------------------------------------------------------------")
????????extra=gsextractor.GsExtractor()
????????extra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e",?"淘寶天貓_商品詳情30474","tmall","list")
????????result?=?extra.extract(html)
????????print(str(result).encode('gbk',?'ignore').decode('gbk'))
????????#file_name?=?'F:/temp/淘寶天貓_商品詳情30474_'?+?self.getTime()?+?'.xml'
????????#open(file_name,"wb").write(result)
6),啟動(dòng)爬蟲(chóng)
在E:python-3.5.1tmSpider項目目錄下執行命令
E:\python-3.5.1\simpleSpider>scrapy?crawl?tmall
輸出結果:

提一下,上面的命令一次只能啟動(dòng)一個(gè)爬蟲(chóng)。如果你想同時(shí)啟動(dòng)多個(gè)爬蟲(chóng)怎么辦?然后需要自定義一個(gè)爬蟲(chóng)啟動(dòng)模塊,在spider下創(chuàng )建模塊文件runcrawl.py,代碼如下
#?-*-?coding:?utf-8?-*-
import?scrapy
from?twisted.internet?import?reactor
from?scrapy.crawler?import?CrawlerRunner
from?tmall?import?TmallSpider
...
spider?=?TmallSpider(domain='tmall.com')
runner?=?CrawlerRunner()
runner.crawl(spider)
...
d?=?runner.join()
d.addBoth(lambda?_:?reactor.stop())
reactor.run()
執行runcrawl.py文件并輸出結果:

3、展望
通過(guò)自定義DOWNLOADER_MIDDLEWARES調用PhantomJs實(shí)現爬蟲(chóng)后,一直在糾結框架阻塞的問(wèn)題,一直在想解決辦法。后面會(huì )研究scrapyjs、splash等調用瀏覽器的方式,看看能不能有效的解決這個(gè)問(wèn)題。
4、相關(guān)文件
1、Python即時(shí)網(wǎng)絡(luò )爬蟲(chóng):API說(shuō)明
5、采集GooSeeker開(kāi)源代碼下載源碼
1、GooSeeker開(kāi)源Python網(wǎng)絡(luò )爬蟲(chóng)GitHub源碼
6、文檔修改歷史
1, 2016-07-07: V1.0
文章采集調用(無(wú)憂(yōu)主機php虛擬主機完美支持程序的外部鏈接,路徑知道嗎?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 149 次瀏覽 ? 2022-01-04 21:00
德德cms是一款功能強大的企業(yè)建站程序,完美支持無(wú)憂(yōu)主機php虛擬主機。在非常成熟的Dedecms程序面前,總會(huì )有一些不完善的地方。文章文章發(fā)表后,有可能被其他人轉發(fā),或者采集;如果在這個(gè)文章的內容中加入當前文檔地址和轉載說(shuō)明,則被轉載的<??@文章將收錄當前的文章 URL,一方面,網(wǎng)站@ >內部鏈接,另一方面,外部鏈接被轉載后無(wú)形中形成。像這種一石二鳥(niǎo)的做法,趕緊學(xué)起來(lái)吧!首先,織夢(mèng)程序以網(wǎng)站@>的主題為模板,為整個(gè)站點(diǎn)生成內容,然后我們直接把需要修改的模板文件下載到本地,文章內容模板文件的名字是:article_article.htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:
操作完成后保存上傳到網(wǎng)站@>空間,然后在織夢(mèng)后臺更新生成的文檔頁(yè)面。筆記: 查看全部
文章采集調用(無(wú)憂(yōu)主機php虛擬主機完美支持程序的外部鏈接,路徑知道嗎?)
德德cms是一款功能強大的企業(yè)建站程序,完美支持無(wú)憂(yōu)主機php虛擬主機。在非常成熟的Dedecms程序面前,總會(huì )有一些不完善的地方。文章文章發(fā)表后,有可能被其他人轉發(fā),或者采集;如果在這個(gè)文章的內容中加入當前文檔地址和轉載說(shuō)明,則被轉載的<??@文章將收錄當前的文章 URL,一方面,網(wǎng)站@ >內部鏈接,另一方面,外部鏈接被轉載后無(wú)形中形成。像這種一石二鳥(niǎo)的做法,趕緊學(xué)起來(lái)吧!首先,織夢(mèng)程序以網(wǎng)站@>的主題為模板,為整個(gè)站點(diǎn)生成內容,然后我們直接把需要修改的模板文件下載到本地,文章內容模板文件的名字是:article_article.htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:文章 內容模板文件的名字是:article_article .htm,你知道路徑嗎?在../tempects/default/中,如果使用其他主題,可以自己選擇主題名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:您可以自己選擇主題的名稱(chēng)。如果找到該文件,可以將其下載到本地并通過(guò)FTP工具打開(kāi)進(jìn)行編輯。那么,“當前文檔地址”和“轉載說(shuō)明”在哪里添加的呢?找到文章內容調用標簽:{dede:field.body/},在field標簽后添加如下代碼:歡迎轉載,本文標題:{dede:field.title/},請注明原文網(wǎng)址: {dede:global.cfg_basehost/} {dede:field/} 添加如下:

操作完成后保存上傳到網(wǎng)站@>空間,然后在織夢(mèng)后臺更新生成的文檔頁(yè)面。筆記:
文章采集調用(pbootcms文章(PbootDemoSkycaiji)插件()(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 141 次瀏覽 ? 2022-01-04 06:00
pbootcms文章(PbootDemoSkycaiji)插件直接在優(yōu)采云采集器云平臺下載使用。該插件由無(wú)皮小芒果開(kāi)發(fā)。插件默認只能發(fā)布新聞欄目,產(chǎn)品案例過(guò)濾,需要手動(dòng)修改。
插件下載后,我們可以在網(wǎng)站根目錄優(yōu)采云采集器安裝目錄中找到路徑:網(wǎng)站根目錄采集器安裝目錄pluginleasecmsPbootDemoSkycaiji.php
打開(kāi)這個(gè)文件開(kāi)頭的代碼就是自動(dòng)讀取我們的數據庫信息,不管是mysql還是sqlite數據庫都是一樣的,自動(dòng)抓取鏈接。
這是我們網(wǎng)站對應的信息,如作者、文章內容、產(chǎn)品分類(lèi)、縮略圖等,這里可以根據我們網(wǎng)站的需要添加更多參數。
此處的信息對應于我們網(wǎng)站 數據庫中的字段。如果這里沒(méi)有字段,可以直接進(jìn)入數據庫添加進(jìn)去。 有一點(diǎn)需要注意的是,這里的數據庫字段必須與前面的參數一一對應。例如,如果我們的參數中添加了縮略圖,那么我們必須找到該字段并填寫(xiě)我們在參數中添加的名稱(chēng)。
這里默認過(guò)濾其他目錄,只取我們數據庫中的新聞列表信息。如果我們要發(fā)布產(chǎn)品或案例,則無(wú)法使用。我們需要做的就是添加
// $catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select ();//文章Categories 可以注釋或刪除。
添加 $catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章 分類(lèi)就可以了一個(gè)匹配所有網(wǎng)站的目錄,上面是pbootcms文章(PbootDemoSkycaiji)插件的詳細介紹,上面的描述基本上沒(méi)有什么問(wèn)題,怎么能你還可以,如果你明白可以咨詢(xún)我們。
相關(guān)知識點(diǎn):
本站文章均摘自權威資料、書(shū)籍或網(wǎng)絡(luò )原創(chuàng )文章。如有版權糾紛或侵權,請立即聯(lián)系我們刪除。允許復制和轉載!謝謝... 查看全部
文章采集調用(pbootcms文章(PbootDemoSkycaiji)插件()(組圖))
pbootcms文章(PbootDemoSkycaiji)插件直接在優(yōu)采云采集器云平臺下載使用。該插件由無(wú)皮小芒果開(kāi)發(fā)。插件默認只能發(fā)布新聞欄目,產(chǎn)品案例過(guò)濾,需要手動(dòng)修改。

插件下載后,我們可以在網(wǎng)站根目錄優(yōu)采云采集器安裝目錄中找到路徑:網(wǎng)站根目錄采集器安裝目錄pluginleasecmsPbootDemoSkycaiji.php

打開(kāi)這個(gè)文件開(kāi)頭的代碼就是自動(dòng)讀取我們的數據庫信息,不管是mysql還是sqlite數據庫都是一樣的,自動(dòng)抓取鏈接。

這是我們網(wǎng)站對應的信息,如作者、文章內容、產(chǎn)品分類(lèi)、縮略圖等,這里可以根據我們網(wǎng)站的需要添加更多參數。

此處的信息對應于我們網(wǎng)站 數據庫中的字段。如果這里沒(méi)有字段,可以直接進(jìn)入數據庫添加進(jìn)去。 有一點(diǎn)需要注意的是,這里的數據庫字段必須與前面的參數一一對應。例如,如果我們的參數中添加了縮略圖,那么我們必須找到該字段并填寫(xiě)我們在參數中添加的名稱(chēng)。

這里默認過(guò)濾其他目錄,只取我們數據庫中的新聞列表信息。如果我們要發(fā)布產(chǎn)品或案例,則無(wú)法使用。我們需要做的就是添加
// $catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select ();//文章Categories 可以注釋或刪除。
添加 $catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章 分類(lèi)就可以了一個(gè)匹配所有網(wǎng)站的目錄,上面是pbootcms文章(PbootDemoSkycaiji)插件的詳細介紹,上面的描述基本上沒(méi)有什么問(wèn)題,怎么能你還可以,如果你明白可以咨詢(xún)我們。
相關(guān)知識點(diǎn):
本站文章均摘自權威資料、書(shū)籍或網(wǎng)絡(luò )原創(chuàng )文章。如有版權糾紛或侵權,請立即聯(lián)系我們刪除。允許復制和轉載!謝謝...
文章采集調用(dedecms如何修改這一上限值)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 133 次瀏覽 ? 2022-01-03 10:09
dedecmsSystem文章 調用描述最大字符數為250字節,設置文章摘要(可通過(guò)infolen或description相關(guān)標簽調用)最多250個(gè)字符,設置上限的次要目的是減少數據庫的冗余,保證網(wǎng)絡(luò )的優(yōu)良性能。所以,對介紹的內容不設上限顯然是不合理的,但如果上限可以自由控制,dedecms仿站會(huì )對網(wǎng)頁(yè)內容的布局帶來(lái)積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,NET源代碼。頻道列表頁(yè)面的文章匯總經(jīng)常需要調用dedecms。如果文章摘要中的字數可以控制無(wú)效,頁(yè)面布局可以非常靈活。
我們先說(shuō)一下如何修改這個(gè)上限,這樣才能顯示出方法的要點(diǎn)[field:description function="cn_substr(@me, number of characters)"/]。
獲取Dedecms系統中文章抽象相關(guān)的php文件。主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
在添加頁(yè)面,有一句話(huà): $description = cn_substrR($description, $cfg_auot_description);這句話(huà)實(shí)現了[field:description function="cn_substr(@me, number of characters)"/] 這個(gè)Feature。由于此聲明確實(shí)對頁(yè)面布局有益,因此我們盡量不做任何更改。
在編輯頁(yè)面上,有一句:$description = cn_substrR($description, 250);,這句話(huà)出現了熟悉的字符數250,是系統設置文章抽象字符數上限,如果是gbk編碼,則顯示125個(gè)字,如果是utf-8編碼,則是81個(gè)字,顯然我們要突破文章抽象的上限字符,必須取??梢?,這里可以把250修改成別的值,比如500。這里不建議設置太高,一是列表頁(yè)不需要顯示太多內容(顯示內容太多還不如間接使用body),另一個(gè)是避免數據庫中的冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面,找到if($dsize>250) $dsize = 250;語(yǔ)句。這個(gè)限制了后臺可以檢索到的字符數,把250改成500。 ,織夢(mèng)仿站的意思是字符數和之前修改的不一樣。(如果你確認你的每個(gè)文章都是手動(dòng)添加的,手動(dòng)完成就不需要修改這個(gè)文件了摘要獲取。從摘要中獲取minor還是為大量文章和采集準備的。)
首先登錄后臺,在系統-系統基本參數-其他選項中,可以將驅動(dòng)摘要的長(cháng)度改為500,與之前修改的字符數不同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid="row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為web提供了更廣闊的空間頁(yè)面布局。
說(shuō)說(shuō)德德cms文章或者調用文章列表頁(yè)上的summary方法
1: [field:info /]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me, 字符數)"/]
第二種方法1、是間接調用文章的summary。在被調用的詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}在{/dede:arclist}中,設置摘要中的字符數(最多250)由系統設置;如果使用[field:description /],間接使用后臺設置的抽象字符上限(也有后臺上限為250個(gè)字符)。顯然這些兩種方法都非常被動(dòng)和靈活。
方法四3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在文章抽象內容的上限不正常修改的情況下,這四種方法區別不大。
==========================
1:[field:info /]
2:[field:description /]
3:[field:info function="cn_substr(@me,字符數)"/]
4:[field:description function="cn_substr(@me, 字符數)"/]
這四個(gè)方法用于調用文章描述標簽。但它最多只能調用前 250 個(gè)字符。如果要調用更多,需要修改幾個(gè)地方:
1.article_description_main.php頁(yè)面,找到“if($dsize>250) $dsize = 250;”這句,把250改成500
2.登錄后臺,在系統-系統基本參數-其他選項中,將自動(dòng)匯總的長(cháng)度改為500.
3.登錄后臺執行SQL語(yǔ)句:alter table `dede_archives` change `description` `description` varchar(1000)
調用標簽{dede:field.description function='cn_substr(@me,500)'/}??梢燥@示500個(gè)字符) 查看全部
文章采集調用(dedecms如何修改這一上限值)
dedecmsSystem文章 調用描述最大字符數為250字節,設置文章摘要(可通過(guò)infolen或description相關(guān)標簽調用)最多250個(gè)字符,設置上限的次要目的是減少數據庫的冗余,保證網(wǎng)絡(luò )的優(yōu)良性能。所以,對介紹的內容不設上限顯然是不合理的,但如果上限可以自由控制,dedecms仿站會(huì )對網(wǎng)頁(yè)內容的布局帶來(lái)積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,NET源代碼。頻道列表頁(yè)面的文章匯總經(jīng)常需要調用dedecms。如果文章摘要中的字數可以控制無(wú)效,頁(yè)面布局可以非常靈活。
我們先說(shuō)一下如何修改這個(gè)上限,這樣才能顯示出方法的要點(diǎn)[field:description function="cn_substr(@me, number of characters)"/]。
獲取Dedecms系統中文章抽象相關(guān)的php文件。主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
在添加頁(yè)面,有一句話(huà): $description = cn_substrR($description, $cfg_auot_description);這句話(huà)實(shí)現了[field:description function="cn_substr(@me, number of characters)"/] 這個(gè)Feature。由于此聲明確實(shí)對頁(yè)面布局有益,因此我們盡量不做任何更改。
在編輯頁(yè)面上,有一句:$description = cn_substrR($description, 250);,這句話(huà)出現了熟悉的字符數250,是系統設置文章抽象字符數上限,如果是gbk編碼,則顯示125個(gè)字,如果是utf-8編碼,則是81個(gè)字,顯然我們要突破文章抽象的上限字符,必須取??梢?,這里可以把250修改成別的值,比如500。這里不建議設置太高,一是列表頁(yè)不需要顯示太多內容(顯示內容太多還不如間接使用body),另一個(gè)是避免數據庫中的冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面,找到if($dsize>250) $dsize = 250;語(yǔ)句。這個(gè)限制了后臺可以檢索到的字符數,把250改成500。 ,織夢(mèng)仿站的意思是字符數和之前修改的不一樣。(如果你確認你的每個(gè)文章都是手動(dòng)添加的,手動(dòng)完成就不需要修改這個(gè)文件了摘要獲取。從摘要中獲取minor還是為大量文章和采集準備的。)
首先登錄后臺,在系統-系統基本參數-其他選項中,可以將驅動(dòng)摘要的長(cháng)度改為500,與之前修改的字符數不同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid="row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為web提供了更廣闊的空間頁(yè)面布局。
說(shuō)說(shuō)德德cms文章或者調用文章列表頁(yè)上的summary方法
1: [field:info /]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me, 字符數)"/]
第二種方法1、是間接調用文章的summary。在被調用的詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}在{/dede:arclist}中,設置摘要中的字符數(最多250)由系統設置;如果使用[field:description /],間接使用后臺設置的抽象字符上限(也有后臺上限為250個(gè)字符)。顯然這些兩種方法都非常被動(dòng)和靈活。
方法四3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在文章抽象內容的上限不正常修改的情況下,這四種方法區別不大。
==========================
1:[field:info /]
2:[field:description /]
3:[field:info function="cn_substr(@me,字符數)"/]
4:[field:description function="cn_substr(@me, 字符數)"/]
這四個(gè)方法用于調用文章描述標簽。但它最多只能調用前 250 個(gè)字符。如果要調用更多,需要修改幾個(gè)地方:
1.article_description_main.php頁(yè)面,找到“if($dsize>250) $dsize = 250;”這句,把250改成500
2.登錄后臺,在系統-系統基本參數-其他選項中,將自動(dòng)匯總的長(cháng)度改為500.
3.登錄后臺執行SQL語(yǔ)句:alter table `dede_archives` change `description` `description` varchar(1000)
調用標簽{dede:field.description function='cn_substr(@me,500)'/}??梢燥@示500個(gè)字符)
文章采集調用( 鄭剛SEO培訓:自動(dòng)調用隨機TAGFTP標簽和自定義數量 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2022-01-03 00:08
鄭剛SEO培訓:自動(dòng)調用隨機TAGFTP標簽和自定義數量
)
鄭景誠:簡(jiǎn)單改造wordpress采集頁(yè)面調用代碼和指令增加收錄
昨天花了一點(diǎn)時(shí)間對網(wǎng)站鄭剛SEO培訓做一個(gè)簡(jiǎn)單的頁(yè)面調整。主要修改的是采集頁(yè)面。
這篇網(wǎng)站是用WP做的,所以如果你也用WP建網(wǎng)站或者用采集的內容,可以采集這篇文章文章,這對親們有效測試代碼和操作方法。
主要目的是讓采集的頁(yè)面變化與原來(lái)的內容不同,至少有收獲,進(jìn)一步提高頁(yè)面收錄的概率。
1、自動(dòng)調用隨機TAG標簽和自定義數量
1、[修改頁(yè)面:single.php]
只要把上面的代碼放在你想要的任何頁(yè)面或位置,你就可以直接調用隨機的TAG標簽,下面的9表示調用9,這是每個(gè)頁(yè)面調用的總和不同。這叫做隨機標簽。
原因:這個(gè)動(dòng)作是為了讓每個(gè)頁(yè)面調用不同的隨機標簽來(lái)提高標簽頁(yè)收錄的概率和進(jìn)入率,因為WP的主要排名多是TAG標簽頁(yè)。
2、采集在內容頁(yè)插入隨機圖片**
第一步:修改第1頁(yè):functions.php
/* 文章隨機插圖 */
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/zt/".rand(1,3).".png";
}
return $first_img;
}
將上面的代碼放在functions.php頁(yè)面的底部,點(diǎn)擊save。請記住將中間的網(wǎng)址替換為您的網(wǎng)址。
第2步:修改第2頁(yè):single.php
<p align="center">】,鄭景承SEO培訓提供在線(xiàn)實(shí)戰SEO最新視頻,優(yōu)化工具,加微信611247免費領(lǐng)取SEO教程。 查看全部
文章采集調用(
鄭剛SEO培訓:自動(dòng)調用隨機TAGFTP標簽和自定義數量
)
鄭景誠:簡(jiǎn)單改造wordpress采集頁(yè)面調用代碼和指令增加收錄

昨天花了一點(diǎn)時(shí)間對網(wǎng)站鄭剛SEO培訓做一個(gè)簡(jiǎn)單的頁(yè)面調整。主要修改的是采集頁(yè)面。
這篇網(wǎng)站是用WP做的,所以如果你也用WP建網(wǎng)站或者用采集的內容,可以采集這篇文章文章,這對親們有效測試代碼和操作方法。
主要目的是讓采集的頁(yè)面變化與原來(lái)的內容不同,至少有收獲,進(jìn)一步提高頁(yè)面收錄的概率。
1、自動(dòng)調用隨機TAG標簽和自定義數量
1、[修改頁(yè)面:single.php]
只要把上面的代碼放在你想要的任何頁(yè)面或位置,你就可以直接調用隨機的TAG標簽,下面的9表示調用9,這是每個(gè)頁(yè)面調用的總和不同。這叫做隨機標簽。
原因:這個(gè)動(dòng)作是為了讓每個(gè)頁(yè)面調用不同的隨機標簽來(lái)提高標簽頁(yè)收錄的概率和進(jìn)入率,因為WP的主要排名多是TAG標簽頁(yè)。
2、采集在內容頁(yè)插入隨機圖片**
第一步:修改第1頁(yè):functions.php
/* 文章隨機插圖 */
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/zt/".rand(1,3).".png";
}
return $first_img;
}
將上面的代碼放在functions.php頁(yè)面的底部,點(diǎn)擊save。請記住將中間的網(wǎng)址替換為您的網(wǎng)址。
第2步:修改第2頁(yè):single.php
<p align="center">】,鄭景承SEO培訓提供在線(xiàn)實(shí)戰SEO最新視頻,優(yōu)化工具,加微信611247免費領(lǐng)取SEO教程。
文章采集調用(是因為使用分布式追蹤系統監控服務(wù)(1)_社會(huì )萬(wàn)象_光明網(wǎng)(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2021-12-28 20:07
上周的工作是開(kāi)發(fā)一個(gè)運維需求——一個(gè)連接到公有云的分布式跟蹤系統。在服務(wù)上線(xiàn)商業(yè)化之前,運維能力需要滿(mǎn)足商業(yè)化需求,而在商業(yè)化運維需求中,使用分布式跟蹤系統來(lái)監控服務(wù)是必須的,所以就有了這個(gè)需求。一個(gè)星期后,代碼已經(jīng)開(kāi)發(fā)的差不多了,還缺少驗證和上線(xiàn)工作。在此之前,我會(huì )先回顧一下。
之所以連接分布式跟蹤系統如此重要,是因為使用分布式跟蹤系統監控服務(wù)有以下好處
我們的服務(wù)主要使用Python和Go語(yǔ)言開(kāi)發(fā),您可以分別獲取相應的SDK進(jìn)行開(kāi)發(fā)。整個(gè)開(kāi)發(fā)對接流程大致如下:
聯(lián)系接口人溝通嵌入解決方案,使用統一的SDK進(jìn)行嵌入代碼開(kāi)發(fā)測試,整理服務(wù)——微服務(wù)——節點(diǎn)——日志路徑信息,服務(wù)——微服務(wù)——業(yè)務(wù)——URL信息。公司分布式跟蹤系統的日志采集借用了現有日志服務(wù)的能力。日志服務(wù)收到調用鏈日志后,會(huì )直接轉發(fā)到分布式跟蹤系統,因此需要將信息分別反饋給日志采集系統和分布式跟蹤系統在服務(wù)節點(diǎn)上安裝日志采集代理升級微服務(wù),打開(kāi)開(kāi)關(guān)打印調用鏈日志(開(kāi)始打印調用鏈日志,同時(shí),節點(diǎn)上的日志采集代理將采集到的調用鏈日志信息上報給日志系統)生產(chǎn)環(huán)境驗證連接效果:本地打印調用鏈日志正常,日志采集代理正常上報調用鏈日志;分布式跟蹤系統可以檢索到服務(wù)的跟蹤信息,可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?
與性能調優(yōu)類(lèi)似,管理可以包括:HTTP請求服務(wù)/客戶(hù)端、RPC請求服務(wù)/客戶(hù)端、數據庫訪(fǎng)問(wèn)、中間件調用和本地方法調用。
默認情況下應該跟蹤哪些點(diǎn)?
我認為對于所有項目,我們應該默認收錄
5 種點(diǎn):
埋點(diǎn)法
聽(tīng)說(shuō)Go還有辦法直接替換Go-SDK來(lái)完成嵌入式函數注入...
兩個(gè)重要的紙張標準
由 Uber 發(fā)起的 OpenTracing 現已成為云原生計算基金會(huì )的成員項目。OpenTracing 語(yǔ)義規范定義了數據模型和一些用于數據采集
的接口。它應該被視為分布式跟蹤系統的接口標準。著(zhù)名的 Jaeger 和 Zipkin 都實(shí)現了 OpenTracing API。
行業(yè)實(shí)踐參考鏈接 查看全部
文章采集調用(是因為使用分布式追蹤系統監控服務(wù)(1)_社會(huì )萬(wàn)象_光明網(wǎng)(組圖))
上周的工作是開(kāi)發(fā)一個(gè)運維需求——一個(gè)連接到公有云的分布式跟蹤系統。在服務(wù)上線(xiàn)商業(yè)化之前,運維能力需要滿(mǎn)足商業(yè)化需求,而在商業(yè)化運維需求中,使用分布式跟蹤系統來(lái)監控服務(wù)是必須的,所以就有了這個(gè)需求。一個(gè)星期后,代碼已經(jīng)開(kāi)發(fā)的差不多了,還缺少驗證和上線(xiàn)工作。在此之前,我會(huì )先回顧一下。
之所以連接分布式跟蹤系統如此重要,是因為使用分布式跟蹤系統監控服務(wù)有以下好處
我們的服務(wù)主要使用Python和Go語(yǔ)言開(kāi)發(fā),您可以分別獲取相應的SDK進(jìn)行開(kāi)發(fā)。整個(gè)開(kāi)發(fā)對接流程大致如下:
聯(lián)系接口人溝通嵌入解決方案,使用統一的SDK進(jìn)行嵌入代碼開(kāi)發(fā)測試,整理服務(wù)——微服務(wù)——節點(diǎn)——日志路徑信息,服務(wù)——微服務(wù)——業(yè)務(wù)——URL信息。公司分布式跟蹤系統的日志采集借用了現有日志服務(wù)的能力。日志服務(wù)收到調用鏈日志后,會(huì )直接轉發(fā)到分布式跟蹤系統,因此需要將信息分別反饋給日志采集系統和分布式跟蹤系統在服務(wù)節點(diǎn)上安裝日志采集代理升級微服務(wù),打開(kāi)開(kāi)關(guān)打印調用鏈日志(開(kāi)始打印調用鏈日志,同時(shí),節點(diǎn)上的日志采集代理將采集到的調用鏈日志信息上報給日志系統)生產(chǎn)環(huán)境驗證連接效果:本地打印調用鏈日志正常,日志采集代理正常上報調用鏈日志;分布式跟蹤系統可以檢索到服務(wù)的跟蹤信息,可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?并且可以正常顯示微服務(wù)依賴(lài)拓撲圖。線(xiàn)上生產(chǎn)環(huán)境埋在各個(gè)站點(diǎn),哪里需要打印點(diǎn)開(kāi)發(fā)的調用鏈日志?
與性能調優(yōu)類(lèi)似,管理可以包括:HTTP請求服務(wù)/客戶(hù)端、RPC請求服務(wù)/客戶(hù)端、數據庫訪(fǎng)問(wèn)、中間件調用和本地方法調用。
默認情況下應該跟蹤哪些點(diǎn)?
我認為對于所有項目,我們應該默認收錄
5 種點(diǎn):
埋點(diǎn)法
聽(tīng)說(shuō)Go還有辦法直接替換Go-SDK來(lái)完成嵌入式函數注入...
兩個(gè)重要的紙張標準
由 Uber 發(fā)起的 OpenTracing 現已成為云原生計算基金會(huì )的成員項目。OpenTracing 語(yǔ)義規范定義了數據模型和一些用于數據采集
的接口。它應該被視為分布式跟蹤系統的接口標準。著(zhù)名的 Jaeger 和 Zipkin 都實(shí)現了 OpenTracing API。
行業(yè)實(shí)踐參考鏈接
文章采集調用(豆瓣網(wǎng)影評:電影中如何獲取真正請求的地址?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 488 次瀏覽 ? 2021-12-27 16:17
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests****、fake_useragent、json****、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2、如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集
的。
1)F12 右擊查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。
2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。
如何上網(wǎng)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,json
from fake_useragent import UserAgent
import csv
class Doban(object):
def __init__(self):
self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self):
pass
if __name__ == '__main__':
Siper = Doban()
Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects']
# print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf)
html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求
parse_html2 = etree.HTML(html2)
r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入
csv_file = open('scr.csv', 'a', encoding='gbk')
csv_writer = csv.writer(csv_file)
# 寫(xiě)入csv標題頭內容
csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"])
#寫(xiě)入數據
csv_writer.writerow([id, rate, urll])
7、求圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content
dirname = "./圖/" + id + ".jpg"
with open(dirname, 'wb') as f:
f.write(html2)
print("%s 【下載成功?。。?!】" % id)
8、 調用方法來(lái)實(shí)現功能。
html = self.get_page(url)
self.parse_page(html)
9、項目?jì)?yōu)化:
1) 設置時(shí)間延遲。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0
self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。
2、 控制臺會(huì )顯示下載成功信息。
3、保存 csv 文件。
4、電影圖片顯示。
[七、總結]
1、 不建議抓太多數據,可能會(huì )造成服務(wù)器負載,簡(jiǎn)單試一下。
2、 這篇文章就Python爬豆瓣的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止回爬做了相對的解決。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、需要本文源碼的可以在后臺回復“豆瓣電影”獲取。
****看完這篇文章你有收獲嗎?請轉發(fā)并分享給更多人****
IT共享家庭 查看全部
文章采集調用(豆瓣網(wǎng)影評:電影中如何獲取真正請求的地址?)
【一、項目背景】
豆瓣影業(yè)提供最新的電影介紹和影評,包括正在放映的電影的視頻查詢(xún)和購票服務(wù)。順便可以錄下想看的電影和電視劇,看,看,還可以寫(xiě)影評。它極大地方便了人們的生活。
今天以電視?。绖。槔?,批量抓取對應的電影,寫(xiě)入csv文件。用戶(hù)可以通過(guò)評分更好地選擇自己想要的電影。
【二、項目目標】
獲取對應的電影名稱(chēng)、評分、詳情鏈接,下載電影圖片,保存文件。
[三、 涉及的圖書(shū)館和網(wǎng)站]
1、 網(wǎng)址如下:
https://movie.douban.com/j/sea ... rt%3D{}
2、 涉及的庫:requests****、fake_useragent、json****、csv
3、軟件:PyCharm
【四、項目分析】
1、如何請求多個(gè)頁(yè)面?
當您單擊下一頁(yè)時(shí),每增加一頁(yè),paged 將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
2、如何獲取實(shí)際請求的地址?
請求數據的時(shí)候,發(fā)現頁(yè)面上沒(méi)有對應的數據。其實(shí)豆瓣是通過(guò)javascript動(dòng)態(tài)加載內容來(lái)防止采集
的。
1)F12 右擊查看,在左側菜單中找到Network,和name,找到第五個(gè)數據,點(diǎn)擊Preview。
2) 點(diǎn)擊subjects,可以看到title是對應電影的名字。率是相應的分數。通過(guò)js解析subjects字典,找到需要的字段。
如何上網(wǎng)?
https://movie.douban.com/j/sea ... t%3D0
https://movie.douban.com/j/sea ... %3D20
https://movie.douban.com/j/sea ... %3D40
https://movie.douban.com/j/sea ... %3D60
當您單擊下一頁(yè)時(shí),每增加一頁(yè),該頁(yè)將增加 20。使用{}替換轉換后的變量,然后使用for循環(huán)遍歷URL實(shí)現多個(gè)URL請求。
【五、項目實(shí)施】
1、 我們定義一個(gè)類(lèi)繼承對象,然后定義init方法繼承self,再定義一個(gè)main函數main繼承self。導入所需的庫和請求 URL。
import requests,json
from fake_useragent import UserAgent
import csv
class Doban(object):
def __init__(self):
self.url = "https://movie.douban.com/j/sea ... rt%3D{}"
def main(self):
pass
if __name__ == '__main__':
Siper = Doban()
Siper.main()
2、 隨機生成UserAgent,構造請求頭,防止反爬。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、發(fā)送請求,得到響應,頁(yè)面回調方便下一個(gè)請求。
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、json 解析頁(yè)面數據,獲取對應的字典。
data = json.loads(html)['subjects']
# print(data[0])
5、進(jìn)行遍歷,獲取對應的電影名,評分,鏈接到下一個(gè)詳情頁(yè)。
print(name, goblin_herf)
html2 = self.get_page(goblin_herf) # 第二個(gè)發(fā)生請求
parse_html2 = etree.HTML(html2)
r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、創(chuàng )建一個(gè)用于寫(xiě)入的csv文件,定義相應的header內容,并保存數據。
# 創(chuàng )建csv文件進(jìn)行寫(xiě)入
csv_file = open('scr.csv', 'a', encoding='gbk')
csv_writer = csv.writer(csv_file)
# 寫(xiě)入csv標題頭內容
csv_writerr.writerow(['電影', '評分', "詳情頁(yè)"])
#寫(xiě)入數據
csv_writer.writerow([id, rate, urll])
7、求圖片地址。定義圖片的名稱(chēng)并保存文檔。
html2 = requests.get(url=urll, headers=self.headers).content
dirname = "./圖/" + id + ".jpg"
with open(dirname, 'wb') as f:
f.write(html2)
print("%s 【下載成功?。。?!】" % id)
8、 調用方法來(lái)實(shí)現功能。
html = self.get_page(url)
self.parse_page(html)
9、項目?jì)?yōu)化:
1) 設置時(shí)間延遲。
time.sleep(1.4)
2) 定義一個(gè)變量u,用于遍歷,表示爬取的是哪個(gè)頁(yè)面。(更清晰,更令人印象深刻)。
u = 0
self.u += 1;
【六、效果展示】
1、 點(diǎn)擊綠色三角進(jìn)入起始頁(yè)和結束頁(yè)(從第0頁(yè)開(kāi)始)。
2、 控制臺會(huì )顯示下載成功信息。
3、保存 csv 文件。
4、電影圖片顯示。
[七、總結]
1、 不建議抓太多數據,可能會(huì )造成服務(wù)器負載,簡(jiǎn)單試一下。
2、 這篇文章就Python爬豆瓣的難點(diǎn)和關(guān)鍵點(diǎn),以及如何防止回爬做了相對的解決。
3、希望這個(gè)項目能幫助大家了解json解析頁(yè)面的基本流程,如何拼接字符串,如何使用format函數。
4、 本文基于Python網(wǎng)絡(luò )爬蟲(chóng),利用爬蟲(chóng)庫實(shí)現豆瓣電影及其圖片的獲取。說(shuō)到實(shí)現,總會(huì )有各種各樣的問(wèn)題。不要霸道,不要霸道,要了解的更深。
5、需要本文源碼的可以在后臺回復“豆瓣電影”獲取。
****看完這篇文章你有收獲嗎?請轉發(fā)并分享給更多人****
IT共享家庭
文章采集調用(前臺會(huì )員中心調用顯示wordpress會(huì )員投搞發(fā)表的文章數量)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2021-12-26 06:15
想打電話(huà)給前臺的會(huì )員中心,顯示W(wǎng)ordPress會(huì )員發(fā)表的文章數,習慣性的搜索谷歌看看有沒(méi)有相關(guān)的教程功能代碼。如果沒(méi)有功能代碼,就找插件。如果沒(méi)有插件,那就自己考慮代碼調用。, 有幸找到zwwooooo發(fā)布的WordPress:獲取某作者文章數的教程,剛好滿(mǎn)足需要,無(wú)需自己找插件或研究,謝謝作者!
操作方法:通過(guò)WP_Query()函數實(shí)現,循環(huán)獲取數量。
在當前主題的functions.php文件中添加如下函數代碼:
1
2
3
4
5
6
7
8
9
10
/* number of author's posts by zwwooooo */
function num_of_author_posts($authorID=''){ //根據作者ID獲取該作者的文章數量
if ($authorID) {
$author_query = new WP_Query( 'posts_per_page=-1&author='.$authorID );
$i=0;
while ($author_query->have_posts()) : $author_query->the_post(); ++$i; endwhile; wp_reset_postdata();
return $i;
}
return false;
}
在要顯示作者文章數量的地方添加調用代碼:
1
注意:$authorID的獲取方式有很多種,每個(gè)頁(yè)面的獲取方式都不一樣。自行研究。一般這些函數是get_the_author_meta(), get_userdata()... 去WordPress官方查一下(直接谷歌搜索函數名即可)
相關(guān)功能代碼來(lái)自zwwooooo博客
除特別注明外,文章均由博客網(wǎng)整理發(fā)布,歡迎轉載。 查看全部
文章采集調用(前臺會(huì )員中心調用顯示wordpress會(huì )員投搞發(fā)表的文章數量)
想打電話(huà)給前臺的會(huì )員中心,顯示W(wǎng)ordPress會(huì )員發(fā)表的文章數,習慣性的搜索谷歌看看有沒(méi)有相關(guān)的教程功能代碼。如果沒(méi)有功能代碼,就找插件。如果沒(méi)有插件,那就自己考慮代碼調用。, 有幸找到zwwooooo發(fā)布的WordPress:獲取某作者文章數的教程,剛好滿(mǎn)足需要,無(wú)需自己找插件或研究,謝謝作者!
操作方法:通過(guò)WP_Query()函數實(shí)現,循環(huán)獲取數量。
在當前主題的functions.php文件中添加如下函數代碼:
1
2
3
4
5
6
7
8
9
10
/* number of author's posts by zwwooooo */
function num_of_author_posts($authorID=''){ //根據作者ID獲取該作者的文章數量
if ($authorID) {
$author_query = new WP_Query( 'posts_per_page=-1&author='.$authorID );
$i=0;
while ($author_query->have_posts()) : $author_query->the_post(); ++$i; endwhile; wp_reset_postdata();
return $i;
}
return false;
}
在要顯示作者文章數量的地方添加調用代碼:
1
注意:$authorID的獲取方式有很多種,每個(gè)頁(yè)面的獲取方式都不一樣。自行研究。一般這些函數是get_the_author_meta(), get_userdata()... 去WordPress官方查一下(直接谷歌搜索函數名即可)
相關(guān)功能代碼來(lái)自zwwooooo博客
除特別注明外,文章均由博客網(wǎng)整理發(fā)布,歡迎轉載。
文章采集調用(微服務(wù)下的幾個(gè)監控維度(下)化服務(wù))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 209 次瀏覽 ? 2021-12-26 06:01
前言
微服務(wù)是一種架構風(fēng)格。一個(gè)大型復雜的軟件應用程序通常由多個(gè)微服務(wù)組成。系統中的每一個(gè)微服務(wù)都可以獨立部署,每一個(gè)微服務(wù)都是松耦合的。每個(gè)微服務(wù)只專(zhuān)注于完成一項任務(wù),并且很好地完成該任務(wù)。
微服務(wù)之前的很多單體應用,監控復雜度相對較低,場(chǎng)景單一。在微服務(wù)下,因為業(yè)務(wù)邏輯分散在很多流程中(很多大的業(yè)務(wù),一個(gè)業(yè)務(wù)流程涉及幾十個(gè)服務(wù)),一旦一個(gè)業(yè)務(wù)出現問(wèn)題,追根溯源就像大海撈針。這時(shí)候就需要一個(gè)完整的監控系統。
一個(gè)完整的監控系統建設周期長(cháng),隨著(zhù)業(yè)務(wù)場(chǎng)景的變化,也需要迭代優(yōu)化。本文僅從幾個(gè)監控維度和霧化場(chǎng)景談如何建立統一的監控數據采集和展示系統,希望能啟發(fā)大家繼續思考監控系統的建設。
微服務(wù)下的幾個(gè)監控維度
與傳統應用的監控相比,微服務(wù)監控最明顯的變化就是視角的改變。我們已將監控從機器角度轉變?yōu)橐苑?wù)為中心的角度。從微服務(wù)的角度,可以從數據和資源兩個(gè)維度來(lái)查看監控。用代碼維度分層,如下圖:
數據維度
目前的WEB服務(wù)是主流。每個(gè)WEB服務(wù)都有一個(gè)入口,無(wú)論是APP還是WEB頁(yè)面,入口負責與用戶(hù)進(jìn)行交互,并將用戶(hù)的信息發(fā)送到后端。后端一般可以訪(fǎng)問(wèn)LB或者Gateway,負責負載。將數據平衡轉發(fā)給特定的應用程序進(jìn)行處理,最后由應用程序處理后寫(xiě)入數據庫。
資源維度
現在很多服務(wù)都部署在云中,涉及到虛擬化技術(shù)。虛擬主機運行在物理服務(wù)器上,虛擬主機通過(guò)虛擬網(wǎng)絡(luò )相互連接。資源層面的監控是必不可少的環(huán)節。我們不僅需要采集虛擬主機的性能指標,還需要知道運行虛擬主機的服務(wù)器上的CPU、內存、磁盤(pán)IO等數據,以及虛擬主機之間的連接情況。虛擬網(wǎng)絡(luò )的帶寬負載等。
代碼維度
APM,即代碼端的應用性能分析、監控和采集
,隨著(zhù)微服務(wù)的興起而出現。微服務(wù)場(chǎng)景下,一個(gè)業(yè)務(wù)流程跨越幾十個(gè)服務(wù)場(chǎng)景,只有傳統的監控數據,很難定位問(wèn)題的根源。
我們可以為代碼的技術(shù)棧開(kāi)發(fā)一個(gè)特定的集合框架。在可接受的性能損失范圍內,我們可以采集
函數之間的調用關(guān)系,服務(wù)之間的調用拓撲,并測量函數或服務(wù)的響應時(shí)間。有針對性地優(yōu)化性能或提前預測故障。
關(guān)鍵監測指標情景描述
微服務(wù)監控最大的特點(diǎn)可以用一句話(huà)概括:服務(wù)這么多,服務(wù)之間的調用也很復雜。當系統出現問(wèn)題時(shí),要想在數百個(gè)相關(guān)且錯綜復雜的服務(wù)系統中快速定位故障系統,就需要依靠關(guān)鍵的監控指標?;谝陨先齻€(gè)維度,我們分析了每個(gè)維度下各個(gè)級別可能產(chǎn)生的告警,總結了URL監控、主機監控??、產(chǎn)品監控8個(gè)原子監控場(chǎng)景。
URL監控:無(wú)論是APP還是WEB,本質(zhì)上都是通過(guò)URL發(fā)起后臺調用。您可以使用 MOCK 調用 API 獲取響應時(shí)間、響應狀態(tài)碼等指標來(lái)展示監控業(yè)務(wù)的整體健康狀況。
主機監控:通過(guò)安裝代理,采集
主機的基本監控信息,如CPU、內存、IO等。同時(shí),用戶(hù)可以通過(guò)配置文件打開(kāi)其他開(kāi)源應用如Tomcat、Nginx等數據采集開(kāi)關(guān)。
產(chǎn)品監控:公有云以產(chǎn)品的形式向用戶(hù)提供主機、網(wǎng)絡(luò )、存儲和一些中間件。產(chǎn)品服務(wù)后臺上報各個(gè)產(chǎn)品的相關(guān)指標數據,監控各個(gè)產(chǎn)品資源的健康狀況。
組件監控:一些開(kāi)源組件,如Tomcat、Nginx、Netty等監控數據采集,可以通過(guò)宿主機上的代理加載相應組件的監控采集程序。
自定義監控:服務(wù)實(shí)例采集
業(yè)務(wù)相關(guān)數據,定期調用API接口上報數據,支持多個(gè)服務(wù)實(shí)例同時(shí)上報一個(gè)監控項,支持多維度查詢(xún)告警。
資源監控:用戶(hù)根據資源上報自定義數據。每個(gè)資源具有相同的監控項,每個(gè)資源的監控項相互獨立。
APM:根據各個(gè)語(yǔ)言棧的不同,實(shí)現服務(wù)間函數調用關(guān)系和調用拓撲的展示。根據每種語(yǔ)言的不同,有的需要侵入代碼,以SDK嵌入的形式采集數據,有的與代碼解耦,通過(guò)元編程重新加載一些方法來(lái)實(shí)現數據采集。
事件監控:對公有云產(chǎn)品和業(yè)務(wù)邏輯中的不連續事件,如云盤(pán)不可用事件、SSD硬盤(pán)Reset事件等,提供統一的存儲、分析和展示。
通過(guò)以上原子場(chǎng)景的數據采集,我們可以通過(guò)UI統一展示監控數據,并基于上述三個(gè)維度設計圖形化頁(yè)面,以用戶(hù)體驗為核心。圖形化一般以時(shí)間序列為橫軸,顯示隨時(shí)間變化的指標。對于一些統計指標,分析比較結果也可以通過(guò)餅圖、直方圖等方式展示。
本文主要介紹監控系統中數據的采集和展示。至于數據存儲和報警過(guò)程,感興趣的同學(xué)可以繼續關(guān)注后續監控相關(guān)文章。
關(guān)于作者
董磊:UCloud技術(shù)專(zhuān)家。十年IT行業(yè)開(kāi)發(fā)經(jīng)驗,目前負責UCloud混合云及監控產(chǎn)品的設計開(kāi)發(fā),持續專(zhuān)注于微服務(wù)架構、監控、DevOps等領(lǐng)域。 查看全部
文章采集調用(微服務(wù)下的幾個(gè)監控維度(下)化服務(wù))
前言
微服務(wù)是一種架構風(fēng)格。一個(gè)大型復雜的軟件應用程序通常由多個(gè)微服務(wù)組成。系統中的每一個(gè)微服務(wù)都可以獨立部署,每一個(gè)微服務(wù)都是松耦合的。每個(gè)微服務(wù)只專(zhuān)注于完成一項任務(wù),并且很好地完成該任務(wù)。
微服務(wù)之前的很多單體應用,監控復雜度相對較低,場(chǎng)景單一。在微服務(wù)下,因為業(yè)務(wù)邏輯分散在很多流程中(很多大的業(yè)務(wù),一個(gè)業(yè)務(wù)流程涉及幾十個(gè)服務(wù)),一旦一個(gè)業(yè)務(wù)出現問(wèn)題,追根溯源就像大海撈針。這時(shí)候就需要一個(gè)完整的監控系統。
一個(gè)完整的監控系統建設周期長(cháng),隨著(zhù)業(yè)務(wù)場(chǎng)景的變化,也需要迭代優(yōu)化。本文僅從幾個(gè)監控維度和霧化場(chǎng)景談如何建立統一的監控數據采集和展示系統,希望能啟發(fā)大家繼續思考監控系統的建設。
微服務(wù)下的幾個(gè)監控維度
與傳統應用的監控相比,微服務(wù)監控最明顯的變化就是視角的改變。我們已將監控從機器角度轉變?yōu)橐苑?wù)為中心的角度。從微服務(wù)的角度,可以從數據和資源兩個(gè)維度來(lái)查看監控。用代碼維度分層,如下圖:
數據維度
目前的WEB服務(wù)是主流。每個(gè)WEB服務(wù)都有一個(gè)入口,無(wú)論是APP還是WEB頁(yè)面,入口負責與用戶(hù)進(jìn)行交互,并將用戶(hù)的信息發(fā)送到后端。后端一般可以訪(fǎng)問(wèn)LB或者Gateway,負責負載。將數據平衡轉發(fā)給特定的應用程序進(jìn)行處理,最后由應用程序處理后寫(xiě)入數據庫。
資源維度
現在很多服務(wù)都部署在云中,涉及到虛擬化技術(shù)。虛擬主機運行在物理服務(wù)器上,虛擬主機通過(guò)虛擬網(wǎng)絡(luò )相互連接。資源層面的監控是必不可少的環(huán)節。我們不僅需要采集虛擬主機的性能指標,還需要知道運行虛擬主機的服務(wù)器上的CPU、內存、磁盤(pán)IO等數據,以及虛擬主機之間的連接情況。虛擬網(wǎng)絡(luò )的帶寬負載等。
代碼維度
APM,即代碼端的應用性能分析、監控和采集
,隨著(zhù)微服務(wù)的興起而出現。微服務(wù)場(chǎng)景下,一個(gè)業(yè)務(wù)流程跨越幾十個(gè)服務(wù)場(chǎng)景,只有傳統的監控數據,很難定位問(wèn)題的根源。
我們可以為代碼的技術(shù)棧開(kāi)發(fā)一個(gè)特定的集合框架。在可接受的性能損失范圍內,我們可以采集
函數之間的調用關(guān)系,服務(wù)之間的調用拓撲,并測量函數或服務(wù)的響應時(shí)間。有針對性地優(yōu)化性能或提前預測故障。
關(guān)鍵監測指標情景描述
微服務(wù)監控最大的特點(diǎn)可以用一句話(huà)概括:服務(wù)這么多,服務(wù)之間的調用也很復雜。當系統出現問(wèn)題時(shí),要想在數百個(gè)相關(guān)且錯綜復雜的服務(wù)系統中快速定位故障系統,就需要依靠關(guān)鍵的監控指標?;谝陨先齻€(gè)維度,我們分析了每個(gè)維度下各個(gè)級別可能產(chǎn)生的告警,總結了URL監控、主機監控??、產(chǎn)品監控8個(gè)原子監控場(chǎng)景。
URL監控:無(wú)論是APP還是WEB,本質(zhì)上都是通過(guò)URL發(fā)起后臺調用。您可以使用 MOCK 調用 API 獲取響應時(shí)間、響應狀態(tài)碼等指標來(lái)展示監控業(yè)務(wù)的整體健康狀況。
主機監控:通過(guò)安裝代理,采集
主機的基本監控信息,如CPU、內存、IO等。同時(shí),用戶(hù)可以通過(guò)配置文件打開(kāi)其他開(kāi)源應用如Tomcat、Nginx等數據采集開(kāi)關(guān)。
產(chǎn)品監控:公有云以產(chǎn)品的形式向用戶(hù)提供主機、網(wǎng)絡(luò )、存儲和一些中間件。產(chǎn)品服務(wù)后臺上報各個(gè)產(chǎn)品的相關(guān)指標數據,監控各個(gè)產(chǎn)品資源的健康狀況。
組件監控:一些開(kāi)源組件,如Tomcat、Nginx、Netty等監控數據采集,可以通過(guò)宿主機上的代理加載相應組件的監控采集程序。
自定義監控:服務(wù)實(shí)例采集
業(yè)務(wù)相關(guān)數據,定期調用API接口上報數據,支持多個(gè)服務(wù)實(shí)例同時(shí)上報一個(gè)監控項,支持多維度查詢(xún)告警。
資源監控:用戶(hù)根據資源上報自定義數據。每個(gè)資源具有相同的監控項,每個(gè)資源的監控項相互獨立。
APM:根據各個(gè)語(yǔ)言棧的不同,實(shí)現服務(wù)間函數調用關(guān)系和調用拓撲的展示。根據每種語(yǔ)言的不同,有的需要侵入代碼,以SDK嵌入的形式采集數據,有的與代碼解耦,通過(guò)元編程重新加載一些方法來(lái)實(shí)現數據采集。
事件監控:對公有云產(chǎn)品和業(yè)務(wù)邏輯中的不連續事件,如云盤(pán)不可用事件、SSD硬盤(pán)Reset事件等,提供統一的存儲、分析和展示。
通過(guò)以上原子場(chǎng)景的數據采集,我們可以通過(guò)UI統一展示監控數據,并基于上述三個(gè)維度設計圖形化頁(yè)面,以用戶(hù)體驗為核心。圖形化一般以時(shí)間序列為橫軸,顯示隨時(shí)間變化的指標。對于一些統計指標,分析比較結果也可以通過(guò)餅圖、直方圖等方式展示。
本文主要介紹監控系統中數據的采集和展示。至于數據存儲和報警過(guò)程,感興趣的同學(xué)可以繼續關(guān)注后續監控相關(guān)文章。
關(guān)于作者
董磊:UCloud技術(shù)專(zhuān)家。十年IT行業(yè)開(kāi)發(fā)經(jīng)驗,目前負責UCloud混合云及監控產(chǎn)品的設計開(kāi)發(fā),持續專(zhuān)注于微服務(wù)架構、監控、DevOps等領(lǐng)域。
文章采集調用(給你八分鐘搞定dedeCMS(織夢(mèng)內容管理系統)(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2021-12-23 02:13
給你八分鐘搞定dedecms(織夢(mèng)內容管理系統)
,并且在易用性方面,有了長(cháng)足的發(fā)展。德德cms免費版的主要目標用戶(hù)鎖定在個(gè)人站長(cháng),功能更側重于個(gè)人網(wǎng)站或中小型門(mén)戶(hù)網(wǎng)站的建設。當然,也有企業(yè)用戶(hù)和學(xué)校使用這個(gè)系統。當我第一次看到這個(gè)界面時(shí),我很陌生。只知道界面有很多功能,但不知道具體是做什么的……我用dedecms做官網(wǎng),所以沒(méi)用很多功能。. 第4分鐘_這里的核心主要是生成網(wǎng)站的導航,可以在導航中添加文章(這里特別強調,原因是喜歡這里的想法…… 把它放在導航里所有的內容都可以用文章的形式表達)這是工作的第一步,至少我是這么認為的..第5分鐘_系統在系統欄,什么我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面
1.3K 查看全部
文章采集調用(給你八分鐘搞定dedeCMS(織夢(mèng)內容管理系統)(圖))
給你八分鐘搞定dedecms(織夢(mèng)內容管理系統)
,并且在易用性方面,有了長(cháng)足的發(fā)展。德德cms免費版的主要目標用戶(hù)鎖定在個(gè)人站長(cháng),功能更側重于個(gè)人網(wǎng)站或中小型門(mén)戶(hù)網(wǎng)站的建設。當然,也有企業(yè)用戶(hù)和學(xué)校使用這個(gè)系統。當我第一次看到這個(gè)界面時(shí),我很陌生。只知道界面有很多功能,但不知道具體是做什么的……我用dedecms做官網(wǎng),所以沒(méi)用很多功能。. 第4分鐘_這里的核心主要是生成網(wǎng)站的導航,可以在導航中添加文章(這里特別強調,原因是喜歡這里的想法…… 把它放在導航里所有的內容都可以用文章的形式表達)這是工作的第一步,至少我是這么認為的..第5分鐘_系統在系統欄,什么我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 至少我是這么認為的.. 第5分鐘_系統在系統欄,我們需要的是設置我們的一些系統變量,這里設置系統變量后,方便我們在系統中靈活調用這些變量后續的開(kāi)發(fā)過(guò)程。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面 方便我們在后續開(kāi)發(fā)過(guò)程中靈活調用這些變量。dedecms中的第六分鐘_模板,最靈活的應該是系統提供的在這里,我們可以將我們的頁(yè)面編輯成模板,然后調用....更多模板標簽:http:v53archivestag 7th minute_生成最后一分鐘,我們已經(jīng)寫(xiě)好了自己的模板,后面需要用到這些模板,我們可以在導航欄中調用這些模板,最后生成我們的頁(yè)面
1.3K
文章采集調用(免費開(kāi)源可商用的PHP萬(wàn)能建站程序-DiYunCMS(帝云CMS))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2021-12-20 15:03
免費、開(kāi)源、可商用的PHP通用建站程序-帝云cms(帝云cms)
對于個(gè)性化的需求,需要在首頁(yè)或者其他模板頁(yè)面的指定分類(lèi)下調用文章,那么我們就可以實(shí)現:
網(wǎng)上很容易找到這個(gè)教程,但是有個(gè)問(wèn)題。調用的文章沒(méi)有按最新排序,或者發(fā)布時(shí)間越早排在前面,肯定是不合理的。已修復一流的資源網(wǎng)絡(luò )。這個(gè)問(wèn)題。
1、首先打開(kāi)index.php文件,找到如下代碼:
$smarty->assign('new_articles',?index_get_new_articles());?//?最新文章
在此行下方添加以下代碼:
$smarty->assign('class_articles_4',?index_get_class_articles(4,6));?//?分類(lèi)調用文章
4 是 文章 類(lèi)別 ID,6 是顯示的項目數。
如果調用的category很多,只需要復制粘貼上一行即可,但是文章category id和調用次數要根據自己的需要修改。
打開(kāi)ecshop根目錄下的includes/init.php文件,在最下方添加如下代碼,并添加到?>。
2、還在這個(gè)文件中嗎?> 在這之前添加以下函數:
/**
*?獲得指定欄目最新的文章列表。
*
*?@access?private
*?@return?array
*/
function?index_get_class_articles($cat_aid,?$cat_num)
{
$sql?=?"SELECT?article_id,?title,open_type,cat_id,file_url,description?FROM?"?.$GLOBALS['ecs']->table('article').?"?WHERE?cat_id?=?".$cat_aid."?and?is_open?=?1?ORDER?BY?add_time?DESC?LIMIT?"?.?$cat_num;
$res?=?$GLOBALS['db']->getAll($sql);
$arr?=?array();
foreach?($res?AS?$idx?=>?$row)
{
$arr[$idx]['id']?=?$row['article_id'];
$arr[$idx]['title']?=?$row['title'];
$arr[$idx]['file_url']?=?$row['file_url'];
$arr[$idx]['description']?=?$row['description'];
$arr[$idx]['short_title']?=?$GLOBALS['_CFG']['article_title_length']?>?0??
sub_str($row['title'],?$GLOBALS['_CFG']['article_title_length'])?:?$row['title'];
$arr[$idx]['cat_name']?=?$row['cat_name'];
$arr[$idx]['add_time']?=?local_date($GLOBALS['_CFG']['date_format'],?$row['add_time']);
$arr[$idx]['url']?=?$row['open_type']?!=?1??
build_uri('article',?array('aid'?=>?$row['article_id']),?$row['title'])?:?trim($row['file_url']);
$arr[$idx]['cat_url']?=?build_uri('article_cat',?array('acid'?=>?$row['cat_id']));
}
return?$arr;
}
<p>3、在要調用index.dwt模板的地方添加如下代碼(注意:調整上面設置中的文章列表,類(lèi)別ID為4): 查看全部
文章采集調用(免費開(kāi)源可商用的PHP萬(wàn)能建站程序-DiYunCMS(帝云CMS))
免費、開(kāi)源、可商用的PHP通用建站程序-帝云cms(帝云cms)
對于個(gè)性化的需求,需要在首頁(yè)或者其他模板頁(yè)面的指定分類(lèi)下調用文章,那么我們就可以實(shí)現:
網(wǎng)上很容易找到這個(gè)教程,但是有個(gè)問(wèn)題。調用的文章沒(méi)有按最新排序,或者發(fā)布時(shí)間越早排在前面,肯定是不合理的。已修復一流的資源網(wǎng)絡(luò )。這個(gè)問(wèn)題。
1、首先打開(kāi)index.php文件,找到如下代碼:
$smarty->assign('new_articles',?index_get_new_articles());?//?最新文章
在此行下方添加以下代碼:
$smarty->assign('class_articles_4',?index_get_class_articles(4,6));?//?分類(lèi)調用文章
4 是 文章 類(lèi)別 ID,6 是顯示的項目數。
如果調用的category很多,只需要復制粘貼上一行即可,但是文章category id和調用次數要根據自己的需要修改。
打開(kāi)ecshop根目錄下的includes/init.php文件,在最下方添加如下代碼,并添加到?>。
2、還在這個(gè)文件中嗎?> 在這之前添加以下函數:
/**
*?獲得指定欄目最新的文章列表。
*
*?@access?private
*?@return?array
*/
function?index_get_class_articles($cat_aid,?$cat_num)
{
$sql?=?"SELECT?article_id,?title,open_type,cat_id,file_url,description?FROM?"?.$GLOBALS['ecs']->table('article').?"?WHERE?cat_id?=?".$cat_aid."?and?is_open?=?1?ORDER?BY?add_time?DESC?LIMIT?"?.?$cat_num;
$res?=?$GLOBALS['db']->getAll($sql);
$arr?=?array();
foreach?($res?AS?$idx?=>?$row)
{
$arr[$idx]['id']?=?$row['article_id'];
$arr[$idx]['title']?=?$row['title'];
$arr[$idx]['file_url']?=?$row['file_url'];
$arr[$idx]['description']?=?$row['description'];
$arr[$idx]['short_title']?=?$GLOBALS['_CFG']['article_title_length']?>?0??
sub_str($row['title'],?$GLOBALS['_CFG']['article_title_length'])?:?$row['title'];
$arr[$idx]['cat_name']?=?$row['cat_name'];
$arr[$idx]['add_time']?=?local_date($GLOBALS['_CFG']['date_format'],?$row['add_time']);
$arr[$idx]['url']?=?$row['open_type']?!=?1??
build_uri('article',?array('aid'?=>?$row['article_id']),?$row['title'])?:?trim($row['file_url']);
$arr[$idx]['cat_url']?=?build_uri('article_cat',?array('acid'?=>?$row['cat_id']));
}
return?$arr;
}
<p>3、在要調用index.dwt模板的地方添加如下代碼(注意:調整上面設置中的文章列表,類(lèi)別ID為4):
文章采集調用()
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 128 次瀏覽 ? 2021-12-19 11:12
在Dedecms系統中,文章摘要(可以通過(guò)infolen或description相關(guān)標簽調用)設置為最多250個(gè)字符。設置上限的主要目的是減少數據庫的冗余,保證網(wǎng)站良好的性能。所以,如果不給profile的內容設置上限,顯然是不合理的。但是,如果您可以自由控制此上限,則會(huì )對網(wǎng)頁(yè)內容的布局產(chǎn)生積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,經(jīng)常需要對文章摘要進(jìn)行列表頁(yè)面調用。如果文章摘要中的字數能夠得到有效控制,那么頁(yè)面布局就可以變得非常靈活。
一、使用infolen限制調用文章描述詞的數量,如下標簽所示:
{dede:arclist row="1" infolen='170'}
[字段:信息/]...
{/dede:arclist}
上面的infolen='170'表示調用170字節的文章描述
二、使用 [field:description function='cn_substr(@me,250)'/] 代替 [field:info/] 標簽,其中 250 是字節限制,您可以將其用作多字隨你改,注意這里的250是一個(gè)字節,一個(gè)字等于2個(gè)字節,也就是這里調用了125個(gè)字。
在Dedecms中,調用列表頁(yè)文章匯總的主要方法有:
1:[字段:信息/]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me,字符數)"/]
1、的第二種方法是直接調用文章的summary。在調用的單詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}{/dede :arclist},設置調用摘要中的字符數(向上到系統設置的250));如果使用[field:description /],則直接使用后臺設置的摘要字符上限。很明顯,這兩種方法都非常被動(dòng),靈活性太差。
第四種方法3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在不修改文章抽象內容字符上限的情況下,這四種方法區別不大。不過(guò)下面我們來(lái)說(shuō)說(shuō)如何修改這個(gè)上限來(lái)體現方法的重要性[field:description function="cn_substr(@me,number of characters)"/]。
在dedecms中,與文章的摘要相關(guān)的php文件主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
//
在添加頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,$cfg_autot_description);
這句話(huà)實(shí)現了
[field:description function="cn_substr(@me,字符數)"/]
此功能。因為這個(gè)語(yǔ)句確實(shí)有利于頁(yè)面布局,所以我們在實(shí)驗中沒(méi)有修改。
在編輯頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,250);
這句話(huà)出現了熟悉的字符數“250”,這是系統設置的文章抽象字符數的上限。如果是gbk編碼,顯示125個(gè)字。如果是utf-8編碼,則是81個(gè)字符。很明顯,我們要突破文章抽象字符的上限,必須要拿下。是的,在這里您可以將“250”修改為其他值,例如“500”。這里不建議設置太高。一是不需要在列表頁(yè)面顯示太多內容。最好直接用body來(lái)顯示太多的內容。一是避免數據庫冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面找到“if($dsize>250) $dsize = 250;”這句話(huà),限制了后臺可以自動(dòng)獲取的字符數,這里修改“250”到“500”是的,也就是和之前修改的字符數一樣。如果你確認你的每個(gè)文章都是手動(dòng)添加的,如果手動(dòng)完成就不需要修改這個(gè)文件了摘要采集,自動(dòng)摘要采集主要是為大量文章和采集準備的。
最后登錄后臺,在系統-系統基本參數-其他選項中,可以將自動(dòng)匯總長(cháng)度改為500,與之前修改的字符數相同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid='' row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為網(wǎng)頁(yè)布局提供了更廣闊的空間。
轉載于: 查看全部
文章采集調用()
在Dedecms系統中,文章摘要(可以通過(guò)infolen或description相關(guān)標簽調用)設置為最多250個(gè)字符。設置上限的主要目的是減少數據庫的冗余,保證網(wǎng)站良好的性能。所以,如果不給profile的內容設置上限,顯然是不合理的。但是,如果您可以自由控制此上限,則會(huì )對網(wǎng)頁(yè)內容的布局產(chǎn)生積極的影響。在網(wǎng)頁(yè)設計過(guò)程中,經(jīng)常需要對文章摘要進(jìn)行列表頁(yè)面調用。如果文章摘要中的字數能夠得到有效控制,那么頁(yè)面布局就可以變得非常靈活。
一、使用infolen限制調用文章描述詞的數量,如下標簽所示:
{dede:arclist row="1" infolen='170'}
[字段:信息/]...
{/dede:arclist}
上面的infolen='170'表示調用170字節的文章描述
二、使用 [field:description function='cn_substr(@me,250)'/] 代替 [field:info/] 標簽,其中 250 是字節限制,您可以將其用作多字隨你改,注意這里的250是一個(gè)字節,一個(gè)字等于2個(gè)字節,也就是這里調用了125個(gè)字。
在Dedecms中,調用列表頁(yè)文章匯總的主要方法有:
1:[字段:信息/]
2:[字段:描述/]
3: [field:info function="cn_substr(@me, 字符數)"/]
4: [field:description function="cn_substr(@me,字符數)"/]
1、的第二種方法是直接調用文章的summary。在調用的單詞數方面,使用[field:info /]時(shí),可以使用{dede:arclist infolen=''}{/dede :arclist},設置調用摘要中的字符數(向上到系統設置的250));如果使用[field:description /],則直接使用后臺設置的摘要字符上限。很明顯,這兩種方法都非常被動(dòng),靈活性太差。
第四種方法3、通過(guò)函數函數實(shí)現對文章摘要顯示字符的靈活調整。當然,在不修改文章抽象內容字符上限的情況下,這四種方法區別不大。不過(guò)下面我們來(lái)說(shuō)說(shuō)如何修改這個(gè)上限來(lái)體現方法的重要性[field:description function="cn_substr(@me,number of characters)"/]。
在dedecms中,與文章的摘要相關(guān)的php文件主要有:
/dede/archives_add.php
/dede/archives_edit.php
/dede/article_add.php
/dede/article_edit.php
/dede/article_description_main.php
//
在添加頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,$cfg_autot_description);
這句話(huà)實(shí)現了
[field:description function="cn_substr(@me,字符數)"/]
此功能。因為這個(gè)語(yǔ)句確實(shí)有利于頁(yè)面布局,所以我們在實(shí)驗中沒(méi)有修改。
在編輯頁(yè)面上,有一句話(huà):
$description = cn_substrR($description,250);
這句話(huà)出現了熟悉的字符數“250”,這是系統設置的文章抽象字符數的上限。如果是gbk編碼,顯示125個(gè)字。如果是utf-8編碼,則是81個(gè)字符。很明顯,我們要突破文章抽象字符的上限,必須要拿下。是的,在這里您可以將“250”修改為其他值,例如“500”。這里不建議設置太高。一是不需要在列表頁(yè)面顯示太多內容。最好直接用body來(lái)顯示太多的內容。一是避免數據庫冗余。
完成以上修改還不夠,還需要修改article_description_main.php
在article_description_main.php頁(yè)面找到“if($dsize>250) $dsize = 250;”這句話(huà),限制了后臺可以自動(dòng)獲取的字符數,這里修改“250”到“500”是的,也就是和之前修改的字符數一樣。如果你確認你的每個(gè)文章都是手動(dòng)添加的,如果手動(dòng)完成就不需要修改這個(gè)文件了摘要采集,自動(dòng)摘要采集主要是為大量文章和采集準備的。
最后登錄后臺,在系統-系統基本參數-其他選項中,可以將自動(dòng)匯總長(cháng)度改為500,與之前修改的字符數相同。
完成以上修改后,我們就可以進(jìn)入頻道列表頁(yè)面,通過(guò)標簽調用。樣本標簽如下:
{dede:list typeid='' row='5' titlelen='100' orderby='new' pagesize='5'}
[字段:標題/]
[field:description function='cn_substr(@me,500)'/]...
{/dede:list}
通過(guò)上述方法,我們實(shí)現了被調用的文章抽象字符為500個(gè)字符,徹底突破了文章抽象250個(gè)字符的系統限制,為網(wǎng)頁(yè)布局提供了更廣闊的空間。
轉載于:
文章采集調用(美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,最終結果還沒(méi)有出來(lái))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 162 次瀏覽 ? 2021-12-16 21:04
嗯,不是失敗,只是記錄了爬蟲(chóng)分析的過(guò)程采集,最終結果還沒(méi)出來(lái)。
簡(jiǎn)單描述一下美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,結果不理想,可以通過(guò)調用JS實(shí)現。
一開(kāi)始,我直接選擇了美團的網(wǎng)頁(yè)版,選擇一個(gè)地方,進(jìn)入外賣(mài)商家列表。
這時(shí)候直接開(kāi)始寫(xiě)JAVA Jsoup代碼,把所有的請求頭和請求參數都放到請求的代碼中,結果只有一個(gè)返回:
{"數據":{"customer_ip":"61.135.15.2"},"code":200100,"msg":""}
也就是說(shuō),沒(méi)有得到任何數據,此時(shí)我也不知道接下來(lái)要做什么。于是在網(wǎng)上搜索了美團外賣(mài)爬蟲(chóng)。這里有一點(diǎn),如果你是美團商戶(hù)采集,就是那種可以遍歷全網(wǎng)的??梢垣@得該商家數據。但是如果是外賣(mài),就得單獨做采集。
當然,在網(wǎng)頁(yè)采集的不利情況下,我也查了美團APP的外賣(mài)鏈接:參數太多了,啟動(dòng)不了,然后從網(wǎng)頁(yè)文章開(kāi)始搜索@>
終于找到一篇文章@>:這篇文章提供了一個(gè)思路。你可以先看看這個(gè)文章@>。
首先分析美團H5頁(yè)面上的數據
結合CSDN文章文章@>,也就是說(shuō)只要知道token的生成方法,然后通過(guò)參數調用這個(gè)方法來(lái)獲取token,當然這篇文章文章@>也有一點(diǎn)提示,但僅此而已,剛剛介紹了如何直接調用JS代碼。你仍然需要自己做才能獲得足夠的食物和衣服。
接下來(lái)我們應該分析一下token是如何產(chǎn)生的?我也在網(wǎng)上搜索了很多文章@>,也有一些提示。這是一個(gè)很長(cháng)的文章@>。不注意的話(huà)真的很糟糕。
這時(shí)候直接進(jìn)入H5頁(yè)面,先找到j(luò )s文件。我們不能直接使用文章中的js,因為有可能js已經(jīng)升級了,所以我們找最新版本的js文件。
這時(shí)候我已經(jīng)驗證了破解網(wǎng)上文章@>那篇文章所說(shuō)的內容,接下來(lái)我們在原h(huán)5頁(yè)面上搜索Rohr_Opt這個(gè)詞。
既然不一樣了,就得看看美團外賣(mài)頁(yè)面列表是怎么調用這個(gè)reload方法的,繼續搜索Rohr_Opt。因為是全局的,所以調用的時(shí)候會(huì )直接用這個(gè)名字來(lái)調用。注意此時(shí)的搜索不是在查看源碼中搜索,而是在調試頁(yè)面的源碼中搜索。畢竟,它現在處于運行時(shí)狀態(tài)。恭喜:
我們把紅框中的代碼復制一下,分析一下代碼結構,看看能出現什么樣的結果。
現在我們已經(jīng)確定了 t+p,用 test.html 測試一下:
到此為止,我們繼續觀(guān)察這個(gè)reload是怎么實(shí)現的,里面有什么,為什么同樣的參數刷新不同。打開(kāi)min.js文件,直接搜索reload:
這個(gè)時(shí)間戳就這樣一直存在,搜索沒(méi)有找到用處,作為一個(gè)對象的內部字段,它應該已經(jīng)被使用了。
分析完這個(gè),我們來(lái)測試一下JAVA調用JS的技術(shù)。但這部分事情還沒(méi)有弄清楚!如果有人修復它,請告訴我。復制一個(gè)簡(jiǎn)單的調用代碼:
參考鏈接 查看全部
文章采集調用(美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,最終結果還沒(méi)有出來(lái))
嗯,不是失敗,只是記錄了爬蟲(chóng)分析的過(guò)程采集,最終結果還沒(méi)出來(lái)。
簡(jiǎn)單描述一下美團外賣(mài)商家的爬蟲(chóng)分析過(guò)程,結果不理想,可以通過(guò)調用JS實(shí)現。
一開(kāi)始,我直接選擇了美團的網(wǎng)頁(yè)版,選擇一個(gè)地方,進(jìn)入外賣(mài)商家列表。
這時(shí)候直接開(kāi)始寫(xiě)JAVA Jsoup代碼,把所有的請求頭和請求參數都放到請求的代碼中,結果只有一個(gè)返回:
{"數據":{"customer_ip":"61.135.15.2"},"code":200100,"msg":""}
也就是說(shuō),沒(méi)有得到任何數據,此時(shí)我也不知道接下來(lái)要做什么。于是在網(wǎng)上搜索了美團外賣(mài)爬蟲(chóng)。這里有一點(diǎn),如果你是美團商戶(hù)采集,就是那種可以遍歷全網(wǎng)的??梢垣@得該商家數據。但是如果是外賣(mài),就得單獨做采集。
當然,在網(wǎng)頁(yè)采集的不利情況下,我也查了美團APP的外賣(mài)鏈接:參數太多了,啟動(dòng)不了,然后從網(wǎng)頁(yè)文章開(kāi)始搜索@>
終于找到一篇文章@>:這篇文章提供了一個(gè)思路。你可以先看看這個(gè)文章@>。
首先分析美團H5頁(yè)面上的數據
結合CSDN文章文章@>,也就是說(shuō)只要知道token的生成方法,然后通過(guò)參數調用這個(gè)方法來(lái)獲取token,當然這篇文章文章@>也有一點(diǎn)提示,但僅此而已,剛剛介紹了如何直接調用JS代碼。你仍然需要自己做才能獲得足夠的食物和衣服。
接下來(lái)我們應該分析一下token是如何產(chǎn)生的?我也在網(wǎng)上搜索了很多文章@>,也有一些提示。這是一個(gè)很長(cháng)的文章@>。不注意的話(huà)真的很糟糕。
這時(shí)候直接進(jìn)入H5頁(yè)面,先找到j(luò )s文件。我們不能直接使用文章中的js,因為有可能js已經(jīng)升級了,所以我們找最新版本的js文件。
這時(shí)候我已經(jīng)驗證了破解網(wǎng)上文章@>那篇文章所說(shuō)的內容,接下來(lái)我們在原h(huán)5頁(yè)面上搜索Rohr_Opt這個(gè)詞。
既然不一樣了,就得看看美團外賣(mài)頁(yè)面列表是怎么調用這個(gè)reload方法的,繼續搜索Rohr_Opt。因為是全局的,所以調用的時(shí)候會(huì )直接用這個(gè)名字來(lái)調用。注意此時(shí)的搜索不是在查看源碼中搜索,而是在調試頁(yè)面的源碼中搜索。畢竟,它現在處于運行時(shí)狀態(tài)。恭喜:
我們把紅框中的代碼復制一下,分析一下代碼結構,看看能出現什么樣的結果。
現在我們已經(jīng)確定了 t+p,用 test.html 測試一下:
到此為止,我們繼續觀(guān)察這個(gè)reload是怎么實(shí)現的,里面有什么,為什么同樣的參數刷新不同。打開(kāi)min.js文件,直接搜索reload:
這個(gè)時(shí)間戳就這樣一直存在,搜索沒(méi)有找到用處,作為一個(gè)對象的內部字段,它應該已經(jīng)被使用了。
分析完這個(gè),我們來(lái)測試一下JAVA調用JS的技術(shù)。但這部分事情還沒(méi)有弄清楚!如果有人修復它,請告訴我。復制一個(gè)簡(jiǎn)單的調用代碼:
參考鏈接


