摘要:如果有人有興趣的話,可以編寫則個下面,我會說明在編寫爬蟲過程中的所思所想。文章讀取完畢最后,還要再編寫一個語句,判斷是運行還是導入。文章結束前的一些話嗯,本文到這里就結束了。
今天,根據網頁的結構,嘗試了下如何抓取煎蛋首頁上的文章。目標很簡單:
根據首頁上面的文章鏈接,載入文章,而后將文章的標題和正文(不帶圖片)抓取下來。
抓取首頁上面文章的鏈接,標題,作者和所屬標簽。
按標題將文章寫入一個.txt格式的文件
將首頁上抓取的內容整合起來,制作成格式如下的Markdown簡介。
首頁的簡介格式如下:
**文章標題**:鯨魚有鯨語,鯨語有口音 **文章鏈接**:[http://jandan.net/2016/02/18/caribbean-whales.html](http://jandan.net/2016/02/18/caribbean-whales.html) **譯者**:Cedric **標簽**:走進科學 ...
如此反復即可。這里要說明下,由于煎蛋首頁和余下頁碼的網頁結構不同,我沒有再寫余下頁面的簡介。如果有人有興趣的話,可以編寫則個~下面,我會說明在編寫爬蟲過程中的所思所想。
1. 爬蟲前的準備我這里使用了Python中的以下模塊:
beautifulsoup:第三方模塊,用于解析網頁內容。
requests:第三方模塊,用于獲取網頁內容。
re:內置模塊,用于編寫正則表達式
codecs:內置模塊,用于操作文件
這便是全部準備了。在這里要多嘴一句,包括re模塊在內都存在替代品,如果需要可以根據自己的喜好來選擇。
2. 分析程序邏輯在編寫代碼之前,要分析如何抓取并處理網頁。以抓取一篇文章鯨魚有鯨語,鯨語有口音為例。我們要實現:
下載網頁,獲取數據——源代碼或者json數據
解析數據,從數據中抽出我們需要的內容——這里是文章標題和文章內容(只有文字)
整理數據,將解析好的數據寫入文件中。
這樣,可以根據實現的內容,將代碼分為三個部分,用函數來整合:
download_page(url):接受一個URL(通常是網址),下載網頁,而后獲取數據(當然,不止下載網頁而已,還有很多內容,但對于現在來說,這么講就好)
parse_article(data):接受上面的函數返回的data,并解析為我們需要的內容
write_article(title, content):接受上面的函數返回的標題和文章內容,并寫入文件中。
這三個部分中,現在我感覺最難的是其中的parse_article(data)。當然,一部分是因為我的經驗不足,經常要花很長時間才找到需要的內容。這里,推薦讀者在瀏覽器中使用右鍵——查找元素來輔助解析網頁。
當明白怎么爬取一篇文章的時候,爬取其他內容就是一些細節上的事情了。細節上的內容可以通過模塊的文檔來獲取。我提到的兩個第三方模塊的中文資料都比較豐富(百度一下即可),所以不再贅述。這里只說明幾個需要注意下的細節:
在發送請求的時候,網頁可能會通過檢查頭信息中的User-Agent來判斷是否是一個人瀏覽網頁。最簡單的解決問題的方法就是自己寫一個頭信息,偽裝成一個人。
如果抓取的頻率過快,可能會被服務器拒絕訪問,如果IP被封了就完了。這里有兩個解決問題的思路:
使用IP代理,輪換IP訪問網頁
設置一個簡單的爬蟲測試服務器可以接受的訪問頻率,從慢而快的訪問網頁。(就是看服務器的忍受程度是多少)
網頁上通常不止有一個地方包含了我們所需的內容(比如有兩個塊可以實現下一頁的功能),所以,一個塊難解析可以使用另一個塊,變通下嘛~
3. 爬蟲實例這里以抓取一篇文章鯨魚有鯨語,鯨語有口音為例。剛才提到了,要實現三個函數:
download_page(url)
parse_article(data)
write_article(title, content)
3.1 下載數據首先是第一個函數download_page(url)。由于內容單一,所以實現比較簡單(要注意的是,這里需要準備一些防反爬蟲的措施)。下面將展示如何偽裝成一個瀏覽器下載網頁或者其中的數據:
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
我們這里偽裝了一個火狐瀏覽器。這個信息不需要你輸入或者從這里復制,如果需要的話,可以在瀏覽器中右鍵——查看元素——網絡而后就可以查看消息頭并偽裝成你自己的瀏覽器了。我們這里使用的HTTP請求中的get方法,如果有看過之前的內容(指HTTP權威指南的一部分),就可以明白這里是什么意思啦~
3.2 解析數據下面是第二個函數parse_article(data),內容比較復雜,而且是根據我們要爬取的文章頁面制定的。我們首先放到文章的主體上,右鍵——查看元素,可以看到主體的部分結構是這樣的:
嗯,可以明白(如果不明白的話,請自己補習HTML的基礎知識。這部分在Segmantfault里面搜集即可)文章的主體部分在 標簽的內容。 據此,我們可以使用beatifulsoup來實現我們的第二個函數: 標簽內的文本,這里就是段落文本內容。
paras.append(p_content)
return title, paras
# 返回標題和參數,用于寫入文件。 獲取我們需要的所有數據(標題和內容)以后,需要將其寫入文件中。我們首先需要拼接一個文件名,創建并打開文件。這里要注意參數wb。在Python3.X中,b參數是自動添加的(如果沒有寫則會填上去,有的話就不會自己填上去);但是在Python2.X中不是這樣,所以最好填上去,避免換了版本以后出現一些奇怪的Bug。當然,不換也行~ 最后,還要再編寫一個if語句,判斷是運行還是導入。運行文件的時候,可以通過調用第三個函數來實現我們的目的。 嗯,本文到這里就結束了。下面還有抓取簡單首頁文章的爬蟲。不過爬取的過程也是上面的幾步,如果看懂的話,就可以編寫出來??床欢脑挕?,其實我只是因為開心想炫耀一下,哈哈哈哈來打我啊~~ 我是胡一波,集帥氣與智慧于一身的美男子,每天都被自己帥醒。如果各位發現這些代碼有問題的話,請跟我說,我會盡快回復并發送一塊錢!這些錢可以指定給任意人或者機構(比如慈善組織和開源項目),就醬~ 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。 轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37747.htmldef parse_article(html):
soup = BeautifulSoup(html, "html.parser")
# 從上面的數據獲取html文檔并解析,這里使用的是Python自帶的HTML解釋器
article = soup.find("div", attrs={"class": "post f"})
# 縮小HTML文檔的解析范圍,限定在文章主體內部。
title = article.find("h1").getText()
# 獲取文章主體內部的
3.3 整理數據
標簽內的文本,可以發現這就是標題內容。
paras = []
# 創建一個列表,以段落的形式,向里面填充文本。
for paragraph in article.find_all("p"):
p_content = paragraph.getText()
# 獲取
def get_article(title, url):
file_name = title + ".txt"
# 拼接文件名
with codecs.open(file_name, "wb", encoding="utf-8") as fp:
html = download_page(url)
# 調用第一個函數獲取數據
title2, text = parse_article(html)
# 調用第二個函數獲取數據
fp.write(" %s
" % title2)
for p in text:
fp.write(" %s
" % p)
# 將獲取的數據寫入文件。
print("文章讀取完畢!")
return "OK"
if __name__ == "__main__":
url = "http://jandan.net/2016/02/18/caribbean-whales.html"
get_article(url)
4. 文章結束前的一些話
摘要:關于在大一這年的所學在上學期中一對的初步看法因為自己對軟件專業有了一定的興趣讓我踏進了這個校園。當你完成一段代碼或者說一個項目時那種成就感真的是不言而喻了妙不可言。 ...
摘要:前言在網站頁面后端渲染的時代,開發者只需要按照規范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網站的各個頁面。 前言 在網站頁面后端渲染的時代,開發者只需要按照規范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網站的各個頁面。 隨著前后端技術的更新,越來越多的前端框架進入開發者們的視野,網站的前后分離架構越來越得到開發者們的喜愛與認可。 后端只提供數據接口、業務邏輯與持久化服...
摘要:前言在網站頁面后端渲染的時代,開發者只需要按照規范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網站的各個頁面。 前言 在網站頁面后端渲染的時代,開發者只需要按照規范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網站的各個頁面。 隨著前后端技術的更新,越來越多的前端框架進入開發者們的視野,網站的前后分離架構越來越得到開發者們的喜愛與認可。 后端只提供數據接口、業務邏輯與持久化服...
摘要:我是布小禪,一枚自學萌新,跟著我每天進步一點點吧說了這么多暫時也就夠了,那么就告辭吧 文章目錄 ?? 前言 ??? 作者簡介 ??文件操作?1??、open函數...
閱讀 2143·2023-04-26 00:38
閱讀 1929·2021-09-07 10:17
閱讀 887·2021-09-02 15:41
閱讀 636·2021-08-30 09:45
閱讀 540·2019-08-29 17:25
閱讀 3203·2019-08-29 15:07
閱讀 2181·2019-08-29 12:52
閱讀 3733·2019-08-26 13:35