成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

編寫(xiě)爬蟲(chóng)的一些感想(就是高興)

inapt / 689人閱讀

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

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

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

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

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

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

首頁(yè)的簡(jiǎn)介格式如下:

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

**文章鏈接**:[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ù)即可。這里要說(shuō)明下,由于煎蛋首頁(yè)和余下頁(yè)碼的網(wǎng)頁(yè)結(jié)構(gòu)不同,我沒(méi)有再寫(xiě)余下頁(yè)面的簡(jiǎn)介。如果有人有興趣的話,可以編寫(xiě)則個(gè)~下面,我會(huì)說(shuō)明在編寫(xiě)爬蟲(chóng)過(guò)程中的所思所想。

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

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

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

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

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

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

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

2. 分析程序邏輯

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

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

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

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

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

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

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

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

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

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

在發(fā)送請(qǐng)求的時(shí)候,網(wǎng)頁(yè)可能會(huì)通過(guò)檢查頭信息中的User-Agent來(lái)判斷是否是一個(gè)人瀏覽網(wǎng)頁(yè)。最簡(jiǎn)單的解決問(wèn)題的方法就是自己寫(xiě)一個(gè)頭信息,偽裝成一個(gè)人。

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

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

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

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

3. 爬蟲(chóng)實(shí)例

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

download_page(url)

parse_article(data)

write_article(title, content)

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

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

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

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

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

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

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

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

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

據(jù)此,我們可以使用beatifulsoup來(lái)實(shí)現(xiàn)我們的第二個(gè)函數(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)建一個(gè)列表,以段落的形式,向里面填充文本。 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ù),用于寫(xiě)入文件。

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

獲取我們需要的所有數(shù)據(jù)(標(biāo)題和內(nèi)容)以后,需要將其寫(xiě)入文件中。我們首先需要拼接一個(gè)文件名,創(chuàng)建并打開(kāi)文件。這里要注意參數(shù)wb。在Python3.X中,b參數(shù)是自動(dòng)添加的(如果沒(méi)有寫(xiě)則會(huì)填上去,有的話就不會(huì)自己填上去);但是在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)用第一個(gè)函數(shù)獲取數(shù)據(jù)
        title2, text = parse_article(html)
        # 調(diào)用第二個(gè)函數(shù)獲取數(shù)據(jù)
        fp.write("	%s	
" % title2)
        for p in text:
            fp.write("	%s
" % p)
        # 將獲取的數(shù)據(jù)寫(xiě)入文件。
        
    print("文章讀取完畢!")
    return "OK"

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

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

嗯,本文到這里就結(jié)束了。下面還有抓取簡(jiǎn)單首頁(yè)文章的爬蟲(chóng)。不過(guò)爬取的過(guò)程也是上面的幾步,如果看懂的話,就可以編寫(xiě)出來(lái)??床欢脑挕?,其實(shí)我只是因?yàn)殚_(kāi)心想炫耀一下,哈哈哈哈來(lái)打我啊~~


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37747.html

相關(guān)文章

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

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

    番茄西紅柿 評(píng)論0 收藏2637
  • 個(gè)人感想

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

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

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

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

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

    Benedict Evans 評(píng)論0 收藏0
  • 趁著課余時(shí)間學(xué)點(diǎn)Python(十四)文件操作

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

    abson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<