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

資訊專欄INFORMATION COLUMN

文章內(nèi)容提取庫 goose 簡介

keithxiaoy / 3350人閱讀

摘要:是一個(gè)文章內(nèi)容提取器,可以從任意資訊文章類的網(wǎng)頁中提取文章主體,并提取標(biāo)題標(biāo)簽摘要圖片視頻等信息,且支持中文網(wǎng)頁。

爬蟲抓取數(shù)據(jù)有兩個(gè)頭疼的點(diǎn),寫過爬蟲的小伙伴們一定都深有體會:

網(wǎng)站的 防抓取 機(jī)制。你要盡可能將自己偽裝成“一個(gè)人”,騙過對方的服務(wù)器反爬驗(yàn)證。

網(wǎng)站的 內(nèi)容提取 。每個(gè)網(wǎng)站都需要你做不同的處理,而且網(wǎng)站一旦改版,你的代碼也得跟著更新。

第一點(diǎn)沒什么捷徑可走,套路見得多了,也就有經(jīng)驗(yàn)了。關(guān)于第二點(diǎn),今天咱們就來介紹一個(gè)小工具,在某些需求場景下,或許可以給你省不少事。

Goose

Goose 是一個(gè) 文章內(nèi)容提取器 ,可以從任意資訊文章類的網(wǎng)頁中提取 文章主體 ,并提取 標(biāo)題、標(biāo)簽、摘要、圖片、視頻 等信息,且 支持中文 網(wǎng)頁。它最初是由 http://Gravity.com 用 Java 編寫的。python-goose 是用 Python 重寫的版本。

有了這個(gè)庫,你從網(wǎng)上爬下來的網(wǎng)頁可以直接獲取正文內(nèi)容,無需再用 bs4 或正則表達(dá)式一個(gè)個(gè)去處理文本。

項(xiàng)目地址:
(py2) https://github.com/grangier/python-goose
(py3) https://github.com/goose3/goose3

安裝

網(wǎng)上大多數(shù)教程提到的 python-goose 項(xiàng)目目前只支持到 python 2.7??梢酝ㄟ^ pip 安裝:


 pip install goose-extractor

或者安裝官網(wǎng)上的方法從源代碼安裝:


mkvirtualenv --no-site-packages goose
git clone https://github.com/grangier/python-goose.git
cd python-goose
pip install -r requirements.txt
python setup.py install

我找到一個(gè) python 3 的版本 goose3


pip install goose3

經(jīng)過我一些簡單的測試,未發(fā)現(xiàn)兩個(gè)版本在結(jié)果上有太大的差異。

快速上手

這里使用 goose3,而 python-goose 只要把其中的 goose3 改成 goose 即可,接口都是一樣的。以我之前發(fā)過的一篇文章 如何用Python抓抖音上的小姐姐 為抓取目標(biāo)來做個(gè)演示。


from goose3 import Goose
from goose3.text import StopWordsChinese
# 初始化,設(shè)置中文分詞
g = Goose({"stopwords_class": StopWordsChinese})
# 文章地址
url = "http://zhuanlan.zhihu.com/p/46396868"
# 獲取文章內(nèi)容
article = g.extract(url=url)
# 標(biāo)題
print("標(biāo)題:", article.title)
# 顯示正文
print(article.cleaned_text)

輸出:

除了標(biāo)題 title 和正文 cleaned_text 外,還可以獲取一些額外的信息,比如:

meta_description :摘要

meta_keywords :關(guān)鍵詞

tags :標(biāo)簽

top_image :主要圖片

infos :包含所有信息的 dict

raw_html :原始 HTML 文本

如有有些網(wǎng)站限制了程序抓取,也可以根據(jù)需要添加 user-agent 信息:


 g = Goose({"browser_user_agent": "Version/5.1.2 Safari/534.52.7"})

如果是 goose3,因?yàn)槭褂昧?requests 庫作為請求模塊,因此還可以以相似方式配置 headers、proxies 等屬性。

在上述示例中使用到的 StopWordsChinese 為中文分詞器,可一定程度上提高中文文章的識別準(zhǔn)確率,但更耗時(shí)。

其他說明

Goose 雖然方便,但并不能保證每個(gè)網(wǎng)站都能精確獲取,因此 適合大規(guī)模文章的采集 ,如熱點(diǎn)追蹤、輿情分析等。它只能從概率上保證大多數(shù)網(wǎng)站可以相對準(zhǔn)確地抓取。我經(jīng)過一些嘗試后發(fā)現(xiàn),抓取英文網(wǎng)站優(yōu)于中文網(wǎng)站,主流網(wǎng)站優(yōu)于小眾網(wǎng)站,文本的提取優(yōu)于圖片的提取。

從項(xiàng)目中的 requirements.txt 文件可以看出,goose 中使用到了 Pillow、lxml、cssselect、jieba、beautifulsoup、nltk ,goose3 還用到了 requests ,我們之前很多文章和項(xiàng)目中都有所涉及:

這個(gè)男人讓你的爬蟲開發(fā)效率提升8倍
【編程課堂】jieba-中文分詞利器

如果你是使用基于 python2 的 goose,有可能會遇到 編碼 上的問題(尤其是 windows 上)。這方面可以在公眾號對話里回復(fù)關(guān)鍵詞 編碼 ,我們有過相關(guān)的講解。

除了 goose 外,還有其他的正文提取庫可以嘗試,比如 python-boilerpipe、python-readability 等。

實(shí)例

最后,我們來用 goose3 寫小一段代碼,自動抓取 愛范兒、雷鋒網(wǎng)、DoNews 上的新聞文章:


 from goose3 import Goose
from goose3.text import StopWordsChinese
from bs4 import BeautifulSoup

g = Goose({"stopwords_class": StopWordsChinese})
urls = [
    "https://www.ifanr.com/",
    "https://www.leiphone.com/",
    "http://www.donews.com/"
]
url_articles = []
for url in urls:
    page = g.extract(url=url)
    soup = BeautifulSoup(page.raw_html, "lxml")
    links = soup.find_all("a")
    for l in links:
        link = l.get("href")
        if link and link.startswith("http") and any(c.isdigit() for c in link if c) and link not in url_articles:
            url_articles.append(link)
            print(link)

for url in url_articles:
    try:
        article = g.extract(url=url)
        content = article.cleaned_text
        if len(content) > 200:
            title = article.title
            print(title)
            with open("homework/goose/" + title + ".txt", "w") as f:
                f.write(content)
    except:
        pass

這段程序所做的事情就是:

抓取網(wǎng)站首頁

從頁面上提取地址中帶有數(shù)字的鏈接(因?yàn)槲恼马摶編?shù)字,這里為了演示簡單以此判斷)

抓取這些鏈接,提取正文。如果結(jié)果超過 200 個(gè)字,就保存成文件

效果:

在此基礎(chǔ)上,你可以繼續(xù)改進(jìn)這個(gè)程序,讓它不停地去尋找新的地址并抓取文章,并對獲取到的文章進(jìn)行詞頻統(tǒng)計(jì)、生成詞云等后續(xù)操作。類似我們之前的分析案例 數(shù)據(jù)分析:當(dāng)趙雷唱民謠時(shí)他唱些什么?。進(jìn)一步完善,相信你能做出更有意思的項(xiàng)目。

相關(guān)代碼已上傳,獲取地址請?jiān)诠娞枺?Crossin的編程教室 )里回復(fù)關(guān)鍵字 goose

════
其他文章及回答:
如何自學(xué)Python | 新手引導(dǎo) | 精選Python問答 | 如何debug? | Python單詞表 | 知乎下載器 | 人工智能 | 嘻哈 | 爬蟲 | 我用Python | 高考 | requests | AI平臺

歡迎微信搜索及關(guān)注: Crossin的編程教室

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

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

相關(guān)文章

  • BeautifulSoup:網(wǎng)頁解析利器上手簡介

    摘要:文檔寫得很清楚,也有中文版,你只要看了最初的一小部分,就可以在代碼中派上用場了。 關(guān)于爬蟲的案例和方法,我們已講過許多。不過在以往的文章中,大多是關(guān)注在 如何把網(wǎng)頁上的內(nèi)容抓取下來 。今天我們來分享下,當(dāng)你已經(jīng)把內(nèi)容爬下來之后, 如何提取出其中你需要的具體信息 。 網(wǎng)頁被抓取下來,通常就是 str 字符串類型的對象 ,要從里面尋找信息,最直接的想法就是直接通過字符串的 find 方法 ...

    Carl 評論0 收藏0
  • 論壇評論提取論壇內(nèi)容提取論壇用戶信息提取

    摘要:何況不影響我們提取評論內(nèi)容,只需分類出來考慮就行黑體注意下面余弦相似度這個(gè)是我開始的時(shí)候想多了大部分情況就是日期評論用戶名,后來我沒有考慮余弦相似度分類,代碼少了,精度也沒有下降。 背景 參加泰迪杯數(shù)據(jù)挖掘競賽,這次真的學(xué)習(xí)到了不少東西,最后差不多可以完成要求的內(nèi)容,準(zhǔn)確率也還行??偣驳拇a,算上中間的過程處理也不超過500行,代碼思想也還比較簡單,主要是根據(jù)論壇的短文本特性和樓層之間...

    Wuv1Up 評論0 收藏0
  • 論壇評論提取論壇內(nèi)容提取論壇用戶信息提取

    摘要:何況不影響我們提取評論內(nèi)容,只需分類出來考慮就行黑體注意下面余弦相似度這個(gè)是我開始的時(shí)候想多了大部分情況就是日期評論用戶名,后來我沒有考慮余弦相似度分類,代碼少了,精度也沒有下降。 背景 參加泰迪杯數(shù)據(jù)挖掘競賽,這次真的學(xué)習(xí)到了不少東西,最后差不多可以完成要求的內(nèi)容,準(zhǔn)確率也還行??偣驳拇a,算上中間的過程處理也不超過500行,代碼思想也還比較簡單,主要是根據(jù)論壇的短文本特性和樓層之間...

    Pikachu 評論0 收藏0
  • 論壇評論提取論壇內(nèi)容提取論壇用戶信息提取

    摘要:何況不影響我們提取評論內(nèi)容,只需分類出來考慮就行黑體注意下面余弦相似度這個(gè)是我開始的時(shí)候想多了大部分情況就是日期評論用戶名,后來我沒有考慮余弦相似度分類,代碼少了,精度也沒有下降。 背景 參加泰迪杯數(shù)據(jù)挖掘競賽,這次真的學(xué)習(xí)到了不少東西,最后差不多可以完成要求的內(nèi)容,準(zhǔn)確率也還行。總共的代碼,算上中間的過程處理也不超過500行,代碼思想也還比較簡單,主要是根據(jù)論壇的短文本特性和樓層之間...

    clasnake 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<