bs4爬取的时候有两个标签相同_10分钟用Python爬取最近很火的复联4影评
《復(fù)仇者聯(lián)盟4:終局之戰(zhàn)》已經(jīng)上映快三個(gè)星期了,全球票房破24億美元,國內(nèi)票房破40億人民幣。
雖然現(xiàn)在熱度逐漸下降,但是我們還是恬不知恥地來蹭一蹭熱度。上映伊始《復(fù)聯(lián)4》的豆瓣評分曾破了9分。
后來持續(xù)走低,現(xiàn)在《復(fù)聯(lián)4》的評分穩(wěn)定在8.6分。雖然豆瓣日常被人吐槽注水嚴(yán)重,惡意評分很多,但是由于它好爬鴨~,我們還是選擇豆瓣作為爬取對象。豆瓣的長評論有文字和圖片等其它元素,簡單起見,這次只爬短評。
?在瀏覽器中查看豆瓣關(guān)于復(fù)聯(lián)4的短評,先來看看url的結(jié)構(gòu):
https://movie.douban.com/subject/26100958/comments?start=20&limit=20&sort=new_score&status=P
可見,我們可以通過修改start的值進(jìn)入不同的頁面:
右鍵查看源代碼可以看到瀏覽器獲取到的html頁面代碼。Ctrl F搜索第一條影評的關(guān)鍵詞,快速定位到影評的標(biāo)簽:
可以看到影評內(nèi)容在span標(biāo)簽中,class為“short”。
總覽一下爬取內(nèi)容的步驟:
1) 訪問url,獲取html頁面文本,這一步我們要用到的是requests模塊。
2) 解析返回的文本,提取出爬蟲內(nèi)容,這一步要用的是beautifulSoup模塊。
這兩個(gè)模塊都可以通過pip直接下載。
首先是main函數(shù):
def main(): discuss = [] a = 0 for i in range(0,100,20): url = 'https://movie.douban.com/subject/26100958/comments?start='+ str(i) +'&limit=20&sort=new_score&status=P' HTMLpage = getHTML(url) #print(HTMLpage) for t in parseHTML(HTMLpage): discuss.append(t) for i in discuss: print(str(a) + ':' + i)# print(i)????????a?=?a?+?1由于豆瓣一頁顯示20條影評,我們爬前100條,所以這里訪問了前5個(gè)頁面:
def getHTML(url): try: r = requests.get(url) r.raise_for_status()print("get html successfully") r.encoding = 'utf-8' #print(r.text) return r.text except:????????return?""在getHTML函數(shù)中,我們申請?jiān)L問目標(biāo)頁面,并返回html頁面文本。注意這里應(yīng)該將編碼方式設(shè)置為utf-8,實(shí)測如果設(shè)置成r.encoding = r.apparent_encoding,程序并不能猜測到正確的編碼方式。
當(dāng)r.raise_for_status() 沒有拋出異常時(shí),程序通知我們獲取html成功。如果有異常,返回空字符串。
下一步是解析:
如前所述影評是class為short的span,所以可以直接使用bs4的find_all()函數(shù)得到一個(gè)含有所有影評的tag的列表。我們只需要把tag中的文字提取出來就可以返回到主函數(shù)了。
首先要生成一個(gè)beautifulSoup類的對象,使用html的解析器。html頁面是樹狀分布的,可以通過各種樹的遍歷找到我們需要的標(biāo)簽,這里bs4提供了一個(gè)簡單粗暴的find_all,可以直接使用。
find_all()函數(shù)返回的是一個(gè)保存著tag的列表。
def parseHTML(html): try: soup = BeautifulSoup(html,"html.parser") A = soup.find_all('span',attrs = {'class':'short'}) B = [] for i in A: B.append(i.get_text()) return B except:????????return?[]用get_text函數(shù)去掉span標(biāo)簽,只留下內(nèi)容的文本,加入到B列表里。然后就可以返回了。同理,如果出錯(cuò)了,返回空列表。
好了以上就是一個(gè)非常簡單的小爬蟲,通過修改爬取的數(shù)量可以爬取任意頁面的評論。當(dāng)然了后續(xù)還會對這些數(shù)據(jù)進(jìn)行一些有趣的分析,請關(guān)注我們。同時(shí)因?yàn)樽髡弑救四芰τ邢?#xff0c;本系列可能又要無限托更了/呲牙
下附完整版代碼和運(yùn)行結(jié)果【代碼下載移步留言區(qū)】:
import requestsfrom bs4 import BeautifulSoupdef getHTML(url): try: r = requests.get(url) r.raise_for_status() print("get html successfully") r.encoding = 'utf-8' #print(r.text) return r.text except: return ""def parseHTML(html): try: soup = BeautifulSoup(html,"html.parser") A = soup.find_all('span',attrs = {'class':'short'}) B = [] for i in A: B.append(i.get_text()) return B except: return []def main(): discuss = [] a = 0 for i in range(0,100,20): url = 'https://movie.douban.com/subject/26100958/comments?start='+ str(i) +'&limit=20&sort=new_score&status=P' HTMLpage = getHTML(url) #print(HTMLpage) for t in parseHTML(HTMLpage): discuss.append(t) for i in discuss: print(str(a) + ':' + i)# print(i) a = a + 1 if __name__ == "__main__":main()運(yùn)行結(jié)果:
注:本文作者來自小編一同學(xué)。
他的公眾號:木白瞎說。大家可以關(guān)注一下。
掃碼入QQ群,獲取更多的運(yùn)籌優(yōu)化算法及人工智能算法學(xué)習(xí)資料
↓↓↓
注:微信群請?jiān)诠娞柌藛吸c(diǎn)擊
資源下載->微信粉絲群
獲取最新群邀請鏈接。
總結(jié)
以上是生活随笔為你收集整理的bs4爬取的时候有两个标签相同_10分钟用Python爬取最近很火的复联4影评的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作文第一次用计算机350,第一次考试作文
- 下一篇: javascript在HTML中使用方法