python爬蟲項目實戰(zhàn):
爬取糗事百科用戶的所有信息,包括用戶名、性別伊群、年齡、內(nèi)容等等崇棠。
10個步驟實現(xiàn)項目功能丸卷,下面開始實例講解:
1.導(dǎo)入模塊
import re
import urllib.request
from bs4 import BeautifulSoup
2.添加頭文件,防止爬取過程被拒絕鏈接
def qiuShi(url,page):
################### 模擬成高仿度瀏覽器的行為 ##############
設(shè)置多個頭文件參數(shù)萎坷,模擬成高仿度瀏覽器去爬取網(wǎng)頁
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)
將多個頭文件參數(shù)一個一個添加到headall列表中
headall.append(items)
print(headall)
print('測試1--')
創(chuàng)建opener對象
opener = urllib.request.build_opener()
添加頭文件到opener對象
opener.addheaders = headall
將opener對象設(shè)置成全局模式
urllib.request.install_opener(opener)
學(xué)習(xí)Python中的小伙伴哆档,需要學(xué)習(xí)資料的話住闯,可以到我的微信公眾號:Python學(xué)習(xí)知識圈,后臺回復(fù):“01”比原,即可拿Python學(xué)習(xí)資料
爬取網(wǎng)頁并讀取數(shù)據(jù)到data
data = opener.open(url).read().decode()
data1 = urllib.request.urlopen(url).read().decode('utf-8')
print(data1)
print('測試2--')
################## end ########################################
3.創(chuàng)建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.提取發(fā)表的內(nèi)容信息
############## 發(fā)表的內(nèi)容 #########################
cont = []
data4 = soup.find_all('div',class_='content')
print(data4)
記住二次篩選一點要轉(zhuǎn)換成字符串形式雇寇,否則報錯
data4 = str(data4)
使用bs4解析器提取內(nèi)容
soup3 = BeautifulSoup(data4,'lxml')
contents = soup3.find_all('span')
for content in contents:
print('第',x,'篇糗事的內(nèi)容:',content.get_text())
將內(nèi)容一個一個添加到cont列表中
cont.append(content.get_text())
print(cont)
print('測試5--')
##############end####################################
6.提取搞笑指數(shù)
#################搞笑指數(shù)##########################
happy = []
獲取搞笑指數(shù)
第一次篩選
data2 = soup.find_all('span',class_="stats-vote")
獲取搞笑指數(shù)
第二次篩選
data2 = str(data2) # 將列表轉(zhuǎn)換成字符串形式才可以使用
print(data2)
print('測試6--')
soup1 = BeautifulSoup(data2,'lxml')
happynumbers = soup1.find_all('i',class_="number")
for happynumber in happynumbers:
print(happynumber.get_text())
將將搞笑數(shù)一個一個添加到happy列表中
happy.append(happynumber.get_text())
print(happy)
print('測試7--')
##################end#############################
7.提取評論數(shù)
############## 評論數(shù) ############################
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())
將評論數(shù)一個一個添加到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.設(shè)置用戶所有信息輸出的格局設(shè)置
################## 批量輸出用戶的所以個人信息 #################
print()
for sexage in sexages:
sa = sexage
print(''17, '== 第', page, '頁-第', str(x+1) + '個用戶 == ',''17)
輸出用戶名
print('【用戶名】:',name[x],end='')
輸出性別和年齡
print('【性別】:',sa[0],' 【年齡】:',sa[1])
輸出內(nèi)容
print('【內(nèi)容】:',cont[x])
輸出搞笑數(shù)和評論數(shù)
print('【搞笑指數(shù)】:',happy[x],' 【評論數(shù)】:',comm[x])
print(''25,' 三八分割線 ',''25)
x += 1
###################end##########################
10.設(shè)置循環(huán)遍歷爬取13頁的用戶信息
for i in range(1,14):
糗事百科的網(wǎng)址
url = 'https://www.qiushibaike.com/8hr/page/'+str(i)+'/'
qiuShi(url,i)
運行結(jié)果谢床,部分截圖:
以上的運行結(jié)果是每時都在更新的识腿,所以讀者在運行時,結(jié)果不一樣是正常的渡讼。
今天的項目實戰(zhàn)就到這里了,喜歡的朋友可以關(guān)注展箱、轉(zhuǎn)發(fā)一下喔蹬昌,希望今天的內(nèi)容對大家有所幫助。