轉 Python爬蟲實戰二之爬取百度貼吧帖子

2022-08-28 01:42:08 字數 3460 閱讀 3148

2.指定是否只抓取樓主發帖內容

3.將抓取到的內容分析並儲存到檔案

比如:這是乙個關於nba50大的盤點,分析一下這個位址。

http://  代表資源傳輸使用http協議

/p/3138733512 是伺服器某個資源,即這個帖子的位址定位符

see_lz和pn是該url的兩個引數,分別代表了只看樓主和帖子頁碼,等於1表示該條件為真

所以我們可以把url分為兩部分,一部分為基礎部分,一部分為引數部分。

例如,上面的url我們劃分基礎部分是 引數部分是 ?see_lz=1&pn=1

其中,有些帖子我們想指定給程式是否要只看樓主,所以我們把只看樓主的引數初始化放在類的初始化上,即init方法。另外,獲取頁面的方法我們需要知道乙個引數就是帖子頁碼,所以這個引數的指定我們放在該方法中。

綜上,我們初步構建出基礎**如下:

1

#-*- coding:utf-8 -*-

2import

urllib

3import

urllib2

4importre5

import sys #16

import

thread

7import

time89

#10#

11class

bdtb(object):

12"""

docstring for qsbk

"""13

#初始化,傳入基位址,是否只看樓主的引數

14def

__init__

(self,baseurl,seelz):

15 self.baseurl =baseurl

16 self.seelz = '

?see_lz=

'+str(seelz)

1718

#傳入頁碼,獲取該頁帖子的**

19def

getpage(self,pagenum):

20try

:21 url = self.baseurl + self.seelz + '

&pn=

' +str(pagenum)

22 request =urllib2.request(url)

23 response =urllib2.urlopen(request)24#

pagecode = response.read().decode('utf-8')

25print url + '\n'

26print

response.read()

27return

response

28except

urllib2.urlerror, e:

29if hasattr(e,"

code"):

30print

e.code

31if hasattr(e,"

reason"):

32print

e.reason

33return

none

3435

if__name__ == '

__main__':

36 baseurl = '

'37 bdtb = bdtb(baseurl,1)

38 bdtb.getpage(1)

首先,讓我們提取帖子的標題。

在瀏覽器中審查元素,或者按f12,檢視頁面源**,我們找到標題所在的**段,可以發現這個標題的html**是

h3 class

="core_title_txt pull-left text-overflow "

title

="純原創我心中的nba2014-2015賽季現役50大"

style

="width: 396px"

>純原創我心中的nba2014-2015賽季現役50大

h3>

所以我們想提取標籤中的內容,同時還要指定這個class確定唯一,因為h1標籤實在太多啦。

正規表示式如下

h3 class

="core_title_txt.*?>(.*?)

所以,我們增加乙個獲取頁面標題的方法

1

defgettitle(self):

2 page = self.getpage(1)

3 pattern = re.compile('

',re.s)

4 result =re.search(pattern,page)5if

result:

6print result.group(1)

7return result.group(1).strip()

8else:9

return none

同樣地,帖子總頁數我們也可以通過分析頁面中的共?頁來獲取。所以我們的獲取總頁數的方法如下

1

defgetpagenum(self):

2 page = self.getpage(1)

3 pattern = re.compile('

.*?(.*?)

',re.s)

4 result =re.search(pattern,page)5if

result:6#

print result.group(1) #測試輸出

7return result.group(1).strip()

8else:9

return none

"

post_content_.*?>(.*?)

相應地,獲取頁面所有樓層資料的方法可以寫成如下方法

1

#獲取每一層樓的內容,傳入頁面內容

2def

getcontent(self,page):

3 pattern = re.compile('

(.*?)

',re.s)

4 items =re.findall(pattern,page)

5for item in

items:

6print item

真是醉了,還有一大片換行符和符,好口怕!既然這樣,我們就要對這些文字進行處理,把各種各樣複雜的標籤給它剔除掉,還原精華內容,把文字處理寫成乙個方法也可以,不過為了實現更好的**架構和**重用,我們可以考慮把標籤等的處理寫作乙個類。

那我們就叫它tool(工具類吧),裡面定義了乙個方法,叫replace,是替換各種標籤的。在類中定義了幾個正規表示式,主要利用了re.sub方法對文字進行匹配後然後替換。具體的思路已經寫到注釋中,大家可以看一下這個類

Python實戰爬蟲 爬取段子

不管三七二十一我們先導入模組 段子所在的 import re import requests 如果沒這模組執行cmd pip install requests領域 web開發,爬蟲,資料分析,資料探勘,人工智慧 零基礎到專案實戰,7天學習上手做專案 獲取 的內容 段子所在的 import re im...

python爬蟲實戰 爬取豆瓣影評資料

爬取豆瓣影評資料步驟 1 獲取網頁請求 2 解析獲取的網頁 3 提速資料 4 儲存檔案 1 匯入需要的庫 import urllib.request from bs4 import beautifulsoup 隨機數的庫 import random 時間庫 import time 庫 import ...

Python爬蟲實戰之爬取鏈家廣州房價 03儲存

系列目錄 python爬蟲實戰之爬取鏈家廣州房價 01簡單的單頁爬蟲 python爬蟲實戰之爬取鏈家廣州房價 02把小爬蟲變大 這一小節主要講一下前面一直沒有實現的儲存,儲存主要分兩大類 檔案和資料庫。結合這次爬蟲的資料量及後期分析的需要,這次主要介紹sqlite。通過對sqlite資料庫的封裝,處...