1. 程式人生 > >Python網路爬蟲入門,帶你領略Python爬蟲的樂趣!

Python網路爬蟲入門,帶你領略Python爬蟲的樂趣!

前段時間小編寫了一篇有關於Python入門的文章,我覺得寫的還是不夠好,所以我特地補上一篇Python爬蟲的入門的,本文特別適合Python小白,剛學習爬蟲不久。接下來就讓我們一起來寫第一個例子吧!

 

一、我們的目標

1、作為第一個例子,我就以抓取糗事百科熱門貼為例吧

2、糗事百科熱門帖,獲取其釋出者、評論、點贊數、評論等資訊

3、將資訊清洗並列印,迴圈輸出

4、設計程式,使可以選擇抓取的頁面範圍

5、將每一頁的資訊儲存到文字

二、開發環境介紹

phthon 2.7.13

IDE:PyCharm

採用庫:re、requests、time

三、步驟

1、獲取原始碼

首先用requests庫的get方法獲取首頁原始碼

<span style="font-size:14px;">user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
headers={'User_agent': user_agent}
r=requests.get(url,headers=headers)
result=r.text
print result</span>

結果輸出如下

 

2、正則匹配

 

開啟360瀏覽器,右鍵點選審查元素,可以清晰的看到釋出者、年齡、釋出內容、評論數等的分佈及標籤構造,根據各種關鍵詞可以匹配正則設定迴圈,列印輸

<span style="font-size:14px;">pattern=re.compile('<div class="author.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?<div class="content">.*?<span>(.*?)</span>.*?<span.*?stats-vote.*?number">(.*?)</i>.*?stats-comments.*?number">(.*?)</i>.*?up.*?number hidden">(.*?)</span>.*?down.*?number hidden">(.*?)</span>'
,re.S) items=re.findall(pattern,result) <span style="white-space:pre"> </span>number=1 for item in items: print u'' print number,u'樓',u'\n樓主:',item[0],u'',item[1],u'歲',u'\n發言:',self.tool.replace(item[2]),u'\n好笑:',item[3],u'\n評論:',item[4],u'\n贊:',item[5],u'\n踩:',item[6] time.sleep(0.1) number+=1</span>

3、 面向物件

<span style="font-size:14px;">#定義一個Spider類
class Spider(object):
 #初始化引數
 def __init__(self):
 self.siteURL ='http://www.qiushibaike.com/'
 self.tool=Tool()
 #獲取網頁原始碼
 def getSource(self,url):
 user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
 headers = {'User_agent': user_agent}
 r=requests.get(url,headers=headers)
 result=r.text
 return result
 #獲取詳情頁資訊,並迴圈列印輸出
 def getDetailPage(self,detailURL):
 source=self.getSource(detailURL)
 pattern=re.compile('<div class="author.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?<div class="content">.*?<span>(.*?)</span>.*?<span.*?stats-vote.*?number">(.*?)</i>.*?stats-comments.*?number">(.*?)</i>.*?up.*?number hidden">(.*?)</span>.*?down.*?number hidden">(.*?)</span>',re.S)
 items=re.findall(pattern,source)
 number=1
 for item in items:
 print u''
 print number,u'樓',u'\n樓主:',item[0],u'',item[1],u'歲',u'\n發言:',self.tool.replace(item[2]),u'\n好笑:',item[3],u'\n評論:',item[4],u'\n贊:',item[5],u'\n踩:',item[6]
 time.sleep(0.1)
 number+=1
 return items</span><strong>
</strong>

4、資料清洗

可以看到所得程式碼中含較多的</br><br><br />等標籤,可以定義一個Tool類進行清洗

class Tool():
 def replace(self,x):
 x=re.sub(re.compile('<br>|</br>|/>|<br'),"",x)
 return x.strip()

5、文字儲存

定義一個saveDetailPage函式,傳入檔名和資料,在此不贅述

6、獲取多頁

上面的內容我們已經成功用正則表示式匹配出想要的內容,想獲取多頁,只需設定一個迴圈即可

所以關鍵內容來啦!

觀察底面標籤可知熱門評論共35頁,觀察網頁位址列可發現規律:

首頁 url即'糗事百科 - 超搞笑的原創糗事笑話分享社群',從第二頁開始為 url+/8hr/page/x/?s=4964698 ,可以推測:8hr為8小時內最熱門,x即頁數,後面s=4964698,博主猜測是訪問該網站的總次數,因為如果在同一個會話中,s是相同的,反之另外開啟訪問時s又不同,且每次發現s有增加!

由以上分析,我們要遍歷這35頁,要分情況討論。

最後來看抓取的結果:

 

 

 

以上就是小編帶領大家一起學習的Python爬蟲的基礎入門啦,喜歡本文的小夥伴或者覺得本文對你有幫助可以點播關注或轉發,如果你有好的意見或意見也可以在下面留言或評論,如果你想進一步學習Python或者瞭解Python,可以私信小編0505,小編準備了一份適合Python初學者的系統入門學習資料可供領取喔。文末小編奉上本次的原始碼!

四、奉上原始碼

<span style="font-size:14px;">#usr/bin/env python
# -*- coding: utf-8 -*-
import re
import requests
import time
#定義一個Tool類,方便用replace方法把換行符等刪除
class Tool():
 def replace(self,x):
 x=re.sub(re.compile('<br>|</br>|/>|<br'),"",x)
 return x.strip()
#定義一個Spider類
class Spider(object):
 #初始化引數
 def __init__(self):
 self.siteURL ='http://www.qiushibaike.com/'
 self.tool=Tool()
 #獲取網頁原始碼
 def getSource(self,url):
 user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
 headers = {'User_agent': user_agent}
 r=requests.get(url,headers=headers)
 result=r.text
 return result
 #獲取詳情頁資訊,並迴圈列印輸出
 def getDetailPage(self,detailURL):
 source=self.getSource(detailURL)
 pattern=re.compile('<div class="author.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?<div class="content">.*?<span>(.*?)</span>.*?<span.*?stats-vote.*?number">(.*?)</i>.*?stats-comments.*?number">(.*?)</i>.*?up.*?number hidden">(.*?)</span>.*?down.*?number hidden">(.*?)</span>',re.S)
 items=re.findall(pattern,source)
 number=1
 for item in items:
 print u''
 print number,u'樓',u'\n樓主:',item[0],u'',item[1],u'歲',u'\n發言:',self.tool.replace(item[2]),u'\n好笑:',item[3],u'\n評論:',item[4],u'\n贊:',item[5],u'\n踩:',item[6]
 time.sleep(0.1)
 number+=1
 return items
 #儲存資訊寫入檔案
 def saveDetailPage(self,data,name):
 fileName='page'+name+'.'+'txt'
 f=open(fileName,'wb')
 f.write(data.encode('utf-8'))
 print u'',u'成功將資料儲存入檔案',fileName
 f.close()
 #對一頁的操作
 def OnePage(self,detailURL,name):
 data=self.getDetailPage(detailURL)
 self.saveDetailPage(str(data),str(name))
 #對很多頁的操作
 #分兩種情況討論,start頁等於1\start頁大於1
 def getAllPage(self,start,end):
 if start==1:
 print u'正在獲取第1頁的資料...'
 detailURL=self.siteURL
 self.OnePage(detailURL,start)
 number=2
 for page in range(2, end+1):
 print u'正在獲取第', number, u'頁的資料...'
 detailURL = self.siteURL + '8hr/page/' + str(page) + '/?s=4964625'
 self.OnePage(detailURL,number)
 time.sleep(2)
 number +=1
 if number==end+1:
 print u'',u'\n載入結束!'
 return False
 elif start>1:
 number=start
 for page in range(start,end+1):
 print u'',u'\n正在獲取第',number,u'頁的資料...'
 detailURL=self.siteURL + '8hr/page/' +str(page)+ '/?s=4964625'
 self.OnePage(detailURL,number)
 time.sleep(2)
 number += 1
 if number==end+1:
 print u'',u'載入結束!'
 return False
spider=Spider()
spider.getAllPage(start=int(raw_input('請輸入起始頁數:')),end=int(raw_input('請輸入結束頁數)

本文來自網路,如有侵權,請聯絡小編刪除!

 

前段時間小編寫了一篇有關於Python入門的文章,我覺得寫的還是不夠好,所以我特地補上一篇Python爬蟲的入門的,本文特別適合Python小白,剛學習爬蟲不久。接下來就讓我們一起來寫第一個例子吧!

 

一、我們的目標

1、作為第一個例子,我就以抓取糗事百科熱門貼為例吧

2、糗事百科熱門帖,獲取其釋出者、評論、點贊數、評論等資訊

3、將資訊清洗並列印,迴圈輸出

4、設計程式,使可以選擇抓取的頁面範圍

5、將每一頁的資訊儲存到文字

二、開發環境介紹

phthon 2.7.13

IDE:PyCharm

採用庫:re、requests、time

三、步驟

1、獲取原始碼

首先用requests庫的get方法獲取首頁原始碼

<span style="font-size:14px;">user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
headers={'User_agent': user_agent}
r=requests.get(url,headers=headers)
result=r.text
print result</span>

結果輸出如下

 

2、正則匹配

 

開啟360瀏覽器,右鍵點選審查元素,可以清晰的看到釋出者、年齡、釋出內容、評論數等的分佈及標籤構造,根據各種關鍵詞可以匹配正則設定迴圈,列印輸

<span style="font-size:14px;">pattern=re.compile('<div class="author.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?<div class="content">.*?<span>(.*?)</span>.*?<span.*?stats-vote.*?number">(.*?)</i>.*?stats-comments.*?number">(.*?)</i>.*?up.*?number hidden">(.*?)</span>.*?down.*?number hidden">(.*?)</span>',re.S)
items=re.findall(pattern,result)
 <span style="white-space:pre">	</span>number=1
 for item in items:
 print u''
 print number,u'樓',u'\n樓主:',item[0],u'',item[1],u'歲',u'\n發言:',self.tool.replace(item[2]),u'\n好笑:',item[3],u'\n評論:',item[4],u'\n贊:',item[5],u'\n踩:',item[6]
 time.sleep(0.1)
 number+=1</span>

3、 面向物件

<span style="font-size:14px;">#定義一個Spider類
class Spider(object):
 #初始化引數
 def __init__(self):
 self.siteURL ='http://www.qiushibaike.com/'
 self.tool=Tool()
 #獲取網頁原始碼
 def getSource(self,url):
 user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
 headers = {'User_agent': user_agent}
 r=requests.get(url,headers=headers)
 result=r.text
 return result
 #獲取詳情頁資訊,並迴圈列印輸出
 def getDetailPage(self,detailURL):
 source=self.getSource(detailURL)
 pattern=re.compile('<div class="author.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?<div class="content">.*?<span>(.*?)</span>.*?<span.*?stats-vote.*?number">(.*?)</i>.*?stats-comments.*?number">(.*?)</i>.*?up.*?number hidden">(.*?)</span>.*?down.*?number hidden">(.*?)</span>',re.S)
 items=re.findall(pattern,source)
 number=1
 for item in items:
 print u''
 print number,u'樓',u'\n樓主:',item[0],u'',item[1],u'歲',u'\n發言:',self.tool.replace(item[2]),u'\n好笑:',item[3],u'\n評論:',item[4],u'\n贊:',item[5],u'\n踩:',item[6]
 time.sleep(0.1)
 number+=1
 return items</span><strong>
</strong>

4、資料清洗

可以看到所得程式碼中含較多的</br><br><br />等標籤,可以定義一個Tool類進行清洗

class Tool():
 def replace(self,x):
 x=re.sub(re.compile('<br>|</br>|/>|<br'),"",x)
 return x.strip()

5、文字儲存

定義一個saveDetailPage函式,傳入檔名和資料,在此不贅述

6、獲取多頁

上面的內容我們已經成功用正則表示式匹配出想要的內容,想獲取多頁,只需設定一個迴圈即可

所以關鍵內容來啦!

觀察底面標籤可知熱門評論共35頁,觀察網頁位址列可發現規律:

首頁 url即'糗事百科 - 超搞笑的原創糗事笑話分享社群',從第二頁開始為 url+/8hr/page/x/?s=4964698 ,可以推測:8hr為8小時內最熱門,x即頁數,後面s=4964698,博主猜測是訪問該網站的總次數,因為如果在同一個會話中,s是相同的,反之另外開啟訪問時s又不同,且每次發現s有增加!

由以上分析,我們要遍歷這35頁,要分情況討論。

最後來看抓取的結果:

 

 

 

以上就是小編帶領大家一起學習的Python爬蟲的基礎入門啦,喜歡本文的小夥伴或者覺得本文對你有幫助可以點播關注或轉發,如果你有好的意見或意見也可以在下面留言或評論,如果你想進一步學習Python或者瞭解Python,加群959997225,群裡有很多適合Python初學者的系統入門學習資料可供領取喔。文末小編奉上本次的原始碼!

 

四、奉上原始碼

<span style="font-size:14px;">#usr/bin/env python
# -*- coding: utf-8 -*-
import re
import requests
import time
#定義一個Tool類,方便用replace方法把換行符等刪除
class Tool():
 def replace(self,x):
 x=re.sub(re.compile('<br>|</br>|/>|<br'),"",x)
 return x.strip()
#定義一個Spider類
class Spider(object):
 #初始化引數
 def __init__(self):
 self.siteURL ='http://www.qiushibaike.com/'
 self.tool=Tool()
 #獲取網頁原始碼
 def getSource(self,url):
 user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
 headers = {'User_agent': user_agent}
 r=requests.get(url,headers=headers)
 result=r.text
 return result
 #獲取詳情頁資訊,並迴圈列印輸出
 def getDetailPage(self,detailURL):
 source=self.getSource(detailURL)
 pattern=re.compile('<div class="author.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?<div class="content">.*?<span>(.*?)</span>.*?<span.*?stats-vote.*?number">(.*?)</i>.*?stats-comments.*?number">(.*?)</i>.*?up.*?number hidden">(.*?)</span>.*?down.*?number hidden">(.*?)</span>',re.S)
 items=re.findall(pattern,source)
 number=1
 for item in items:
 print u''
 print number,u'樓',u'\n樓主:',item[0],u'',item[1],u'歲',u'\n發言:',self.tool.replace(item[2]),u'\n好笑:',item[3],u'\n評論:',item[4],u'\n贊:',item[5],u'\n踩:',item[6]
 time.sleep(0.1)
 number+=1
 return items
 #儲存資訊寫入檔案
 def saveDetailPage(self,data,name):
 fileName='page'+name+'.'+'txt'
 f=open(fileName,'wb')
 f.write(data.encode('utf-8'))
 print u'',u'成功將資料儲存入檔案',fileName
 f.close()
 #對一頁的操作
 def OnePage(self,detailURL,name):
 data=self.getDetailPage(detailURL)
 self.saveDetailPage(str(data),str(name))
 #對很多頁的操作
 #分兩種情況討論,start頁等於1\start頁大於1
 def getAllPage(self,start,end):
 if start==1:
 print u'正在獲取第1頁的資料...'
 detailURL=self.siteURL
 self.OnePage(detailURL,start)
 number=2
 for page in range(2, end+1):
 print u'正在獲取第', number, u'頁的資料...'
 detailURL = self.siteURL + '8hr/page/' + str(page) + '/?s=4964625'
 self.OnePage(detailURL,number)
 time.sleep(2)
 number +=1
 if number==end+1:
 print u'',u'\n載入結束!'
 return False
 elif start>1:
 number=start
 for page in range(start,end+1):
 print u'',u'\n正在獲取第',number,u'頁的資料...'
 detailURL=self.siteURL + '8hr/page/' +str(page)+ '/?s=4964625'
 self.OnePage(detailURL,number)
 time.sleep(2)
 number += 1
 if number==end+1:
 print u'',u'載入結束!'
 return False
spider=Spider()
spider.getAllPage(start=int(raw_input('請輸入起始頁數:')),end=int(raw_input('請輸入結束頁數)

以上就是小編帶領大家一起學習的Python爬蟲的基礎入門啦,喜歡本文的小夥伴或者覺得本文對你有幫助可以點播關注或轉發,如果你有好的意見或意見也可以在下面留言或評論,如果你想進一步學習Python或者瞭解Python,可以私信小編0505,小編準備了一份適合Python初學者的系統入門學習資料可供領取喔。文末小編奉上本次的原始碼!

本文來自網路,如有侵權,請聯絡小編刪除!