天天看點

python爬蟲項目實戰,爬取使用者的資訊,讓你更好的篩選

1.導入子產品

import urllib.request
 from bs4 import BeautifulSoup           

2.添加頭檔案,防止爬取過程被拒絕連結

def qiuShi(url,page):
 ################### 模拟成高仿度浏覽器的行為 ##############
 # 設定多個頭檔案參數,模拟成高仿度浏覽器去爬取網頁
 heads ={
 'Connection':'keep-alive',
 'Accept-Language':'zh-CN,zh;q=0.9',
 'Accept':'text/html,application/xhtml+xml,application/xml;
 q=0.9,image/webp,image/apng,*/*;q=0.8',
 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 
 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
 }
 headall = []
 for key,value in heads.items():
 items = (key,value)
 # 将多個頭檔案參數一個一個添加到headall清單中
 headall.append(items)
 # print(headall)
 # print('測試1--')
 
 # 建立opener對象
 opener = urllib.request.build_opener()
 # 添加頭檔案到opener對象
 opener.addheaders = headall
 # 将opener對象設定成全局模式
 urllib.request.install_opener(opener)
 # 爬取網頁并讀取資料到data
 data = opener.open(url).read().decode()
 # data1 = urllib.request.urlopen(url).read().decode('utf-8')
 # print(data1)
 # print('測試2--')
 ################## end ########################################           

3.建立soup解析器對象

soup = BeautifulSoup(data,'lxml')
 x = 0
4.開始使用BeautifulSoup4解析器提取使用者名資訊
############### 擷取使用者名 ########################
 name = []
 # 使用bs4解析器提取使用者名
 unames = soup.find_all('h2')
 # print('測試3--',unames)
 for uname in unames:
 # print(uname.get_text(),'第',page,'-',str(x)+'使用者名:',end='')
 # 将使用者名一個一個添加到name清單中
 name.append(uname.get_text())
 # print(name)
 # print('測試4--')
 #################end#############################

5.提取發表的内容資訊
           

發表的内容

cont = []

data4 = soup.find_all('div',class_='content')

# print(data4)

# 記住二次篩選一點要轉換成字元串形式,否則報錯

data4 = str(data4)

# 使用bs4解析器提取内容

soup3 = BeautifulSoup(data4,'lxml')

contents = soup3.find_all('span')

for content in contents:

# print('第',x,'篇糗事的内容:',content.get_text())

# 将内容一個一個添加到cont清單中

cont.append(content.get_text())

# print(cont)

# print('測試5--')

##############end####################################

**6.提取搞笑指數**
 #################搞笑指數##########################
 happy = []
 # 擷取搞笑指數
 # 第一次篩選
 data2 = soup.find_all('span',class_="stats-vote")
 # 擷取搞笑指數
 # 第二次篩選
 data2 = str(data2) # 将清單轉換成字元串形式才可以使用
 # print(data2)
 # print('測試6--')
 soup1 = BeautifulSoup(data2,'lxml')
 happynumbers = soup1.find_all('i',class_="number")
 for happynumber in happynumbers:
 # print(happynumber.get_text())
 # 将将搞笑數一個一個添加到happy清單中
 happy.append(happynumber.get_text())
 # print(happy)
 # print('測試7--')
 ##################end#############################
           

如果你跟我一樣都喜歡python,想成為一名優秀的程式員,也在學習python的道路上奔跑,歡迎你加入python學習群:python群号:491308659 驗證碼:南燭

群内每天都會分享最新業内資料,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

7.提取評論數

############## 評論數 ############################
 comm = []
 data3 = soup.find_all('a',class_='qiushi_comments')
 data3 = str(data3)
 # print(data3)
 soup2 = BeautifulSoup(data3,'lxml')
 comments = soup2.find_all('i',class_="number")
 for comment in comments:
 # print(comment.get_text())
 # 将評論數一個一個添加到comm清單中
 comm.append(comment.get_text())
 ############end#####################################
           

8.使用正規表達式提取性别和年齡

######## 擷取性别和年齡 ##########################
 # 使用正規表達式比對性别和年齡
 pattern1 = '<div class="articleGender (w*?)Icon">(d*?)</div>'
 sexages = re.compile(pattern1).findall(data)
 # print(sexages)
           

9.設定使用者所有資訊輸出的格局設定

################## 批量輸出使用者的是以個人資訊 #################
 print()
 for sexage in sexages:
 sa = sexage
 print('*'*17, '=_= 第', page, '頁-第', str(x+1) + '個使用者 =_= ','*'*17)
 # 輸出使用者名
 print('【使用者名】:',name[x],end='')
 # 輸出性别和年齡
 print('【性别】:',sa[0],'  【年齡】:',sa[1])
 # 輸出内容
 print('【内容】:',cont[x])
 # 輸出搞笑數和評論數
 print('【搞笑指數】:',happy[x],' 【評論數】:',comm[x])
 print('*'*25,' 三八分割線 ','*'*25)
 x += 1
 ###################end##########################
           

10.設定循環周遊爬取13頁的使用者資訊

for i in range(1,14):
 # 糗事百科的網址
 url = 'https://www.qiushibaike.com/8hr/page/'+str(i)+'/'
 qiuShi(url,i)
           

運作結果,部分截圖:

python爬蟲項目實戰,爬取使用者的資訊,讓你更好的篩選