爬蟲主要就是要過濾掉網頁中沒用的信息。抓取網頁中實用的信息
通常的爬蟲架構爲:
在python爬蟲以前先要對網頁的結構知識有必定的瞭解。如網頁的標籤,網頁的語言等知識,推薦去W3School:
W3school連接進行了解
在進行爬蟲以前還要有一些工具:
1.首先Python 的開發環境:這裏我選擇了python2.7,開發的IDE爲了安裝調試方便選擇了用VS2013上的python插件,在VS上進行開發(python程序的調試與c的調試幾乎相同較爲熟悉)。
2.網頁源代碼的查看工具:儘管每一個瀏覽器都能進行網頁源代碼的查看。但這裏我仍是推薦用火狐瀏覽器和FirBug插件(同一時候這兩個也是網頁開發者必用的工具之中的一個);
FirBug插件的安裝可以在右邊的加入組件中安裝;html
其次來看試着看網頁的源代碼,這裏我以咱們要爬取的籃球數據爲例:
如我要爬取網頁中的Team Comparison表格內容爲例:
先右鍵選中如我要爬取的比分32-49。點擊右鍵選擇選擇用firBug查看元素,(FirBug的另外一個優勢是在查看源代碼時會在網頁上顯示源代碼所顯示的樣式,在網頁中個人位置及內容)網頁下方就會跳出網頁的源代碼以及32-49比分所在的位置及源代碼例如如下圖:
可以看到32-49爲網頁的源代碼爲:python
<td class="sdi-datacell" align="center">32-49</td>
當中td爲標籤的名字,class爲類的名字,align爲格式,32-49爲標籤的內容,爲咱們要爬取的內容;
但類似的標籤以及類的名字在同一個網頁中有很是多,光靠這兩個元素沒法爬下咱們所需要的數據,這時就需要查看這一標籤的父標籤,或再上一級的標籤來提取不少其它咱們要爬取數據的特徵。來過濾其它咱們所不要爬取的數據。如咱們這裏選取這張表格所在的標籤做爲我咱們進行篩選的第二個
特徵:瀏覽器
<div class="sdi-so">
<h3>Team Comparison</h3>
再來咱們來分析網頁的URL:
如咱們要爬取的網頁的URL爲:服務器
http://www.covers.com/pageLoader/pageLoader.aspx?page=/data/nba/matchups/g5_preview_12.html
因爲有搭站點的經驗,因此可以這裏
www.covers.com爲域名。
/pageLoader/pageLoader.aspxpage=/data/nba/matchups/g5_preview_12.html。可能爲放在服務器上的網頁根文件夾的/pageLoader/pageLoader.aspx?markdown
page=/data/nba/matchups/地址中的網頁。
爲了管理方便。一樣類型的網頁都會放在同一個文件夾下。以類似的命名方式命名:如這邊的網頁是以g5_preview_12.html命名的因此類似的網頁會改變g5中的5,或者_12 中的12,經過改變這兩個數字,咱們發現類似網頁可以改變12數字來獲得,
再來學習爬蟲:
這裏python爬蟲主要用到了
urllib2
BeautifulSoup
這兩個庫。BeautifulSoup的具體文檔可以在下面站點中查看:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
在爬取網頁時:
先要打開網頁,而後在調用beautifulSoup庫進行網頁的分析,再用如.find函數找到要剛剛咱們分析的特徵所在的位置,並用.text來獲取標籤的內容即咱們所要爬取的數據
如咱們對比下面代碼來進行分析:架構
response=urllib2.urlopen(url)
print response.getcode()
soup=BeautifulSoup(
response,
'html.parser',
from_encoding='utf-8'
)
links2=soup.find_all('div',class_="sdi-so",limit=2)
cishu=0
for i in links2:
if(cishu==1):
two=i.find_all('td',class_="sdi-datacell")
for q in two:
print q.text
table.write(row,col,q.text)
col=(col+1)%9
if(col==0):
row=row+1
row=row+1
file.save('NBA.xls')
cishu=cishu+1
urllib2.urlopen(url)爲打開網頁;
print response.getcode()爲測試網頁可否被打開;
soup=BeautifulSoup(
response,
‘html.parser’,
from_encoding=’utf-8’
)
爲代用Beautiful進行網頁的分析。
links2=soup.find_all(‘div’,class_=」sdi-so」,limit=2)爲進行特徵值的查詢與返回
當中咱們要查找’div’,class_=」sdi-so」,的標籤,limit=2爲限制找兩個(這是爲過濾其它類似的標籤)python爬蟲
for i in links2:
if(cishu==1):
two=i.find_all('td',class_="sdi-datacell")
for q in two:
print q.text
table.write(row,col,q.text)
col=(col+1)%9
if(col==0):
row=row+1
row=row+1
爲在找到的’div’,class_=」sdi-so」,的標籤中再進行對應的如’td’,class_=」sdi-datacell」標籤的查找;
q.text爲返回咱們所要的數據
這裏 row=row+1,row=row+1爲咱們將數據寫入到excel文件時文件格式的整理所用的;
接下來是對抓取數據的保存:
這裏咱們用了excel來保存數據用到了包:
xdrlib,sys, xlwt
函數:
file=xlwt.Workbook()
table=file.add_sheet(‘shuju’,cell_overwrite_ok=True)
table.write(0,0,’team’)
table.write(0,1,’W/L’)
table.write(row,col,q.text)
file.save(‘NBA.xls’)
爲最主要的excel寫函數,這裏再也不累述;
最後咱們爬下來數據保存格式後樣式爲:
NICE
python2.7