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

正則表達式

正則表達式

想入門(mén)爬蟲(chóng)?那你就必須學(xué)好正則!爬蟲(chóng)入門(mén)和正則表達式超全合輯

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 336 次瀏覽 ? 2020-06-30 08:02 ? 來(lái)自相關(guān)話(huà)題

  
  urllib.request.urlopen(url)官方文檔返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又用到的read()方法;返回數據;這個(gè)函數返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又有各類(lèi)方式, 比如我們用到的read()方法;如果你也是編程的學(xué)習者或則早已學(xué)會(huì )了的編程者!小編這兒有個(gè)群:103456743!大家可以加下,里面布滿(mǎn)了全國各地的學(xué)習者!為你們提供一個(gè)交流平臺,不管平常有遇到哪些BUG或則學(xué)習過(guò)程中卡殼,找不到人替你解決?那么就進(jìn)來(lái)吧,里面熱心的小伙伴還是十分多的,管理也是很好的,有哪些問(wèn)題,他假如有時(shí)間都能給你們解決,我認為是一個(gè)特別不錯的交流平臺,沒(méi)事也可以和你們扯扯公司的事中學(xué)發(fā)生的軼事,群文件早已上傳了很多G的資料,PDF,視頻 安裝工具,安裝教程都是有的,為了你們的學(xué)習能更進(jìn)一步!也為了你們能愉快的交流,討論學(xué)術(shù)問(wèn)題!所以你還在等哪些呢?好了馬上給你們帶來(lái)正文!
  
  
  data是一個(gè)字典, 然后通過(guò)urllib.parse.urlencode()來(lái)將data轉換為 ‘word=one+peace’的字符串, 最后和url合并為full_url
  python正則表達式介紹:
  隊列 介紹
  在爬蟲(chóng)的程序中用到了廣度優(yōu)先級算法,該算法用到了數據結構,當然你用list也可以實(shí)現隊列,但是效率不高?,F在在此處介紹下:
  在容器中有隊列:collection.deque
  
  集合介紹:
  在爬蟲(chóng)程序中, 為了不重復爬這些早已爬過(guò)的網(wǎng)站, 我們須要把爬過(guò)的頁(yè)面的url放進(jìn)集合中, 在每一次要爬某一個(gè)url之前, 先瞧瞧集合上面是否早已存在. 如果早已存在, 我們就跳過(guò)這個(gè)url; 如果不存在, 我們先把url裝入集合中, 然后再去爬這個(gè)頁(yè)面.
  Python 還 包 含 了 一 個(gè) 數 據 類(lèi) 型—— set ( 集 合 ) 。 集 合 是 一 個(gè) 無(wú) 序 不 重 復 元素 的 集 。 基 本 功 能 包 括 關(guān) 系 測 試 和 消 除 重 復 元 素 。 集 合 對 象 還 支 持 union( 聯(lián)
  合),intersection(交),difference(差)和 sysmmetric difference(對稱(chēng)差集)等物理運算。
  大括號或 set() 函數可以拿來(lái)創(chuàng )建集合。 注意:想要創(chuàng )建空集合,你必須使用set() 而不是 {} 。{}用于創(chuàng )建空字典;
  集合的創(chuàng )建演示如下:
  
  正則表達式
  在爬蟲(chóng)時(shí)搜集回去的通常是字符流,我們要從中選購出url就要求有簡(jiǎn)單的字符串處理能力,而用正則表達式可以輕松的完成這一任務(wù);
  正則表達式的步驟:1,正則表達式的編譯 2,正則表達式匹配字符串 3,結果的處理
  下圖列舉了正則表達式的句型:
  
  在pytho中使用正則表達式網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,需要引入re模塊;下面介紹下該模塊中的一些技巧;
  pile和match
  re模塊中compile用于生成pattern的對象,再通過(guò)調用pattern實(shí)例的match方式處理文本最終獲得match實(shí)例;通過(guò)使用match獲得信息;
  
  
  
  pattern:
  Pattern對象是一個(gè)編譯好的正則表達式,通過(guò)Pattern提供的一系列方式可以對文本進(jìn)行匹配查找。
  Pattern不能直接實(shí)例化,必須使用pile()進(jìn)行構造。
  
  2.re.match(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.match方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  
  
  
  re.search方式
  re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。
  函數句型:
  re.search(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.search方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  實(shí)例一:
  
  
  search和match區別:
  re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個(gè)字符串網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,直到找到一個(gè)匹配。
  python爬蟲(chóng)小試牛刀
  利用python抓取頁(yè)面中所有的http合同的鏈接,并遞歸抓取子頁(yè)面的鏈接。使用了集合和隊列;此去爬的是我的網(wǎng)站,第一版好多bug;
  代碼如下:
  
  
  
  那么你學(xué)會(huì )了嗎? 查看全部

  
  urllib.request.urlopen(url)官方文檔返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又用到的read()方法;返回數據;這個(gè)函數返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又有各類(lèi)方式, 比如我們用到的read()方法;如果你也是編程的學(xué)習者或則早已學(xué)會(huì )了的編程者!小編這兒有個(gè)群:103456743!大家可以加下,里面布滿(mǎn)了全國各地的學(xué)習者!為你們提供一個(gè)交流平臺,不管平常有遇到哪些BUG或則學(xué)習過(guò)程中卡殼,找不到人替你解決?那么就進(jìn)來(lái)吧,里面熱心的小伙伴還是十分多的,管理也是很好的,有哪些問(wèn)題,他假如有時(shí)間都能給你們解決,我認為是一個(gè)特別不錯的交流平臺,沒(méi)事也可以和你們扯扯公司的事中學(xué)發(fā)生的軼事,群文件早已上傳了很多G的資料,PDF,視頻 安裝工具,安裝教程都是有的,為了你們的學(xué)習能更進(jìn)一步!也為了你們能愉快的交流,討論學(xué)術(shù)問(wèn)題!所以你還在等哪些呢?好了馬上給你們帶來(lái)正文!
  
  
  data是一個(gè)字典, 然后通過(guò)urllib.parse.urlencode()來(lái)將data轉換為 ‘word=one+peace’的字符串, 最后和url合并為full_url
  python正則表達式介紹:
  隊列 介紹
  在爬蟲(chóng)的程序中用到了廣度優(yōu)先級算法,該算法用到了數據結構,當然你用list也可以實(shí)現隊列,但是效率不高?,F在在此處介紹下:
  在容器中有隊列:collection.deque
  
  集合介紹:
  在爬蟲(chóng)程序中, 為了不重復爬這些早已爬過(guò)的網(wǎng)站, 我們須要把爬過(guò)的頁(yè)面的url放進(jìn)集合中, 在每一次要爬某一個(gè)url之前, 先瞧瞧集合上面是否早已存在. 如果早已存在, 我們就跳過(guò)這個(gè)url; 如果不存在, 我們先把url裝入集合中, 然后再去爬這個(gè)頁(yè)面.
  Python 還 包 含 了 一 個(gè) 數 據 類(lèi) 型—— set ( 集 合 ) 。 集 合 是 一 個(gè) 無(wú) 序 不 重 復 元素 的 集 。 基 本 功 能 包 括 關(guān) 系 測 試 和 消 除 重 復 元 素 。 集 合 對 象 還 支 持 union( 聯(lián)
  合),intersection(交),difference(差)和 sysmmetric difference(對稱(chēng)差集)等物理運算。
  大括號或 set() 函數可以拿來(lái)創(chuàng )建集合。 注意:想要創(chuàng )建空集合,你必須使用set() 而不是 {} 。{}用于創(chuàng )建空字典;
  集合的創(chuàng )建演示如下:
  
  正則表達式
  在爬蟲(chóng)時(shí)搜集回去的通常是字符流,我們要從中選購出url就要求有簡(jiǎn)單的字符串處理能力,而用正則表達式可以輕松的完成這一任務(wù);
  正則表達式的步驟:1,正則表達式的編譯 2,正則表達式匹配字符串 3,結果的處理
  下圖列舉了正則表達式的句型:
  
  在pytho中使用正則表達式網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,需要引入re模塊;下面介紹下該模塊中的一些技巧;
  pile和match
  re模塊中compile用于生成pattern的對象,再通過(guò)調用pattern實(shí)例的match方式處理文本最終獲得match實(shí)例;通過(guò)使用match獲得信息;
  
  
  
  pattern:
  Pattern對象是一個(gè)編譯好的正則表達式,通過(guò)Pattern提供的一系列方式可以對文本進(jìn)行匹配查找。
  Pattern不能直接實(shí)例化,必須使用pile()進(jìn)行構造。
  
  2.re.match(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.match方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  
  
  
  re.search方式
  re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。
  函數句型:
  re.search(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.search方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  實(shí)例一:
  
  
  search和match區別:
  re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個(gè)字符串網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,直到找到一個(gè)匹配。
  python爬蟲(chóng)小試牛刀
  利用python抓取頁(yè)面中所有的http合同的鏈接,并遞歸抓取子頁(yè)面的鏈接。使用了集合和隊列;此去爬的是我的網(wǎng)站,第一版好多bug;
  代碼如下:
  
  
  
  那么你學(xué)會(huì )了嗎?

Ipidea丨網(wǎng)絡(luò )爬蟲(chóng)正則表達式的使用

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 401 次瀏覽 ? 2020-06-17 08:00 ? 來(lái)自相關(guān)話(huà)題

  
  ## 網(wǎng)絡(luò )爬蟲(chóng)正則表達式的使用
  ---
  我們在處理網(wǎng)頁(yè)文本內容時(shí)有時(shí)會(huì )碰到一些特殊的情況網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,或者須要匹配某類(lèi)字符串方式,通常都會(huì )用到正則表達式。許多程序語(yǔ)言都支持使用正則表達式,python中正則表達式可以實(shí)現字符串的匹配、檢索和替換等功能,是一個(gè)比較強悍的工具。
  ### 1.正則表達式句型
  Python中實(shí)現正則表達式功能一般使用re模塊,可以實(shí)現對文本字符串的匹配,檢索和替換,但不僅引入正則模塊網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,還須要把握正則表達式字符和基本句型,才能正確使用python進(jìn)行正則表達式提取。
  部分常用的正則表達式:
  | 字符 | 功能 |
  | :--: | :--: |
  | \ |轉義字符,標記下一個(gè)字符為特殊字符|
  | ^ |匹配輸入字符串的開(kāi)始位置|
  | $ |匹配輸入字符串的結束位置|
  | * |匹配上面的子表達式零次或多次 |
  | + |匹配上面的子表達式一次或多次 |
  | ? |匹配上面的子表達式零次或一次 |
  | . |匹配除“\n”之外的任何單個(gè)字符 |
  | () | 匹配括弧里的表達式 |
  | \d | 匹配一個(gè)數字字符 |
  | \D | 匹配一個(gè)非數字字符 |
  | \w |匹配包括頓號的任何詞組字符|
  | \W |匹配任何非詞組字符|
  |{n}|n是一個(gè)非負整數,匹配確定的n次|
  |{n,m}|m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次|
  |[x,y,z]| 匹配一組字符集 |
  | \^[x,y,z] | 匹配不在[]中的字符 |
  | a\|b | 匹配a或b | 查看全部

  
  ## 網(wǎng)絡(luò )爬蟲(chóng)正則表達式的使用
  ---
  我們在處理網(wǎng)頁(yè)文本內容時(shí)有時(shí)會(huì )碰到一些特殊的情況網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,或者須要匹配某類(lèi)字符串方式,通常都會(huì )用到正則表達式。許多程序語(yǔ)言都支持使用正則表達式,python中正則表達式可以實(shí)現字符串的匹配、檢索和替換等功能,是一個(gè)比較強悍的工具。
  ### 1.正則表達式句型
  Python中實(shí)現正則表達式功能一般使用re模塊,可以實(shí)現對文本字符串的匹配,檢索和替換,但不僅引入正則模塊網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,還須要把握正則表達式字符和基本句型,才能正確使用python進(jìn)行正則表達式提取。
  部分常用的正則表達式:
  | 字符 | 功能 |
  | :--: | :--: |
  | \ |轉義字符,標記下一個(gè)字符為特殊字符|
  | ^ |匹配輸入字符串的開(kāi)始位置|
  | $ |匹配輸入字符串的結束位置|
  | * |匹配上面的子表達式零次或多次 |
  | + |匹配上面的子表達式一次或多次 |
  | ? |匹配上面的子表達式零次或一次 |
  | . |匹配除“\n”之外的任何單個(gè)字符 |
  | () | 匹配括弧里的表達式 |
  | \d | 匹配一個(gè)數字字符 |
  | \D | 匹配一個(gè)非數字字符 |
  | \w |匹配包括頓號的任何詞組字符|
  | \W |匹配任何非詞組字符|
  |{n}|n是一個(gè)非負整數,匹配確定的n次|
  |{n,m}|m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次|
  |[x,y,z]| 匹配一組字符集 |
  | \^[x,y,z] | 匹配不在[]中的字符 |
  | a\|b | 匹配a或b |

網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介(5)— 鏈接爬蟲(chóng)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 372 次瀏覽 ? 2020-05-31 08:01 ? 來(lái)自相關(guān)話(huà)題

  1.5.5 鏈接爬蟲(chóng)
  到目前為止,我們早已借助示例網(wǎng)站的結構特性實(shí)現了兩個(gè)簡(jiǎn)單爬蟲(chóng),用于下載所有已發(fā)布的國家(或地區)頁(yè)面。只要這兩種技術(shù)可用,就應該使用它們進(jìn)行爬取,因為這兩種方式將須要下載的網(wǎng)頁(yè)數目降至最低。不過(guò),對于另一些網(wǎng)站爬蟲(chóng)社區,我們須要使爬蟲(chóng)表現得更象普通用戶(hù),跟蹤鏈接,訪(fǎng)問(wèn)感興趣的內容。
  通過(guò)跟蹤每位鏈接的方法,我們可以很容易地下載整個(gè)網(wǎng)站的頁(yè)面。但是,這種方式可能會(huì )下載好多并不需要的網(wǎng)頁(yè)。例如,我們想要從一個(gè)在線(xiàn)峰會(huì )中抓取用戶(hù)帳號詳情頁(yè),那么此時(shí)我們只須要下載帳號頁(yè),而不需要下載討論貼的頁(yè)面。本章使用的鏈接爬蟲(chóng)將使用正則表達式來(lái)確定應該下載什么頁(yè)面。下面是這段代碼的初始版本。
  import re
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if html is not None:
continue
# filter for links matching our regular expression
for link in get_links(html):
if re.match(link_regex, link):
crawl_queue.append(link)
def get_links(html):
""" Return a list of links from html
"""
# a regular expression to extract all links from the webpage
webpage_regex = re.compile("""<a[^>]+href=["'](.*?)["']""",
re.IGNORECASE)
# list of all links from the webpage
return webpage_regex.findall(html)
  要運行這段代碼,只須要調用
  link_crawler
  函數,并傳入兩個(gè)參數:
  要爬取的網(wǎng)站
  URL
  以及用于匹配你想跟蹤的鏈
  接的正則表達式。對于示例網(wǎng)
  站來(lái)說(shuō),我們想要爬取的是國家(或地區
 ?。┝斜硭饕?yè)和國家(或地區)頁(yè)面。
  我們查看站點(diǎn)可以獲知索引頁(yè)鏈接遵守如下格式:
  國家(或地區)頁(yè)遵守如下格式:
  因此爬蟲(chóng)社區,我們可以用/(index|view)/這個(gè)簡(jiǎn)單的正則表達式來(lái)匹配這兩類(lèi)網(wǎng)頁(yè)。當爬蟲(chóng)使用這種輸入參數運行時(shí)會(huì )發(fā)生哪些呢?你會(huì )得到如下所示的下載錯誤。
  >>> link_crawler('http://example.python-scraping.com', '/(index|view)/')
Downloading: http://example.python-scraping.com
Downloading: /index/1
Traceback (most recent call last):
...
ValueError: unknown url type: /index/1
  正則表達式是從字符串中抽取信息的非常好的工具,因此我推薦每名程序員都應該“學(xué)會(huì )怎樣閱讀和編撰一些正則表達式”。即便這么,它們常常會(huì )特別脆弱,容易失效。我們將在本書(shū)后續部份介紹更先進(jìn)的抽取鏈接和辨識頁(yè)面的形式??梢钥闯?,問(wèn)題出在下載/index/1時(shí),該鏈接只有網(wǎng)頁(yè)的路徑部份,而沒(méi)有合同和服務(wù)器部份,也就是說(shuō)這是一個(gè)相對鏈接。由于瀏覽器曉得你正在瀏覽那個(gè)網(wǎng)頁(yè),并且還能采取必要步驟處理那些鏈接,因此在瀏覽器瀏覽時(shí),相對鏈接是才能正常工作的。但是,urllib并沒(méi)有上下文。為了使urllib才能定位網(wǎng)頁(yè),我們須要將鏈接轉換為絕對鏈接的方式,以便包含定位網(wǎng)頁(yè)的所有細節。如你所愿,Python的urllib中有一個(gè)模塊可以拿來(lái)實(shí)現該功能,該模塊名為parse。下面是link_crawler的改進(jìn)版本,使用了urljoin方式來(lái)創(chuàng )建絕對路徑。
  from urllib.parse import urljoin
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
crawl_queue.append(abs_link)
  當你運行這段代碼時(shí),會(huì )聽(tīng)到似乎下載了匹配的網(wǎng)頁(yè),但是同樣的地點(diǎn)總是會(huì )被不斷下載到。產(chǎn)生該行為的誘因是那些地點(diǎn)互相之間存在鏈接。比如,澳大利亞鏈接到了南極洲,而南極洲又鏈接回了德國,此時(shí)爬蟲(chóng)都會(huì )繼續將這種URL裝入隊列,永遠不會(huì )抵達隊列尾部
  。要想避開(kāi)重復爬取相同的鏈接,我們須要記錄什么鏈接早已被爬取過(guò)。下面是更改后的link_crawler函數,具備了儲存已發(fā)覺(jué)URL的功能,可以避免重復下載。
  def link_crawler(start_url, link_regex):
crawl_queue = [start_url]
# keep track which URL's have seen before
seen = set(crawl_queue)
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
# check if link matches expected regex
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
# check if have already seen this link
if abs_link not in seen:
seen.add(abs_link)
crawl_queue.append(abs_link)
  當運行該腳本時(shí),它會(huì )爬取所有地點(diǎn),并且還能如期停止。最終,我們得到了一個(gè)可用的鏈接爬蟲(chóng)! 查看全部

  1.5.5 鏈接爬蟲(chóng)
  到目前為止,我們早已借助示例網(wǎng)站的結構特性實(shí)現了兩個(gè)簡(jiǎn)單爬蟲(chóng),用于下載所有已發(fā)布的國家(或地區)頁(yè)面。只要這兩種技術(shù)可用,就應該使用它們進(jìn)行爬取,因為這兩種方式將須要下載的網(wǎng)頁(yè)數目降至最低。不過(guò),對于另一些網(wǎng)站爬蟲(chóng)社區,我們須要使爬蟲(chóng)表現得更象普通用戶(hù),跟蹤鏈接,訪(fǎng)問(wèn)感興趣的內容。
  通過(guò)跟蹤每位鏈接的方法,我們可以很容易地下載整個(gè)網(wǎng)站的頁(yè)面。但是,這種方式可能會(huì )下載好多并不需要的網(wǎng)頁(yè)。例如,我們想要從一個(gè)在線(xiàn)峰會(huì )中抓取用戶(hù)帳號詳情頁(yè),那么此時(shí)我們只須要下載帳號頁(yè),而不需要下載討論貼的頁(yè)面。本章使用的鏈接爬蟲(chóng)將使用正則表達式來(lái)確定應該下載什么頁(yè)面。下面是這段代碼的初始版本。
  import re
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if html is not None:
continue
# filter for links matching our regular expression
for link in get_links(html):
if re.match(link_regex, link):
crawl_queue.append(link)
def get_links(html):
""" Return a list of links from html
"""
# a regular expression to extract all links from the webpage
webpage_regex = re.compile("""<a[^>]+href=["'](.*?)["']""",
re.IGNORECASE)
# list of all links from the webpage
return webpage_regex.findall(html)
  要運行這段代碼,只須要調用
  link_crawler
  函數,并傳入兩個(gè)參數:
  要爬取的網(wǎng)站
  URL
  以及用于匹配你想跟蹤的鏈
  接的正則表達式。對于示例網(wǎng)
  站來(lái)說(shuō),我們想要爬取的是國家(或地區
 ?。┝斜硭饕?yè)和國家(或地區)頁(yè)面。
  我們查看站點(diǎn)可以獲知索引頁(yè)鏈接遵守如下格式:
  國家(或地區)頁(yè)遵守如下格式:
  因此爬蟲(chóng)社區,我們可以用/(index|view)/這個(gè)簡(jiǎn)單的正則表達式來(lái)匹配這兩類(lèi)網(wǎng)頁(yè)。當爬蟲(chóng)使用這種輸入參數運行時(shí)會(huì )發(fā)生哪些呢?你會(huì )得到如下所示的下載錯誤。
  >>> link_crawler('http://example.python-scraping.com', '/(index|view)/')
Downloading: http://example.python-scraping.com
Downloading: /index/1
Traceback (most recent call last):
...
ValueError: unknown url type: /index/1
  正則表達式是從字符串中抽取信息的非常好的工具,因此我推薦每名程序員都應該“學(xué)會(huì )怎樣閱讀和編撰一些正則表達式”。即便這么,它們常常會(huì )特別脆弱,容易失效。我們將在本書(shū)后續部份介紹更先進(jìn)的抽取鏈接和辨識頁(yè)面的形式??梢钥闯?,問(wèn)題出在下載/index/1時(shí),該鏈接只有網(wǎng)頁(yè)的路徑部份,而沒(méi)有合同和服務(wù)器部份,也就是說(shuō)這是一個(gè)相對鏈接。由于瀏覽器曉得你正在瀏覽那個(gè)網(wǎng)頁(yè),并且還能采取必要步驟處理那些鏈接,因此在瀏覽器瀏覽時(shí),相對鏈接是才能正常工作的。但是,urllib并沒(méi)有上下文。為了使urllib才能定位網(wǎng)頁(yè),我們須要將鏈接轉換為絕對鏈接的方式,以便包含定位網(wǎng)頁(yè)的所有細節。如你所愿,Python的urllib中有一個(gè)模塊可以拿來(lái)實(shí)現該功能,該模塊名為parse。下面是link_crawler的改進(jìn)版本,使用了urljoin方式來(lái)創(chuàng )建絕對路徑。
  from urllib.parse import urljoin
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
crawl_queue.append(abs_link)
  當你運行這段代碼時(shí),會(huì )聽(tīng)到似乎下載了匹配的網(wǎng)頁(yè),但是同樣的地點(diǎn)總是會(huì )被不斷下載到。產(chǎn)生該行為的誘因是那些地點(diǎn)互相之間存在鏈接。比如,澳大利亞鏈接到了南極洲,而南極洲又鏈接回了德國,此時(shí)爬蟲(chóng)都會(huì )繼續將這種URL裝入隊列,永遠不會(huì )抵達隊列尾部
  。要想避開(kāi)重復爬取相同的鏈接,我們須要記錄什么鏈接早已被爬取過(guò)。下面是更改后的link_crawler函數,具備了儲存已發(fā)覺(jué)URL的功能,可以避免重復下載。
  def link_crawler(start_url, link_regex):
crawl_queue = [start_url]
# keep track which URL's have seen before
seen = set(crawl_queue)
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
# check if link matches expected regex
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
# check if have already seen this link
if abs_link not in seen:
seen.add(abs_link)
crawl_queue.append(abs_link)
  當運行該腳本時(shí),它會(huì )爬取所有地點(diǎn),并且還能如期停止。最終,我們得到了一個(gè)可用的鏈接爬蟲(chóng)!

Python網(wǎng)絡(luò )爬蟲(chóng)四大選擇器(正則表達式、BS4、Xpath、CSS)總結

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 499 次瀏覽 ? 2020-05-12 08:01 ? 來(lái)自相關(guān)話(huà)題

  前幾天小編連續寫(xiě)了四篇關(guān)于Python選擇器的文章,分別用正則表達式、BeautifulSoup、Xpath、CSS選擇器分別抓取京東網(wǎng)的商品信息。今天小編來(lái)給你們總結一下這四個(gè)選擇器,讓你們愈發(fā)深刻的理解和熟悉Python選擇器。
  一、正則表達式
  正則表達式為我們提供了抓取數據的快捷方法。雖然該正則表達式更容易適應未來(lái)變化網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,但又存在無(wú)法構造、可讀性差的問(wèn)題。當在爬京東網(wǎng)的時(shí)侯,正則表達式如下圖所示:
  
  利用正則表達式實(shí)現對目標信息的精準采集
  此外 ,我們都曉得,網(wǎng)頁(yè)經(jīng)常會(huì )形成變更,導致網(wǎng)頁(yè)中會(huì )發(fā)生一些微小的布局變化時(shí),此時(shí)也會(huì )促使之前寫(xiě)好的正則表達式未能滿(mǎn)足需求,而且還不太好調試。當須要匹配的內容有很多的時(shí)侯,使用正則表達式提取目標信息會(huì )導致程序運行的速率減緩,需要消耗更多顯存。
  二、BeautifulSoup
  BeautifulSoup是一個(gè)十分流行的 Pyhon 模塊。該模塊可以解析網(wǎng)頁(yè),并提供定位內容的方便插口。通過(guò)'pip install beautifulsoup4'就可以實(shí)現該模塊的安裝了。
  
  利用美麗的湯去提取目標信息
  使用 BeautifulSoup的第一步是將己下載的 HTML 內容解析為 soup文檔。由 于大多數網(wǎng)頁(yè)都不具備良好的HTML 格式,因此BeautifulSoup須要對實(shí)際格式進(jìn)行確定。BeautifulSoup才能正確解析缺位的冒號并閉合標簽,此外都會(huì )添加<html >和<body>標簽讓其成為完整的HTML文檔。通常使用find() 和find_all()方法來(lái)定位我們須要的元素。
  如果你想了解BeautifulSoup全部方式和參數,可以查閱BeautifulSoup的官方文檔。雖然BeautifulSoup在代碼的理解上比正則表達式要復雜一些,但是其愈發(fā)容易構造和理解。
  三、Lxml
  Lxml模塊使用 C語(yǔ)言編撰,其解析速率比 BeautiflSoup更快,而且其安裝過(guò)程也更為復雜,在此小編就不贅言啦。XPath 使用路徑表達式在 XML 文檔中選定節點(diǎn)。節點(diǎn)是通過(guò)順著(zhù)路徑或則 step 來(lái)選定的。
  
  Xpath選擇器
  使用 lxml 模塊的第一步和BeautifulSoup一樣,也是將有可能不合法的HTML 解析為 統一格式。 雖然Lxml可以正確解析屬性?xún)蛇吶蔽坏拿疤柧W(wǎng)絡(luò )爬蟲(chóng) 正則表達式,并閉合標簽,不過(guò)該模塊沒(méi)有額外添加<html >和<body>標簽 。
  在線(xiàn)復制Xpath表達式可以很方便的復制Xpath表達式。但是通過(guò)該方式得到的Xpath表達式置于程序中通常不能用,而且長(cháng)的無(wú)法看。所以Xpath表達式通常還是要自己親自上手。
  四、CSS
  CSS選擇器表示選擇元素所使用 的模式。BeautifulSoup整合了CSS選擇器的句型和自身便捷使用API。在網(wǎng)路爬蟲(chóng)的開(kāi)發(fā)過(guò)程中,對于熟悉CSS選擇器句型的人,使用CSS選擇器是個(gè)十分便捷的方式。
  
  CSS選擇器
  下面是一些常用的選擇器示例。 查看全部

  前幾天小編連續寫(xiě)了四篇關(guān)于Python選擇器的文章,分別用正則表達式、BeautifulSoup、Xpath、CSS選擇器分別抓取京東網(wǎng)的商品信息。今天小編來(lái)給你們總結一下這四個(gè)選擇器,讓你們愈發(fā)深刻的理解和熟悉Python選擇器。
  一、正則表達式
  正則表達式為我們提供了抓取數據的快捷方法。雖然該正則表達式更容易適應未來(lái)變化網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,但又存在無(wú)法構造、可讀性差的問(wèn)題。當在爬京東網(wǎng)的時(shí)侯,正則表達式如下圖所示:
  
  利用正則表達式實(shí)現對目標信息的精準采集
  此外 ,我們都曉得,網(wǎng)頁(yè)經(jīng)常會(huì )形成變更,導致網(wǎng)頁(yè)中會(huì )發(fā)生一些微小的布局變化時(shí),此時(shí)也會(huì )促使之前寫(xiě)好的正則表達式未能滿(mǎn)足需求,而且還不太好調試。當須要匹配的內容有很多的時(shí)侯,使用正則表達式提取目標信息會(huì )導致程序運行的速率減緩,需要消耗更多顯存。
  二、BeautifulSoup
  BeautifulSoup是一個(gè)十分流行的 Pyhon 模塊。該模塊可以解析網(wǎng)頁(yè),并提供定位內容的方便插口。通過(guò)'pip install beautifulsoup4'就可以實(shí)現該模塊的安裝了。
  
  利用美麗的湯去提取目標信息
  使用 BeautifulSoup的第一步是將己下載的 HTML 內容解析為 soup文檔。由 于大多數網(wǎng)頁(yè)都不具備良好的HTML 格式,因此BeautifulSoup須要對實(shí)際格式進(jìn)行確定。BeautifulSoup才能正確解析缺位的冒號并閉合標簽,此外都會(huì )添加<html >和<body>標簽讓其成為完整的HTML文檔。通常使用find() 和find_all()方法來(lái)定位我們須要的元素。
  如果你想了解BeautifulSoup全部方式和參數,可以查閱BeautifulSoup的官方文檔。雖然BeautifulSoup在代碼的理解上比正則表達式要復雜一些,但是其愈發(fā)容易構造和理解。
  三、Lxml
  Lxml模塊使用 C語(yǔ)言編撰,其解析速率比 BeautiflSoup更快,而且其安裝過(guò)程也更為復雜,在此小編就不贅言啦。XPath 使用路徑表達式在 XML 文檔中選定節點(diǎn)。節點(diǎn)是通過(guò)順著(zhù)路徑或則 step 來(lái)選定的。
  
  Xpath選擇器
  使用 lxml 模塊的第一步和BeautifulSoup一樣,也是將有可能不合法的HTML 解析為 統一格式。 雖然Lxml可以正確解析屬性?xún)蛇吶蔽坏拿疤柧W(wǎng)絡(luò )爬蟲(chóng) 正則表達式,并閉合標簽,不過(guò)該模塊沒(méi)有額外添加<html >和<body>標簽 。
  在線(xiàn)復制Xpath表達式可以很方便的復制Xpath表達式。但是通過(guò)該方式得到的Xpath表達式置于程序中通常不能用,而且長(cháng)的無(wú)法看。所以Xpath表達式通常還是要自己親自上手。
  四、CSS
  CSS選擇器表示選擇元素所使用 的模式。BeautifulSoup整合了CSS選擇器的句型和自身便捷使用API。在網(wǎng)路爬蟲(chóng)的開(kāi)發(fā)過(guò)程中,對于熟悉CSS選擇器句型的人,使用CSS選擇器是個(gè)十分便捷的方式。
  
  CSS選擇器
  下面是一些常用的選擇器示例。

使用正則表達式實(shí)現網(wǎng)頁(yè)爬蟲(chóng)的思路解讀

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 339 次瀏覽 ? 2020-05-06 08:04 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據。
  思路:
  1.為模擬網(wǎng)頁(yè)爬蟲(chóng),我們可以如今我們的tomcat服務(wù)器端布署一個(gè)1.html網(wǎng)頁(yè)。(部署的步驟:在tomcat目錄的webapps目錄的ROOTS目錄下新建一個(gè)1.html。使用notepad++進(jìn)行編輯網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,編輯內容為:
  
 ?。?br />   2.使用URL與網(wǎng)頁(yè)構建聯(lián)系
  3.獲取輸入流,用于讀取網(wǎng)頁(yè)中的內容
  4.建立正則規則,因為這兒我們是爬去網(wǎng)頁(yè)中的郵箱信息網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,所以構建匹配 郵箱的正則表達式:String regex="\w+@\w+(\.\w+)+";
  5.將提取到的數據放在集合中。
  代碼:
  
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據
*
*
*/
public class RegexDemo {
public static void main(String args) throws Exception {

List<String> list=getMailByWeb();
for(String str:list){
System.out.println(str);
}

}
private static List<String> getMailByWeb() throws Exception {

//1.與網(wǎng)頁(yè)建立聯(lián)系。使用URL
String path="http://localhost:8080//1.html";//后面寫(xiě)雙斜杠是用于轉義
URL url=new URL(path);
//2.獲取輸入流
InputStream is=url.openStream();
//加緩沖
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//3.提取符合郵箱的數據
String regex="\\w+@\\w+(\\.\\w+)+";
//進(jìn)行匹配
//將正則規則封裝成對象
Pattern p=Pattern.compile(regex);
//將提取到的數據放到一個(gè)集合中
List<String> list=new ArrayList<String>();

String line=null;
while((line=br.readLine())!=null){
//匹配器
Matcher m=p.matcher(line);
while(m.find()){
//3.將符合規則的數據存儲到集合中
list.add(m.group());
}
}

return list;
}
}
  注意:在執行前須要先開(kāi)啟tomcat服務(wù)器
  運行結果:
  
  總結
  以上所述是小編給你們介紹的使用正則表達式實(shí)現網(wǎng)頁(yè)爬蟲(chóng)的思路解讀,希望對你們有所幫助,如果你們有任何疑惑請給我留言,小編會(huì )及時(shí)回復你們的。在此也特別謝謝你們對優(yōu)采云的支持! 查看全部
  網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據。
  思路:
  1.為模擬網(wǎng)頁(yè)爬蟲(chóng),我們可以如今我們的tomcat服務(wù)器端布署一個(gè)1.html網(wǎng)頁(yè)。(部署的步驟:在tomcat目錄的webapps目錄的ROOTS目錄下新建一個(gè)1.html。使用notepad++進(jìn)行編輯網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,編輯內容為:
  
 ?。?br />   2.使用URL與網(wǎng)頁(yè)構建聯(lián)系
  3.獲取輸入流,用于讀取網(wǎng)頁(yè)中的內容
  4.建立正則規則,因為這兒我們是爬去網(wǎng)頁(yè)中的郵箱信息網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,所以構建匹配 郵箱的正則表達式:String regex="\w+@\w+(\.\w+)+";
  5.將提取到的數據放在集合中。
  代碼:
  
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據
*
*
*/
public class RegexDemo {
public static void main(String args) throws Exception {

List<String> list=getMailByWeb();
for(String str:list){
System.out.println(str);
}

}
private static List<String> getMailByWeb() throws Exception {

//1.與網(wǎng)頁(yè)建立聯(lián)系。使用URL
String path="http://localhost:8080//1.html";//后面寫(xiě)雙斜杠是用于轉義
URL url=new URL(path);
//2.獲取輸入流
InputStream is=url.openStream();
//加緩沖
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//3.提取符合郵箱的數據
String regex="\\w+@\\w+(\\.\\w+)+";
//進(jìn)行匹配
//將正則規則封裝成對象
Pattern p=Pattern.compile(regex);
//將提取到的數據放到一個(gè)集合中
List<String> list=new ArrayList<String>();

String line=null;
while((line=br.readLine())!=null){
//匹配器
Matcher m=p.matcher(line);
while(m.find()){
//3.將符合規則的數據存儲到集合中
list.add(m.group());
}
}

return list;
}
}
  注意:在執行前須要先開(kāi)啟tomcat服務(wù)器
  運行結果:
  
  總結
  以上所述是小編給你們介紹的使用正則表達式實(shí)現網(wǎng)頁(yè)爬蟲(chóng)的思路解讀,希望對你們有所幫助,如果你們有任何疑惑請給我留言,小編會(huì )及時(shí)回復你們的。在此也特別謝謝你們對優(yōu)采云的支持!

phpcms跟dedecms比較

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 461 次瀏覽 ? 2020-04-26 11:01 ? 來(lái)自相關(guān)話(huà)題

  現在做一個(gè)網(wǎng)站是越來(lái)越容易了,很多公司和個(gè)人站長(cháng)開(kāi)始使用內容管理系統,在CMS方面,尤其是PHP的CMS,更是百花齊放,當然了,質(zhì)量也參差不齊。目前國外比較流行的有Dedecms和Phpcms,下面華來(lái)科技就這兩個(gè)cms做一下簡(jiǎn)單的對比。
  首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
  從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
  從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
  SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
  論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
  其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
  總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。 查看全部

  現在做一個(gè)網(wǎng)站是越來(lái)越容易了,很多公司和個(gè)人站長(cháng)開(kāi)始使用內容管理系統,在CMS方面,尤其是PHP的CMS,更是百花齊放,當然了,質(zhì)量也參差不齊。目前國外比較流行的有Dedecms和Phpcms,下面華來(lái)科技就這兩個(gè)cms做一下簡(jiǎn)單的對比。
  首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
  從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
  從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
  SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
  論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
  其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
  總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。

想入門(mén)爬蟲(chóng)?那你就必須學(xué)好正則!爬蟲(chóng)入門(mén)和正則表達式超全合輯

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 336 次瀏覽 ? 2020-06-30 08:02 ? 來(lái)自相關(guān)話(huà)題

  
  urllib.request.urlopen(url)官方文檔返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又用到的read()方法;返回數據;這個(gè)函數返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又有各類(lèi)方式, 比如我們用到的read()方法;如果你也是編程的學(xué)習者或則早已學(xué)會(huì )了的編程者!小編這兒有個(gè)群:103456743!大家可以加下,里面布滿(mǎn)了全國各地的學(xué)習者!為你們提供一個(gè)交流平臺,不管平常有遇到哪些BUG或則學(xué)習過(guò)程中卡殼,找不到人替你解決?那么就進(jìn)來(lái)吧,里面熱心的小伙伴還是十分多的,管理也是很好的,有哪些問(wèn)題,他假如有時(shí)間都能給你們解決,我認為是一個(gè)特別不錯的交流平臺,沒(méi)事也可以和你們扯扯公司的事中學(xué)發(fā)生的軼事,群文件早已上傳了很多G的資料,PDF,視頻 安裝工具,安裝教程都是有的,為了你們的學(xué)習能更進(jìn)一步!也為了你們能愉快的交流,討論學(xué)術(shù)問(wèn)題!所以你還在等哪些呢?好了馬上給你們帶來(lái)正文!
  
  
  data是一個(gè)字典, 然后通過(guò)urllib.parse.urlencode()來(lái)將data轉換為 ‘word=one+peace’的字符串, 最后和url合并為full_url
  python正則表達式介紹:
  隊列 介紹
  在爬蟲(chóng)的程序中用到了廣度優(yōu)先級算法,該算法用到了數據結構,當然你用list也可以實(shí)現隊列,但是效率不高?,F在在此處介紹下:
  在容器中有隊列:collection.deque
  
  集合介紹:
  在爬蟲(chóng)程序中, 為了不重復爬這些早已爬過(guò)的網(wǎng)站, 我們須要把爬過(guò)的頁(yè)面的url放進(jìn)集合中, 在每一次要爬某一個(gè)url之前, 先瞧瞧集合上面是否早已存在. 如果早已存在, 我們就跳過(guò)這個(gè)url; 如果不存在, 我們先把url裝入集合中, 然后再去爬這個(gè)頁(yè)面.
  Python 還 包 含 了 一 個(gè) 數 據 類(lèi) 型—— set ( 集 合 ) 。 集 合 是 一 個(gè) 無(wú) 序 不 重 復 元素 的 集 。 基 本 功 能 包 括 關(guān) 系 測 試 和 消 除 重 復 元 素 。 集 合 對 象 還 支 持 union( 聯(lián)
  合),intersection(交),difference(差)和 sysmmetric difference(對稱(chēng)差集)等物理運算。
  大括號或 set() 函數可以拿來(lái)創(chuàng )建集合。 注意:想要創(chuàng )建空集合,你必須使用set() 而不是 {} 。{}用于創(chuàng )建空字典;
  集合的創(chuàng )建演示如下:
  
  正則表達式
  在爬蟲(chóng)時(shí)搜集回去的通常是字符流,我們要從中選購出url就要求有簡(jiǎn)單的字符串處理能力,而用正則表達式可以輕松的完成這一任務(wù);
  正則表達式的步驟:1,正則表達式的編譯 2,正則表達式匹配字符串 3,結果的處理
  下圖列舉了正則表達式的句型:
  
  在pytho中使用正則表達式網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,需要引入re模塊;下面介紹下該模塊中的一些技巧;
  pile和match
  re模塊中compile用于生成pattern的對象,再通過(guò)調用pattern實(shí)例的match方式處理文本最終獲得match實(shí)例;通過(guò)使用match獲得信息;
  
  
  
  pattern:
  Pattern對象是一個(gè)編譯好的正則表達式,通過(guò)Pattern提供的一系列方式可以對文本進(jìn)行匹配查找。
  Pattern不能直接實(shí)例化,必須使用pile()進(jìn)行構造。
  
  2.re.match(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.match方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  
  
  
  re.search方式
  re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。
  函數句型:
  re.search(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.search方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  實(shí)例一:
  
  
  search和match區別:
  re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個(gè)字符串網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,直到找到一個(gè)匹配。
  python爬蟲(chóng)小試牛刀
  利用python抓取頁(yè)面中所有的http合同的鏈接,并遞歸抓取子頁(yè)面的鏈接。使用了集合和隊列;此去爬的是我的網(wǎng)站,第一版好多bug;
  代碼如下:
  
  
  
  那么你學(xué)會(huì )了嗎? 查看全部

  
  urllib.request.urlopen(url)官方文檔返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又用到的read()方法;返回數據;這個(gè)函數返回一個(gè) http.client.HTTPResponse 對象, 這個(gè)對象又有各類(lèi)方式, 比如我們用到的read()方法;如果你也是編程的學(xué)習者或則早已學(xué)會(huì )了的編程者!小編這兒有個(gè)群:103456743!大家可以加下,里面布滿(mǎn)了全國各地的學(xué)習者!為你們提供一個(gè)交流平臺,不管平常有遇到哪些BUG或則學(xué)習過(guò)程中卡殼,找不到人替你解決?那么就進(jìn)來(lái)吧,里面熱心的小伙伴還是十分多的,管理也是很好的,有哪些問(wèn)題,他假如有時(shí)間都能給你們解決,我認為是一個(gè)特別不錯的交流平臺,沒(méi)事也可以和你們扯扯公司的事中學(xué)發(fā)生的軼事,群文件早已上傳了很多G的資料,PDF,視頻 安裝工具,安裝教程都是有的,為了你們的學(xué)習能更進(jìn)一步!也為了你們能愉快的交流,討論學(xué)術(shù)問(wèn)題!所以你還在等哪些呢?好了馬上給你們帶來(lái)正文!
  
  
  data是一個(gè)字典, 然后通過(guò)urllib.parse.urlencode()來(lái)將data轉換為 ‘word=one+peace’的字符串, 最后和url合并為full_url
  python正則表達式介紹:
  隊列 介紹
  在爬蟲(chóng)的程序中用到了廣度優(yōu)先級算法,該算法用到了數據結構,當然你用list也可以實(shí)現隊列,但是效率不高?,F在在此處介紹下:
  在容器中有隊列:collection.deque
  
  集合介紹:
  在爬蟲(chóng)程序中, 為了不重復爬這些早已爬過(guò)的網(wǎng)站, 我們須要把爬過(guò)的頁(yè)面的url放進(jìn)集合中, 在每一次要爬某一個(gè)url之前, 先瞧瞧集合上面是否早已存在. 如果早已存在, 我們就跳過(guò)這個(gè)url; 如果不存在, 我們先把url裝入集合中, 然后再去爬這個(gè)頁(yè)面.
  Python 還 包 含 了 一 個(gè) 數 據 類(lèi) 型—— set ( 集 合 ) 。 集 合 是 一 個(gè) 無(wú) 序 不 重 復 元素 的 集 。 基 本 功 能 包 括 關(guān) 系 測 試 和 消 除 重 復 元 素 。 集 合 對 象 還 支 持 union( 聯(lián)
  合),intersection(交),difference(差)和 sysmmetric difference(對稱(chēng)差集)等物理運算。
  大括號或 set() 函數可以拿來(lái)創(chuàng )建集合。 注意:想要創(chuàng )建空集合,你必須使用set() 而不是 {} 。{}用于創(chuàng )建空字典;
  集合的創(chuàng )建演示如下:
  
  正則表達式
  在爬蟲(chóng)時(shí)搜集回去的通常是字符流,我們要從中選購出url就要求有簡(jiǎn)單的字符串處理能力,而用正則表達式可以輕松的完成這一任務(wù);
  正則表達式的步驟:1,正則表達式的編譯 2,正則表達式匹配字符串 3,結果的處理
  下圖列舉了正則表達式的句型:
  
  在pytho中使用正則表達式網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,需要引入re模塊;下面介紹下該模塊中的一些技巧;
  pile和match
  re模塊中compile用于生成pattern的對象,再通過(guò)調用pattern實(shí)例的match方式處理文本最終獲得match實(shí)例;通過(guò)使用match獲得信息;
  
  
  
  pattern:
  Pattern對象是一個(gè)編譯好的正則表達式,通過(guò)Pattern提供的一系列方式可以對文本進(jìn)行匹配查找。
  Pattern不能直接實(shí)例化,必須使用pile()進(jìn)行構造。
  
  2.re.match(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.match方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  
  
  
  re.search方式
  re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。
  函數句型:
  re.search(pattern, string, flags=0)
  函數參數說(shuō)明:
  參數描述
  pattern
  匹配的正則表達式
  string
  要匹配的字符串。
  flags
  標志位,用于控制正則表達式的匹配方法,如:是否分辨大小寫(xiě),多行匹配等等。
  匹配成功re.search方式返回一個(gè)匹配的對象,否則返回None。
  我們可以使用group(num) 或 groups() 匹配對象函數來(lái)獲取匹配表達式。
  匹配對象方式描述
  group(num=0)
  匹配的整個(gè)表達式的字符串,group() 可以一次輸入多個(gè)組號,在這些情況下它將返回一個(gè)包含這些組所對應值的元組。
  groups()
  返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號。
  實(shí)例一:
  
  
  search和match區別:
  re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個(gè)字符串網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,直到找到一個(gè)匹配。
  python爬蟲(chóng)小試牛刀
  利用python抓取頁(yè)面中所有的http合同的鏈接,并遞歸抓取子頁(yè)面的鏈接。使用了集合和隊列;此去爬的是我的網(wǎng)站,第一版好多bug;
  代碼如下:
  
  
  
  那么你學(xué)會(huì )了嗎?

Ipidea丨網(wǎng)絡(luò )爬蟲(chóng)正則表達式的使用

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 401 次瀏覽 ? 2020-06-17 08:00 ? 來(lái)自相關(guān)話(huà)題

  
  ## 網(wǎng)絡(luò )爬蟲(chóng)正則表達式的使用
  ---
  我們在處理網(wǎng)頁(yè)文本內容時(shí)有時(shí)會(huì )碰到一些特殊的情況網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,或者須要匹配某類(lèi)字符串方式,通常都會(huì )用到正則表達式。許多程序語(yǔ)言都支持使用正則表達式,python中正則表達式可以實(shí)現字符串的匹配、檢索和替換等功能,是一個(gè)比較強悍的工具。
  ### 1.正則表達式句型
  Python中實(shí)現正則表達式功能一般使用re模塊,可以實(shí)現對文本字符串的匹配,檢索和替換,但不僅引入正則模塊網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,還須要把握正則表達式字符和基本句型,才能正確使用python進(jìn)行正則表達式提取。
  部分常用的正則表達式:
  | 字符 | 功能 |
  | :--: | :--: |
  | \ |轉義字符,標記下一個(gè)字符為特殊字符|
  | ^ |匹配輸入字符串的開(kāi)始位置|
  | $ |匹配輸入字符串的結束位置|
  | * |匹配上面的子表達式零次或多次 |
  | + |匹配上面的子表達式一次或多次 |
  | ? |匹配上面的子表達式零次或一次 |
  | . |匹配除“\n”之外的任何單個(gè)字符 |
  | () | 匹配括弧里的表達式 |
  | \d | 匹配一個(gè)數字字符 |
  | \D | 匹配一個(gè)非數字字符 |
  | \w |匹配包括頓號的任何詞組字符|
  | \W |匹配任何非詞組字符|
  |{n}|n是一個(gè)非負整數,匹配確定的n次|
  |{n,m}|m和n均為非負整數,其中n&lt;=m。最少匹配n次且最多匹配m次|
  |[x,y,z]| 匹配一組字符集 |
  | \^[x,y,z] | 匹配不在[]中的字符 |
  | a\|b | 匹配a或b | 查看全部

  
  ## 網(wǎng)絡(luò )爬蟲(chóng)正則表達式的使用
  ---
  我們在處理網(wǎng)頁(yè)文本內容時(shí)有時(shí)會(huì )碰到一些特殊的情況網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,或者須要匹配某類(lèi)字符串方式,通常都會(huì )用到正則表達式。許多程序語(yǔ)言都支持使用正則表達式,python中正則表達式可以實(shí)現字符串的匹配、檢索和替換等功能,是一個(gè)比較強悍的工具。
  ### 1.正則表達式句型
  Python中實(shí)現正則表達式功能一般使用re模塊,可以實(shí)現對文本字符串的匹配,檢索和替換,但不僅引入正則模塊網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,還須要把握正則表達式字符和基本句型,才能正確使用python進(jìn)行正則表達式提取。
  部分常用的正則表達式:
  | 字符 | 功能 |
  | :--: | :--: |
  | \ |轉義字符,標記下一個(gè)字符為特殊字符|
  | ^ |匹配輸入字符串的開(kāi)始位置|
  | $ |匹配輸入字符串的結束位置|
  | * |匹配上面的子表達式零次或多次 |
  | + |匹配上面的子表達式一次或多次 |
  | ? |匹配上面的子表達式零次或一次 |
  | . |匹配除“\n”之外的任何單個(gè)字符 |
  | () | 匹配括弧里的表達式 |
  | \d | 匹配一個(gè)數字字符 |
  | \D | 匹配一個(gè)非數字字符 |
  | \w |匹配包括頓號的任何詞組字符|
  | \W |匹配任何非詞組字符|
  |{n}|n是一個(gè)非負整數,匹配確定的n次|
  |{n,m}|m和n均為非負整數,其中n&lt;=m。最少匹配n次且最多匹配m次|
  |[x,y,z]| 匹配一組字符集 |
  | \^[x,y,z] | 匹配不在[]中的字符 |
  | a\|b | 匹配a或b |

網(wǎng)絡(luò )爬蟲(chóng)簡(jiǎn)介(5)— 鏈接爬蟲(chóng)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 372 次瀏覽 ? 2020-05-31 08:01 ? 來(lái)自相關(guān)話(huà)題

  1.5.5 鏈接爬蟲(chóng)
  到目前為止,我們早已借助示例網(wǎng)站的結構特性實(shí)現了兩個(gè)簡(jiǎn)單爬蟲(chóng),用于下載所有已發(fā)布的國家(或地區)頁(yè)面。只要這兩種技術(shù)可用,就應該使用它們進(jìn)行爬取,因為這兩種方式將須要下載的網(wǎng)頁(yè)數目降至最低。不過(guò),對于另一些網(wǎng)站爬蟲(chóng)社區,我們須要使爬蟲(chóng)表現得更象普通用戶(hù),跟蹤鏈接,訪(fǎng)問(wèn)感興趣的內容。
  通過(guò)跟蹤每位鏈接的方法,我們可以很容易地下載整個(gè)網(wǎng)站的頁(yè)面。但是,這種方式可能會(huì )下載好多并不需要的網(wǎng)頁(yè)。例如,我們想要從一個(gè)在線(xiàn)峰會(huì )中抓取用戶(hù)帳號詳情頁(yè),那么此時(shí)我們只須要下載帳號頁(yè),而不需要下載討論貼的頁(yè)面。本章使用的鏈接爬蟲(chóng)將使用正則表達式來(lái)確定應該下載什么頁(yè)面。下面是這段代碼的初始版本。
  import re
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if html is not None:
continue
# filter for links matching our regular expression
for link in get_links(html):
if re.match(link_regex, link):
crawl_queue.append(link)
def get_links(html):
""" Return a list of links from html
"""
# a regular expression to extract all links from the webpage
webpage_regex = re.compile("""&lt;a[^&gt;]+href=["'](.*?)["']""",
re.IGNORECASE)
# list of all links from the webpage
return webpage_regex.findall(html)
  要運行這段代碼,只須要調用
  link_crawler
  函數,并傳入兩個(gè)參數:
  要爬取的網(wǎng)站
  URL
  以及用于匹配你想跟蹤的鏈
  接的正則表達式。對于示例網(wǎng)
  站來(lái)說(shuō),我們想要爬取的是國家(或地區
 ?。┝斜硭饕?yè)和國家(或地區)頁(yè)面。
  我們查看站點(diǎn)可以獲知索引頁(yè)鏈接遵守如下格式:
  國家(或地區)頁(yè)遵守如下格式:
  因此爬蟲(chóng)社區,我們可以用/(index|view)/這個(gè)簡(jiǎn)單的正則表達式來(lái)匹配這兩類(lèi)網(wǎng)頁(yè)。當爬蟲(chóng)使用這種輸入參數運行時(shí)會(huì )發(fā)生哪些呢?你會(huì )得到如下所示的下載錯誤。
  &gt;&gt;&gt; link_crawler('http://example.python-scraping.com', '/(index|view)/')
Downloading: http://example.python-scraping.com
Downloading: /index/1
Traceback (most recent call last):
...
ValueError: unknown url type: /index/1
  正則表達式是從字符串中抽取信息的非常好的工具,因此我推薦每名程序員都應該“學(xué)會(huì )怎樣閱讀和編撰一些正則表達式”。即便這么,它們常常會(huì )特別脆弱,容易失效。我們將在本書(shū)后續部份介紹更先進(jìn)的抽取鏈接和辨識頁(yè)面的形式??梢钥闯?,問(wèn)題出在下載/index/1時(shí),該鏈接只有網(wǎng)頁(yè)的路徑部份,而沒(méi)有合同和服務(wù)器部份,也就是說(shuō)這是一個(gè)相對鏈接。由于瀏覽器曉得你正在瀏覽那個(gè)網(wǎng)頁(yè),并且還能采取必要步驟處理那些鏈接,因此在瀏覽器瀏覽時(shí),相對鏈接是才能正常工作的。但是,urllib并沒(méi)有上下文。為了使urllib才能定位網(wǎng)頁(yè),我們須要將鏈接轉換為絕對鏈接的方式,以便包含定位網(wǎng)頁(yè)的所有細節。如你所愿,Python的urllib中有一個(gè)模塊可以拿來(lái)實(shí)現該功能,該模塊名為parse。下面是link_crawler的改進(jìn)版本,使用了urljoin方式來(lái)創(chuàng )建絕對路徑。
  from urllib.parse import urljoin
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
crawl_queue.append(abs_link)
  當你運行這段代碼時(shí),會(huì )聽(tīng)到似乎下載了匹配的網(wǎng)頁(yè),但是同樣的地點(diǎn)總是會(huì )被不斷下載到。產(chǎn)生該行為的誘因是那些地點(diǎn)互相之間存在鏈接。比如,澳大利亞鏈接到了南極洲,而南極洲又鏈接回了德國,此時(shí)爬蟲(chóng)都會(huì )繼續將這種URL裝入隊列,永遠不會(huì )抵達隊列尾部
  。要想避開(kāi)重復爬取相同的鏈接,我們須要記錄什么鏈接早已被爬取過(guò)。下面是更改后的link_crawler函數,具備了儲存已發(fā)覺(jué)URL的功能,可以避免重復下載。
  def link_crawler(start_url, link_regex):
crawl_queue = [start_url]
# keep track which URL's have seen before
seen = set(crawl_queue)
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
# check if link matches expected regex
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
# check if have already seen this link
if abs_link not in seen:
seen.add(abs_link)
crawl_queue.append(abs_link)
  當運行該腳本時(shí),它會(huì )爬取所有地點(diǎn),并且還能如期停止。最終,我們得到了一個(gè)可用的鏈接爬蟲(chóng)! 查看全部

  1.5.5 鏈接爬蟲(chóng)
  到目前為止,我們早已借助示例網(wǎng)站的結構特性實(shí)現了兩個(gè)簡(jiǎn)單爬蟲(chóng),用于下載所有已發(fā)布的國家(或地區)頁(yè)面。只要這兩種技術(shù)可用,就應該使用它們進(jìn)行爬取,因為這兩種方式將須要下載的網(wǎng)頁(yè)數目降至最低。不過(guò),對于另一些網(wǎng)站爬蟲(chóng)社區,我們須要使爬蟲(chóng)表現得更象普通用戶(hù),跟蹤鏈接,訪(fǎng)問(wèn)感興趣的內容。
  通過(guò)跟蹤每位鏈接的方法,我們可以很容易地下載整個(gè)網(wǎng)站的頁(yè)面。但是,這種方式可能會(huì )下載好多并不需要的網(wǎng)頁(yè)。例如,我們想要從一個(gè)在線(xiàn)峰會(huì )中抓取用戶(hù)帳號詳情頁(yè),那么此時(shí)我們只須要下載帳號頁(yè),而不需要下載討論貼的頁(yè)面。本章使用的鏈接爬蟲(chóng)將使用正則表達式來(lái)確定應該下載什么頁(yè)面。下面是這段代碼的初始版本。
  import re
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if html is not None:
continue
# filter for links matching our regular expression
for link in get_links(html):
if re.match(link_regex, link):
crawl_queue.append(link)
def get_links(html):
""" Return a list of links from html
"""
# a regular expression to extract all links from the webpage
webpage_regex = re.compile("""&lt;a[^&gt;]+href=["'](.*?)["']""",
re.IGNORECASE)
# list of all links from the webpage
return webpage_regex.findall(html)
  要運行這段代碼,只須要調用
  link_crawler
  函數,并傳入兩個(gè)參數:
  要爬取的網(wǎng)站
  URL
  以及用于匹配你想跟蹤的鏈
  接的正則表達式。對于示例網(wǎng)
  站來(lái)說(shuō),我們想要爬取的是國家(或地區
 ?。┝斜硭饕?yè)和國家(或地區)頁(yè)面。
  我們查看站點(diǎn)可以獲知索引頁(yè)鏈接遵守如下格式:
  國家(或地區)頁(yè)遵守如下格式:
  因此爬蟲(chóng)社區,我們可以用/(index|view)/這個(gè)簡(jiǎn)單的正則表達式來(lái)匹配這兩類(lèi)網(wǎng)頁(yè)。當爬蟲(chóng)使用這種輸入參數運行時(shí)會(huì )發(fā)生哪些呢?你會(huì )得到如下所示的下載錯誤。
  &gt;&gt;&gt; link_crawler('http://example.python-scraping.com', '/(index|view)/')
Downloading: http://example.python-scraping.com
Downloading: /index/1
Traceback (most recent call last):
...
ValueError: unknown url type: /index/1
  正則表達式是從字符串中抽取信息的非常好的工具,因此我推薦每名程序員都應該“學(xué)會(huì )怎樣閱讀和編撰一些正則表達式”。即便這么,它們常常會(huì )特別脆弱,容易失效。我們將在本書(shū)后續部份介紹更先進(jìn)的抽取鏈接和辨識頁(yè)面的形式??梢钥闯?,問(wèn)題出在下載/index/1時(shí),該鏈接只有網(wǎng)頁(yè)的路徑部份,而沒(méi)有合同和服務(wù)器部份,也就是說(shuō)這是一個(gè)相對鏈接。由于瀏覽器曉得你正在瀏覽那個(gè)網(wǎng)頁(yè),并且還能采取必要步驟處理那些鏈接,因此在瀏覽器瀏覽時(shí),相對鏈接是才能正常工作的。但是,urllib并沒(méi)有上下文。為了使urllib才能定位網(wǎng)頁(yè),我們須要將鏈接轉換為絕對鏈接的方式,以便包含定位網(wǎng)頁(yè)的所有細節。如你所愿,Python的urllib中有一個(gè)模塊可以拿來(lái)實(shí)現該功能,該模塊名為parse。下面是link_crawler的改進(jìn)版本,使用了urljoin方式來(lái)創(chuàng )建絕對路徑。
  from urllib.parse import urljoin
def link_crawler(start_url, link_regex):
""" Crawl from the given start URL following links matched by
link_regex
"""
crawl_queue = [start_url]
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
crawl_queue.append(abs_link)
  當你運行這段代碼時(shí),會(huì )聽(tīng)到似乎下載了匹配的網(wǎng)頁(yè),但是同樣的地點(diǎn)總是會(huì )被不斷下載到。產(chǎn)生該行為的誘因是那些地點(diǎn)互相之間存在鏈接。比如,澳大利亞鏈接到了南極洲,而南極洲又鏈接回了德國,此時(shí)爬蟲(chóng)都會(huì )繼續將這種URL裝入隊列,永遠不會(huì )抵達隊列尾部
  。要想避開(kāi)重復爬取相同的鏈接,我們須要記錄什么鏈接早已被爬取過(guò)。下面是更改后的link_crawler函數,具備了儲存已發(fā)覺(jué)URL的功能,可以避免重復下載。
  def link_crawler(start_url, link_regex):
crawl_queue = [start_url]
# keep track which URL's have seen before
seen = set(crawl_queue)
while crawl_queue:
url = crawl_queue.pop()
html = download(url)
if not html:
continue
for link in get_links(html):
# check if link matches expected regex
if re.match(link_regex, link):
abs_link = urljoin(start_url, link)
# check if have already seen this link
if abs_link not in seen:
seen.add(abs_link)
crawl_queue.append(abs_link)
  當運行該腳本時(shí),它會(huì )爬取所有地點(diǎn),并且還能如期停止。最終,我們得到了一個(gè)可用的鏈接爬蟲(chóng)!

Python網(wǎng)絡(luò )爬蟲(chóng)四大選擇器(正則表達式、BS4、Xpath、CSS)總結

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 499 次瀏覽 ? 2020-05-12 08:01 ? 來(lái)自相關(guān)話(huà)題

  前幾天小編連續寫(xiě)了四篇關(guān)于Python選擇器的文章,分別用正則表達式、BeautifulSoup、Xpath、CSS選擇器分別抓取京東網(wǎng)的商品信息。今天小編來(lái)給你們總結一下這四個(gè)選擇器,讓你們愈發(fā)深刻的理解和熟悉Python選擇器。
  一、正則表達式
  正則表達式為我們提供了抓取數據的快捷方法。雖然該正則表達式更容易適應未來(lái)變化網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,但又存在無(wú)法構造、可讀性差的問(wèn)題。當在爬京東網(wǎng)的時(shí)侯,正則表達式如下圖所示:
  
  利用正則表達式實(shí)現對目標信息的精準采集
  此外 ,我們都曉得,網(wǎng)頁(yè)經(jīng)常會(huì )形成變更,導致網(wǎng)頁(yè)中會(huì )發(fā)生一些微小的布局變化時(shí),此時(shí)也會(huì )促使之前寫(xiě)好的正則表達式未能滿(mǎn)足需求,而且還不太好調試。當須要匹配的內容有很多的時(shí)侯,使用正則表達式提取目標信息會(huì )導致程序運行的速率減緩,需要消耗更多顯存。
  二、BeautifulSoup
  BeautifulSoup是一個(gè)十分流行的 Pyhon 模塊。該模塊可以解析網(wǎng)頁(yè),并提供定位內容的方便插口。通過(guò)'pip install beautifulsoup4'就可以實(shí)現該模塊的安裝了。
  
  利用美麗的湯去提取目標信息
  使用 BeautifulSoup的第一步是將己下載的 HTML 內容解析為 soup文檔。由 于大多數網(wǎng)頁(yè)都不具備良好的HTML 格式,因此BeautifulSoup須要對實(shí)際格式進(jìn)行確定。BeautifulSoup才能正確解析缺位的冒號并閉合標簽,此外都會(huì )添加<html >和<body>標簽讓其成為完整的HTML文檔。通常使用find() 和find_all()方法來(lái)定位我們須要的元素。
  如果你想了解BeautifulSoup全部方式和參數,可以查閱BeautifulSoup的官方文檔。雖然BeautifulSoup在代碼的理解上比正則表達式要復雜一些,但是其愈發(fā)容易構造和理解。
  三、Lxml
  Lxml模塊使用 C語(yǔ)言編撰,其解析速率比 BeautiflSoup更快,而且其安裝過(guò)程也更為復雜,在此小編就不贅言啦。XPath 使用路徑表達式在 XML 文檔中選定節點(diǎn)。節點(diǎn)是通過(guò)順著(zhù)路徑或則 step 來(lái)選定的。
  
  Xpath選擇器
  使用 lxml 模塊的第一步和BeautifulSoup一樣,也是將有可能不合法的HTML 解析為 統一格式。 雖然Lxml可以正確解析屬性?xún)蛇吶蔽坏拿疤柧W(wǎng)絡(luò )爬蟲(chóng) 正則表達式,并閉合標簽,不過(guò)該模塊沒(méi)有額外添加<html >和<body>標簽 。
  在線(xiàn)復制Xpath表達式可以很方便的復制Xpath表達式。但是通過(guò)該方式得到的Xpath表達式置于程序中通常不能用,而且長(cháng)的無(wú)法看。所以Xpath表達式通常還是要自己親自上手。
  四、CSS
  CSS選擇器表示選擇元素所使用 的模式。BeautifulSoup整合了CSS選擇器的句型和自身便捷使用API。在網(wǎng)路爬蟲(chóng)的開(kāi)發(fā)過(guò)程中,對于熟悉CSS選擇器句型的人,使用CSS選擇器是個(gè)十分便捷的方式。
  
  CSS選擇器
  下面是一些常用的選擇器示例。 查看全部

  前幾天小編連續寫(xiě)了四篇關(guān)于Python選擇器的文章,分別用正則表達式、BeautifulSoup、Xpath、CSS選擇器分別抓取京東網(wǎng)的商品信息。今天小編來(lái)給你們總結一下這四個(gè)選擇器,讓你們愈發(fā)深刻的理解和熟悉Python選擇器。
  一、正則表達式
  正則表達式為我們提供了抓取數據的快捷方法。雖然該正則表達式更容易適應未來(lái)變化網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,但又存在無(wú)法構造、可讀性差的問(wèn)題。當在爬京東網(wǎng)的時(shí)侯,正則表達式如下圖所示:
  
  利用正則表達式實(shí)現對目標信息的精準采集
  此外 ,我們都曉得,網(wǎng)頁(yè)經(jīng)常會(huì )形成變更,導致網(wǎng)頁(yè)中會(huì )發(fā)生一些微小的布局變化時(shí),此時(shí)也會(huì )促使之前寫(xiě)好的正則表達式未能滿(mǎn)足需求,而且還不太好調試。當須要匹配的內容有很多的時(shí)侯,使用正則表達式提取目標信息會(huì )導致程序運行的速率減緩,需要消耗更多顯存。
  二、BeautifulSoup
  BeautifulSoup是一個(gè)十分流行的 Pyhon 模塊。該模塊可以解析網(wǎng)頁(yè),并提供定位內容的方便插口。通過(guò)'pip install beautifulsoup4'就可以實(shí)現該模塊的安裝了。
  
  利用美麗的湯去提取目標信息
  使用 BeautifulSoup的第一步是將己下載的 HTML 內容解析為 soup文檔。由 于大多數網(wǎng)頁(yè)都不具備良好的HTML 格式,因此BeautifulSoup須要對實(shí)際格式進(jìn)行確定。BeautifulSoup才能正確解析缺位的冒號并閉合標簽,此外都會(huì )添加<html >和<body>標簽讓其成為完整的HTML文檔。通常使用find() 和find_all()方法來(lái)定位我們須要的元素。
  如果你想了解BeautifulSoup全部方式和參數,可以查閱BeautifulSoup的官方文檔。雖然BeautifulSoup在代碼的理解上比正則表達式要復雜一些,但是其愈發(fā)容易構造和理解。
  三、Lxml
  Lxml模塊使用 C語(yǔ)言編撰,其解析速率比 BeautiflSoup更快,而且其安裝過(guò)程也更為復雜,在此小編就不贅言啦。XPath 使用路徑表達式在 XML 文檔中選定節點(diǎn)。節點(diǎn)是通過(guò)順著(zhù)路徑或則 step 來(lái)選定的。
  
  Xpath選擇器
  使用 lxml 模塊的第一步和BeautifulSoup一樣,也是將有可能不合法的HTML 解析為 統一格式。 雖然Lxml可以正確解析屬性?xún)蛇吶蔽坏拿疤柧W(wǎng)絡(luò )爬蟲(chóng) 正則表達式,并閉合標簽,不過(guò)該模塊沒(méi)有額外添加<html >和<body>標簽 。
  在線(xiàn)復制Xpath表達式可以很方便的復制Xpath表達式。但是通過(guò)該方式得到的Xpath表達式置于程序中通常不能用,而且長(cháng)的無(wú)法看。所以Xpath表達式通常還是要自己親自上手。
  四、CSS
  CSS選擇器表示選擇元素所使用 的模式。BeautifulSoup整合了CSS選擇器的句型和自身便捷使用API。在網(wǎng)路爬蟲(chóng)的開(kāi)發(fā)過(guò)程中,對于熟悉CSS選擇器句型的人,使用CSS選擇器是個(gè)十分便捷的方式。
  
  CSS選擇器
  下面是一些常用的選擇器示例。

使用正則表達式實(shí)現網(wǎng)頁(yè)爬蟲(chóng)的思路解讀

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 339 次瀏覽 ? 2020-05-06 08:04 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據。
  思路:
  1.為模擬網(wǎng)頁(yè)爬蟲(chóng),我們可以如今我們的tomcat服務(wù)器端布署一個(gè)1.html網(wǎng)頁(yè)。(部署的步驟:在tomcat目錄的webapps目錄的ROOTS目錄下新建一個(gè)1.html。使用notepad++進(jìn)行編輯網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,編輯內容為:
  
 ?。?br />   2.使用URL與網(wǎng)頁(yè)構建聯(lián)系
  3.獲取輸入流,用于讀取網(wǎng)頁(yè)中的內容
  4.建立正則規則,因為這兒我們是爬去網(wǎng)頁(yè)中的郵箱信息網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,所以構建匹配 郵箱的正則表達式:String regex="\w+@\w+(\.\w+)+";
  5.將提取到的數據放在集合中。
  代碼:
  
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據
*
*
*/
public class RegexDemo {
public static void main(String args) throws Exception {

List<String> list=getMailByWeb();
for(String str:list){
System.out.println(str);
}

}
private static List<String> getMailByWeb() throws Exception {

//1.與網(wǎng)頁(yè)建立聯(lián)系。使用URL
String path="http://localhost:8080//1.html";//后面寫(xiě)雙斜杠是用于轉義
URL url=new URL(path);
//2.獲取輸入流
InputStream is=url.openStream();
//加緩沖
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//3.提取符合郵箱的數據
String regex="\\w+@\\w+(\\.\\w+)+";
//進(jìn)行匹配
//將正則規則封裝成對象
Pattern p=Pattern.compile(regex);
//將提取到的數據放到一個(gè)集合中
List<String> list=new ArrayList<String>();

String line=null;
while((line=br.readLine())!=null){
//匹配器
Matcher m=p.matcher(line);
while(m.find()){
//3.將符合規則的數據存儲到集合中
list.add(m.group());
}
}

return list;
}
}
  注意:在執行前須要先開(kāi)啟tomcat服務(wù)器
  運行結果:
  
  總結
  以上所述是小編給你們介紹的使用正則表達式實(shí)現網(wǎng)頁(yè)爬蟲(chóng)的思路解讀,希望對你們有所幫助,如果你們有任何疑惑請給我留言,小編會(huì )及時(shí)回復你們的。在此也特別謝謝你們對優(yōu)采云的支持! 查看全部
  網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據。
  思路:
  1.為模擬網(wǎng)頁(yè)爬蟲(chóng),我們可以如今我們的tomcat服務(wù)器端布署一個(gè)1.html網(wǎng)頁(yè)。(部署的步驟:在tomcat目錄的webapps目錄的ROOTS目錄下新建一個(gè)1.html。使用notepad++進(jìn)行編輯網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,編輯內容為:
  
 ?。?br />   2.使用URL與網(wǎng)頁(yè)構建聯(lián)系
  3.獲取輸入流,用于讀取網(wǎng)頁(yè)中的內容
  4.建立正則規則,因為這兒我們是爬去網(wǎng)頁(yè)中的郵箱信息網(wǎng)絡(luò )爬蟲(chóng) 正則表達式,所以構建匹配 郵箱的正則表達式:String regex="\w+@\w+(\.\w+)+";
  5.將提取到的數據放在集合中。
  代碼:
  
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 網(wǎng)頁(yè)爬蟲(chóng):就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規則的數據
*
*
*/
public class RegexDemo {
public static void main(String args) throws Exception {

List<String> list=getMailByWeb();
for(String str:list){
System.out.println(str);
}

}
private static List<String> getMailByWeb() throws Exception {

//1.與網(wǎng)頁(yè)建立聯(lián)系。使用URL
String path="http://localhost:8080//1.html";//后面寫(xiě)雙斜杠是用于轉義
URL url=new URL(path);
//2.獲取輸入流
InputStream is=url.openStream();
//加緩沖
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//3.提取符合郵箱的數據
String regex="\\w+@\\w+(\\.\\w+)+";
//進(jìn)行匹配
//將正則規則封裝成對象
Pattern p=Pattern.compile(regex);
//將提取到的數據放到一個(gè)集合中
List<String> list=new ArrayList<String>();

String line=null;
while((line=br.readLine())!=null){
//匹配器
Matcher m=p.matcher(line);
while(m.find()){
//3.將符合規則的數據存儲到集合中
list.add(m.group());
}
}

return list;
}
}
  注意:在執行前須要先開(kāi)啟tomcat服務(wù)器
  運行結果:
  
  總結
  以上所述是小編給你們介紹的使用正則表達式實(shí)現網(wǎng)頁(yè)爬蟲(chóng)的思路解讀,希望對你們有所幫助,如果你們有任何疑惑請給我留言,小編會(huì )及時(shí)回復你們的。在此也特別謝謝你們對優(yōu)采云的支持!

phpcms跟dedecms比較

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 461 次瀏覽 ? 2020-04-26 11:01 ? 來(lái)自相關(guān)話(huà)題

  現在做一個(gè)網(wǎng)站是越來(lái)越容易了,很多公司和個(gè)人站長(cháng)開(kāi)始使用內容管理系統,在CMS方面,尤其是PHP的CMS,更是百花齊放,當然了,質(zhì)量也參差不齊。目前國外比較流行的有Dedecms和Phpcms,下面華來(lái)科技就這兩個(gè)cms做一下簡(jiǎn)單的對比。
  首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
  從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
  從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
  SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
  論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
  其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
  總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。 查看全部

  現在做一個(gè)網(wǎng)站是越來(lái)越容易了,很多公司和個(gè)人站長(cháng)開(kāi)始使用內容管理系統,在CMS方面,尤其是PHP的CMS,更是百花齊放,當然了,質(zhì)量也參差不齊。目前國外比較流行的有Dedecms和Phpcms,下面華來(lái)科技就這兩個(gè)cms做一下簡(jiǎn)單的對比。
  首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
  從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
  從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
  SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
  論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
  其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
  總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

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