成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

編寫爬蟲的一些感想(就是高興)

inapt / 765人閱讀

摘要:如果有人有興趣的話,可以編寫則個下面,我會說明在編寫爬蟲過程中的所思所想。文章讀取完畢最后,還要再編寫一個語句,判斷是運行還是導(dǎo)入。文章結(jié)束前的一些話嗯,本文到這里就結(jié)束了。

今天,根據(jù)網(wǎng)頁的結(jié)構(gòu),嘗試了下如何抓取煎蛋首頁上的文章。目標(biāo)很簡單:

根據(jù)首頁上面的文章鏈接,載入文章,而后將文章的標(biāo)題和正文(不帶圖片)抓取下來。

抓取首頁上面文章的鏈接,標(biāo)題,作者和所屬標(biāo)簽。

按標(biāo)題將文章寫入一個.txt格式的文件

將首頁上抓取的內(nèi)容整合起來,制作成格式如下的Markdown簡介。

首頁的簡介格式如下:

**文章標(biāo)題**:鯨魚有鯨語,鯨語有口音

**文章鏈接**:[http://jandan.net/2016/02/18/caribbean-whales.html](http://jandan.net/2016/02/18/caribbean-whales.html)

**譯者**:Cedric

**標(biāo)簽**:走進(jìn)科學(xué)

...

如此反復(fù)即可。這里要說明下,由于煎蛋首頁和余下頁碼的網(wǎng)頁結(jié)構(gòu)不同,我沒有再寫余下頁面的簡介。如果有人有興趣的話,可以編寫則個~下面,我會說明在編寫爬蟲過程中的所思所想。

1. 爬蟲前的準(zhǔn)備

我這里使用了Python中的以下模塊:

beautifulsoup:第三方模塊,用于解析網(wǎng)頁內(nèi)容。

requests:第三方模塊,用于獲取網(wǎng)頁內(nèi)容。

re:內(nèi)置模塊,用于編寫正則表達(dá)式

codecs:內(nèi)置模塊,用于操作文件

這便是全部準(zhǔn)備了。在這里要多嘴一句,包括re模塊在內(nèi)都存在替代品,如果需要可以根據(jù)自己的喜好來選擇。

2. 分析程序邏輯

在編寫代碼之前,要分析如何抓取并處理網(wǎng)頁。以抓取一篇文章鯨魚有鯨語,鯨語有口音為例。我們要實現(xiàn):

下載網(wǎng)頁,獲取數(shù)據(jù)——源代碼或者json數(shù)據(jù)

解析數(shù)據(jù),從數(shù)據(jù)中抽出我們需要的內(nèi)容——這里是文章標(biāo)題和文章內(nèi)容(只有文字)

整理數(shù)據(jù),將解析好的數(shù)據(jù)寫入文件中。

這樣,可以根據(jù)實現(xiàn)的內(nèi)容,將代碼分為三個部分,用函數(shù)來整合:

download_page(url):接受一個URL(通常是網(wǎng)址),下載網(wǎng)頁,而后獲取數(shù)據(jù)(當(dāng)然,不止下載網(wǎng)頁而已,還有很多內(nèi)容,但對于現(xiàn)在來說,這么講就好)

parse_article(data):接受上面的函數(shù)返回的data,并解析為我們需要的內(nèi)容

write_article(title, content):接受上面的函數(shù)返回的標(biāo)題和文章內(nèi)容,并寫入文件中。

這三個部分中,現(xiàn)在我感覺最難的是其中的parse_article(data)。當(dāng)然,一部分是因為我的經(jīng)驗不足,經(jīng)常要花很長時間才找到需要的內(nèi)容。這里,推薦讀者在瀏覽器中使用右鍵——查找元素來輔助解析網(wǎng)頁。

當(dāng)明白怎么爬取一篇文章的時候,爬取其他內(nèi)容就是一些細(xì)節(jié)上的事情了。細(xì)節(jié)上的內(nèi)容可以通過模塊的文檔來獲取。我提到的兩個第三方模塊的中文資料都比較豐富(百度一下即可),所以不再贅述。這里只說明幾個需要注意下的細(xì)節(jié):

在發(fā)送請求的時候,網(wǎng)頁可能會通過檢查頭信息中的User-Agent來判斷是否是一個人瀏覽網(wǎng)頁。最簡單的解決問題的方法就是自己寫一個頭信息,偽裝成一個人。

如果抓取的頻率過快,可能會被服務(wù)器拒絕訪問,如果IP被封了就完了。這里有兩個解決問題的思路:

使用IP代理,輪換IP訪問網(wǎng)頁

設(shè)置一個簡單的爬蟲測試服務(wù)器可以接受的訪問頻率,從慢而快的訪問網(wǎng)頁。(就是看服務(wù)器的忍受程度是多少)

網(wǎng)頁上通常不止有一個地方包含了我們所需的內(nèi)容(比如有兩個塊可以實現(xiàn)下一頁的功能),所以,一個塊難解析可以使用另一個塊,變通下嘛~

3. 爬蟲實例

這里以抓取一篇文章鯨魚有鯨語,鯨語有口音為例。剛才提到了,要實現(xiàn)三個函數(shù):

download_page(url)

parse_article(data)

write_article(title, content)

3.1 下載數(shù)據(jù)

首先是第一個函數(shù)download_page(url)。由于內(nèi)容單一,所以實現(xiàn)比較簡單(要注意的是,這里需要準(zhǔn)備一些防反爬蟲的措施)。下面將展示如何偽裝成一個瀏覽器下載網(wǎng)頁或者其中的數(shù)據(jù):

def download_page(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36"
    }
    data = requests.get(url, headers=headers).content
    return data
    

我們這里偽裝了一個火狐瀏覽器。這個信息不需要你輸入或者從這里復(fù)制,如果需要的話,可以在瀏覽器中右鍵——查看元素——網(wǎng)絡(luò)而后就可以查看消息頭并偽裝成你自己的瀏覽器了。我們這里使用的HTTP請求中的get方法,如果有看過之前的內(nèi)容(指HTTP權(quán)威指南的一部分),就可以明白這里是什么意思啦~

3.2 解析數(shù)據(jù)

下面是第二個函數(shù)parse_article(data),內(nèi)容比較復(fù)雜,而且是根據(jù)我們要爬取的文章頁面制定的。我們首先放到文章的主體上,右鍵——查看元素,可以看到主體的部分結(jié)構(gòu)是這樣的:

嗯,可以明白(如果不明白的話,請自己補習(xí)HTML的基礎(chǔ)知識。這部分在Segmantfault里面搜集即可)文章的主體部分在

中。其中,標(biāo)題在其中的

標(biāo)簽的文本內(nèi)部,而正文則是其中的

標(biāo)簽的內(nèi)容。

據(jù)此,我們可以使用beatifulsoup來實現(xiàn)我們的第二個函數(shù):

def parse_article(html):
    soup = BeautifulSoup(html, "html.parser")
    # 從上面的數(shù)據(jù)獲取html文檔并解析,這里使用的是Python自帶的HTML解釋器
    article = soup.find("div", attrs={"class": "post f"})
    # 縮小HTML文檔的解析范圍,限定在文章主體內(nèi)部。
    title = article.find("h1").getText()
    # 獲取文章主體內(nèi)部的

標(biāo)簽內(nèi)的文本,可以發(fā)現(xiàn)這就是標(biāo)題內(nèi)容。 paras = [] # 創(chuàng)建一個列表,以段落的形式,向里面填充文本。 for paragraph in article.find_all("p"): p_content = paragraph.getText() # 獲取

標(biāo)簽內(nèi)的文本,這里就是段落文本內(nèi)容。 paras.append(p_content) return title, paras # 返回標(biāo)題和參數(shù),用于寫入文件。

3.3 整理數(shù)據(jù)

獲取我們需要的所有數(shù)據(jù)(標(biāo)題和內(nèi)容)以后,需要將其寫入文件中。我們首先需要拼接一個文件名,創(chuàng)建并打開文件。這里要注意參數(shù)wb。在Python3.X中,b參數(shù)是自動添加的(如果沒有寫則會填上去,有的話就不會自己填上去);但是在Python2.X中不是這樣,所以最好填上去,避免換了版本以后出現(xiàn)一些奇怪的Bug。當(dāng)然,不換也行~

def get_article(title, url):
    file_name = title + ".txt"
    # 拼接文件名
    with codecs.open(file_name, "wb", encoding="utf-8") as fp:
        html = download_page(url)
        # 調(diào)用第一個函數(shù)獲取數(shù)據(jù)
        title2, text = parse_article(html)
        # 調(diào)用第二個函數(shù)獲取數(shù)據(jù)
        fp.write("	%s	
" % title2)
        for p in text:
            fp.write("	%s
" % p)
        # 將獲取的數(shù)據(jù)寫入文件。
        
    print("文章讀取完畢!")
    return "OK"

最后,還要再編寫一個if語句,判斷是運行還是導(dǎo)入。運行文件的時候,可以通過調(diào)用第三個函數(shù)來實現(xiàn)我們的目的。

if __name__ == "__main__":
    url = "http://jandan.net/2016/02/18/caribbean-whales.html"
    get_article(url)
4. 文章結(jié)束前的一些話

嗯,本文到這里就結(jié)束了。下面還有抓取簡單首頁文章的爬蟲。不過爬取的過程也是上面的幾步,如果看懂的話,就可以編寫出來??床欢脑挕?,其實我只是因為開心想炫耀一下,哈哈哈哈來打我啊~~


我是胡一波,集帥氣與智慧于一身的美男子,每天都被自己帥醒。如果各位發(fā)現(xiàn)這些代碼有問題的話,請跟我說,我會盡快回復(fù)并發(fā)送一塊錢!這些錢可以指定給任意人或者機(jī)構(gòu)(比如慈善組織和開源項目),就醬~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/37747.html

相關(guān)文章

  • Python大一學(xué)習(xí)感想

    摘要:關(guān)于在大一這年的所學(xué)在上學(xué)期中一對的初步看法因為自己對軟件專業(yè)有了一定的興趣讓我踏進(jìn)了這個校園。當(dāng)你完成一段代碼或者說一個項目時那種成就感真的是不言而喻了妙不可言。 ...

    番茄西紅柿 評論0 收藏2637
  • 個人感想

    摘要:對于膽子小的人來說,什么未知情況都會害怕,這感覺真讓人討厭。遠(yuǎn)程服務(wù)器找到資源并使用響應(yīng)返回該資源,值為的響應(yīng)狀態(tài)表示一個正確的響應(yīng)。 最近事好多,心好累。對于膽子小的人來說 ,什么未知情況都會害怕,這感覺真讓人討厭。 知識點 一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么? 分為4個步驟: (1),當(dāng)發(fā)送一個URL請求時,不管這個URL是Web頁面的URL還是We...

    Seay 評論0 收藏0
  • 前端渲染與SEO優(yōu)化踩坑小記

    摘要:前言在網(wǎng)站頁面后端渲染的時代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個頁面。 前言 在網(wǎng)站頁面后端渲染的時代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個頁面。 隨著前后端技術(shù)的更新,越來越多的前端框架進(jìn)入開發(fā)者們的視野,網(wǎng)站的前后分離架構(gòu)越來越得到開發(fā)者們的喜愛與認(rèn)可。 后端只提供數(shù)據(jù)接口、業(yè)務(wù)邏輯與持久化服...

    wums 評論0 收藏0
  • 前端渲染與SEO優(yōu)化踩坑小記

    摘要:前言在網(wǎng)站頁面后端渲染的時代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個頁面。 前言 在網(wǎng)站頁面后端渲染的時代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個頁面。 隨著前后端技術(shù)的更新,越來越多的前端框架進(jìn)入開發(fā)者們的視野,網(wǎng)站的前后分離架構(gòu)越來越得到開發(fā)者們的喜愛與認(rèn)可。 后端只提供數(shù)據(jù)接口、業(yè)務(wù)邏輯與持久化服...

    Benedict Evans 評論0 收藏0
  • 趁著課余時間學(xué)點Python(十四)文件操作

    摘要:我是布小禪,一枚自學(xué)萌新,跟著我每天進(jìn)步一點點吧說了這么多暫時也就夠了,那么就告辭吧 文章目錄 ?? 前言 ??? 作者簡介 ??文件操作?1??、open函數(shù)...

    abson 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<