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.*?>(.*?)
所以,我們增加乙個獲取頁面標題的方法
1defgettitle(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
同樣地,帖子總頁數我們也可以通過分析頁面中的共?頁來獲取。所以我們的獲取總頁數的方法如下
1defgetpagenum(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資料庫的封裝,處...