Python3抓取糗百、不得姐

2021-02-24 異步圖書

點擊關注 異步圖書,置頂公眾號

每天與你分享 IT好書 技術乾貨 職場知識

重要提示1:本文所列程序均基於Python3.6,低於Python3.6的Python版本可能無法運行.
重要提示2:因所抓取的網站可能隨時更改展示內容,因此程序也需及時跟進.
重要提示3:本程序僅供學習,不能拿去做壞事.

起步

1.安裝Python 3.6;
2.安裝以下庫:

1    1. requests(2.12.4);
2    2. BeautifulSoup(4.5.1)(pip install beautifulsoup4);
3    3. urllib3(1.19.1);

主要思路

整個程序,按照下面的步驟:

1.獲取要爬取頁面的URL地址(可以是分頁地址,可以在程序裡面模擬分頁);
2.通過requests(一個封裝了urllib3的網絡庫,簡化了很多網絡請求的東西)下載上面URL地址的內容到內存(以前的方式是保存臨時文件);
3.用BeautifulSoup(一個解析HTML的庫)來讀取第二步中保存在內存中的內容,並解析出我們要的主要內容部分;
4.保存到資料庫或展示(特別說明:本示例程序不包含資料庫部分),程序最終會輸出多條json數據(已經包含了來源網站(自己定義的),創建時間等)

上述部分體現在代碼中,就是如下:

首先在Main.py中,定義:

1class Budejie(object):
2    '''
3    獲取格式化後的數據.
4    '''
5    def content(self,data):
6        common = CommonGrab()
7        return common.formatContent(data,".j-r-list-c-desc")

用來格式化不得姐獲取到的數據,下面還要定義一個Qsyk來處理來自糗事百科的數據:

1class Qsyk(object):
2    '''
3    獲取格式化後的數據.
4    '''
5    def content(self,data):
6        common = CommonGrab()
7        return common.formatContent(data,".content")

代碼中還有一個Kanqu.com的抓取處理,這裡就不羅列了,這幾個唯一的區別就是:調用common.formatContent時,傳遞的第二個參數不一樣,第二個參數為要抓取的內容(HTML)的class.

CommonGrab中依賴了UserUtils.py中的代碼.

下面是CommonGrab的定義,在CommonGrab中主要做了兩件事:

抓取網頁內容,保存到內存;

解析HTML內容(使用BeautifulSoup)

將數據新增到資料庫中.(不新增資料庫到資料庫中.)

代碼如下:

1class CommonGrab(object):
2    '''
3    抓取網頁文件內容,保存到內存
4    @url 欲抓取網站地址
5    '''
6    def getPageData(self, urls, pageSize,network,timeout=(20.0,20.0)):
7        headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/43.0.2357.134  Safari/537.36"}
8        htmldata = []
9        startItem = 1
10        for x in range(startItem, pageSize):
11            tmpurl = ""
12            tmpurl = urls + "%d" % (x)
13            data = network.requestsGet(url=tmpurl,headers=headers,timeout=timeout)
14            htmldata.append(data.text)
15        return htmldata
16    '''
17    解析HTML內容(使用BeautifulSoup).
18    @data:數據內容.
19    @formatStyle:格式化參數.例如:css的名稱或者div的id.
20    返回整理過的數據列表.
21    '''
22    def formatContent(self,data,formatStyle):
23        bs = BeautifulSoup(data,"html.parser")
24        htmlutil = HTMLUtils()
25        return [htmlutil.replaceAllHtmlTag(x.text) for x in bs.select(formatStyle)]
26    
27    
28    
29    def insertDataDB(self,dataarray,source):
30        date = DateUtils()
31        createDate = date.formatDateToStr(formatv=FormatDates.YY_MM_DD_HH_MM_SS)
32        if dataarray and source:
33            insertda = [({"value":""+item.replace("","").replace("\","").replace("\u3000","").replace("n","")+"","source":""+source+"","createDate":""+createDate+""}) for item in dataarray]
34            print(insertda)
35            
36            
37            
38            
39            
40            

之後就是把上述的幾部分組合起來.

運行

運行部分的代碼如下,主要就是調用了上述幾部分的代碼:

1 print("正在執行.稍等一會")
2    qs = Qsyk()
3    cg = CommonGrab()
4    fileutil = FileUtils()
5    network = NetWorkUtils()
6    
7    
8    pageSize = 2
9    
10    
11    
12    
13    
14    
15    
16    
17    qiubaiurl = "http://www.qiushibaike.com/textnew/page/"
18    
19    htmls =cg.getPageData(qiubaiurl, pageSize,network)
20    qsbkdata= qs.content(str(htmls))
21    
22    
23    budejieurl="http://www.budejie.com/text/"
24    
25    budejiehtml=cg.getPageData(budejieurl,pageSize,network)
26    bdj=Budejie()
27    bdjdata=bdj.content(str(budejiehtml))
28    
29    
30    kanquurl = "http://www.kanqu.com/cat/1?page="
31    kanquhtml = cg.getPageData(kanquurl,pageSize,network)
32    kanqu = KanQu()
33    kanqudata = kanqu.content(str(kanquhtml))
34    
35    
36    cg.insertDataDB(qsbkdata,"qiushibake")
37    cg.insertDataDB(bdjdata,"budejie")
38    cg.insertDataDB(kanqudata,"kanqu")
39    

源碼下載

CSDN:
https://download.csdn.net/download/dcxy0/9835268
Coding.net:
https://coding.net/u/pruidong/p/Python3GetQsbkBdj/git

文件:

main.py: 運行
UserUtils.py:工具

題外話

Python 3.7 將於2018-06-15發布(參考:PEP537).

到時可能會依據Python 3.7更新此程序.

異步社區是一個有料、有貨,又專業的IT專業圖書社區,在這裡可以讀到最新、最熱的IT類圖書!我想要社區的《Python程序設計(第3版)》這本書,Python之父推薦,人生苦短,我用Python,一定要看,請大家幫我點讚!

本文來源於異步社區,作者:dcxy,作品《Python3抓取糗百、不得姐》,未經授權,禁止轉載。

推薦閱讀

相關焦點

  • VBA也能來爬蟲(抓取糗百糗圖)
     這次分享的是網抓糗事百科糗圖前30頁所有糗圖的代碼,當然其他網站的圖片也是可以批量抓取的...比如百度圖片、1024、此處省略。這次先分享到這裡,VBA網抓會繼續學習,爭取抓取出海量有深度的內容。
  • Python3與Python2 區別
    接天蓮葉無窮碧,映日荷花別樣紅--楊萬裡《曉出淨慈寺送林子方》1、整數相除: python2結果為整數, 捨棄餘數部分;python3
  • python基礎:range方法在Python2和Python3中的不同
    range(0, 5)step:步長,既下一次生成的數和這次生成的數的差,例如range(1, 10, 2) 生成[1,3,5,7,9],再如range(1,10,3) 生成[1, 4, 7]代碼示例:使用區別在python2中,range方法得到的結果就是一個確定的列表對象,列表對象所擁有的方法,range方法生成的結果對象都可以直接使用,而在python3
  • 未明學院:Python2與Python3的主要區別
    python3源碼規範、清晰、簡單優美。需要注意的是,現在流行的都是python3系列,並且2018年3月,該語言作者在郵件列表上宣布Python 2.7將於2020年1月1日終止支持。用戶如果想要在這個日期之後繼續得到與Python 2.7有關的支持,則需要付費給商業供應商。
  • SEO的索引和抓取是什麼意思,外貿自建站如何優化索引和抓取?
    抓取和索引這兩件事就是SEO領域中簡單而又重要的觀念,熟悉了解它們之後便可以優化搜尋引擎蜘蛛抓取、索引你的網站。 索引完成之後,用戶才能在搜尋引擎中找到你的網站,簡單來講,先有抓取才會有索引,通過Google站長工具,我們可以看到網站被抓取、索引的情況。 抓取和索引是完全不同的兩件事,有可能你的頁面被Google正常抓取,卻沒有將頁面索引到搜尋引擎上,這樣的情況一般來講就很有可能是你的網站有違規的行為,又或者排名太差,在搜尋引擎上根本找不到自己的頁面。
  • Python3長徵路第004天--BeautifulSoup庫你也報錯的時候!
    文/愛琳玩python今天是python長徵之路的第四天了,感覺時間過得還是挺快的,在這裡還是先感謝你的點擊加閱讀,對我python3長徵之路的支持,在做這個python3長徵之路時,我有想過放棄,因為我畢竟學歷很低,不怕各位朋友笑話,我就一個高中生,而且還是個讀了4年的高中生,到最後都沒有考起大學的這麼一個人,當我在出生社會後,換過很多工作,心中卻依然放不下高中時的一個夢想
  • 腦科學方向|Python3的安裝與環境搭建
    本節來學習python3的安裝與環境搭建。考慮到大部分人的需求與原有經驗,之後的學習都會以 windows 10(64位) 作業系統為系統平臺,而不是Ubuntu 16等linux系統。講3小點:1. python開發時,儘量使用tab鍵代替空格鍵(python對縮進敏感);2. python3默認支持中文,文本開頭直接寫正式代碼即可;3. 代碼文件的名字不能和已有系統庫名一樣,否則運行報錯。
  • python3基礎之生成器
    初識生成器說到生成器還是要從列表推導式說起,關於列表推導式可以看看《python3基礎之如何使用列表推導式》。
  • Power Query 網絡抓取POST案例:歷年各省分數線抓取
    高考倒計時4天,首先預祝考生們不緊張,考出理想成績,等到考完試分數出來時大家就要關心高考志願填報的問題了,記得去年有一個網站抓取過分數線的數據,我找出來再試試,結果不好用了。去年抓取的時候直接找到真實的網址,就可以直接定義函數抓取,很方便。不過網絡抓取就是這樣,網站伺服器端稍作改動,之前的方法就有可能失效,要重新來分析網站,找到新的方法。
  • Python3安裝教程
    自2020年1月1日起,python2已經終止更新與技術支持了,所以我們的首選應該是python3版本,搜索教程和購買書籍時也要注意看其是基於python2還是python3,如果還是基於python2那就甭看了。
  • python3處理JSON數據
    前言使用python做開發,經常會遇到json數據解析問題,本文,我將帶領大家學習使用python3處理json數據,並將字典反轉義為json數據。一、基礎知識1.什麼是JSONJSON是一種輕量級的數據交換格式,便於任何機器理解,採用完全獨立於程式語言的文本格式來存儲和表示數據。
  • 「摺紙食人花」:抓取超過自身100倍的重量!
    那些被人折出來的工藝品一個個都精緻巧妙的不得了,簡直是鬼斧神工般的存在。但是,各位朋友們注意了,小編今天要給大家介紹的是一個能引起軍方注意的與摺紙相關的東西。是的,大家沒有看錯,的確是引起了軍方的注意,它就是MIT「食人花」。這個被稱為MIT食人花的東西是一個抓取器,它的靈感就來源於摺紙。
  • 屏蔽蜘蛛抓取的後果
    爬蟲是搜尋引擎用來抓取網站的一套自動化程序,是搜尋引擎基本原理所必須的一環,屏蔽爬蟲抓取之後,搜尋引擎蜘蛛將無法抓取網站。除了有品牌保護的品牌詞會排名第一,其他關鍵詞的排名基本會消失,甚至索引也會被清除。
  • 安卓手機MTK平臺怎麼抓取Log? MTK平臺抓取Log的方法
    安卓手機MTK平臺怎麼抓取Log? MTK平臺抓取Log的方法時間:2016-07-02 10:42   來源:三聯    責任編輯:沫朵 川北在線核心提示:原標題:安卓手機MTK平臺怎麼抓取Log?
  • 機器人智能抓取AI+Grasp
    基於RGB圖片的抓取美國加州大學伯克利分校提出了利用大量的物體三維模型和分析的方法生成抓取數據集,並利用深度圖和卷積神經網絡(CNN)對抓取進行分類 [2]。他們首先把抓取簡化為一個從上至下的夾取(top-down grasp),根據輸入的點雲生成上百個成對的抓取候選,再利用CNN對候選抓取進行快速評分,從而得到最好的抓取。
  • 《怪物獵人:世界》孽鬼要怎麼抓取 孽鬼抓取方法介紹
    那麼就來看看「yoh」分享的《怪物獵人:世界》孽鬼抓取方法介紹吧。 《怪物獵人:世界》孽鬼抓取方... 《怪物獵人:世界》中的孽鬼是遊戲中的一種可捕捉生物,但是有很多小夥伴還不清楚具體的捕捉方法及位置。那麼就來看看「yoh」分享的《怪物獵人:世界》孽鬼抓取方法介紹吧。
  • 「蛇型」機械抓取器誕生,可抓取比自身重220倍的物體
    近日,雪梨新南威爾斯大學的團隊研發了一種柔軟的織物機械抓取器,它可以像象鼻一樣抓取和釋放物體而不會將其損壞。機械抓取器是一種仿生工具,它的外形酷似一條蛇,設計靈感來自於研究人員對自然界中諸如大象、蟒蛇、章魚等動物肢體行為的觀察。
  • 愛幫網抓取大眾點評網信息 是否侵權?
    溝通未果,大眾點評網也曾多次試圖採用技術手段,封了愛幫網的抓取IP,但後者還是不斷變換IP到大眾點評網抓取內容。而大眾點評訴愛幫網侵權一案,情況與筆者曾經歷的抄襲剽竊基本相似,只不過愛幫網號稱是技術抓取,而扒取我網站內容的是人工COPY而已,但技術抓取和人工COPY從法律上並無本質區別,因為所謂的技術抓取也是提前以人工意圖進行設定,並最終按照設計人主管意志進行的程序抓取行為,最終體現仍舊是幕後的操控者意志。那麼在本案中,愛幫網的這種抓取行為在法律上到底該如何認定?是否存在侵權的可能?
  • 使用 Scrapy 快速抓取網頁
    Scrapy 是 Python 中一個非常棒的網頁抓取框架。它可以在大規模進行網頁抓取時,處理一些常見的問題。通過 Scrapy,眾多 Spider 類定義了應該如何抓取一個網頁,包括連結追蹤以及如何提取這些連結中的數據。scrapy.cfg 是修改默認配置的文件。這個例子中,我們將從一個虛擬的電子商務網站上抓取單個產品。下面是我們要抓取的第一個產品:
  • 如何屏蔽搜尋引擎抓取?
    當我們看到要屏蔽抓取的時候,大多數SEOer想到的都是robots.txt文件。因為在我們的認知中,robot文件可以有效的杜姐搜尋引擎抓取某些頁面。但是要知道,雖然這個方式很不錯,但是更多時候小丹認為它比較適合於在網站沒有完成,為了避免之後的死鏈或者考察期而存在的。    若單單為了屏蔽某個搜尋引擎的抓取,我們大可不必為空間造成負累,只要使用一點簡單的代碼即可。