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初學者的系統入門學習資料可供領取喔。文末小編奉上本次的原始碼!
本文來自網路,如有侵權,請聯絡小編刪除!