国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【爬蟲二】爬取豆瓣音樂榜單

2019-11-14 11:04:03
字體:
供稿:網(wǎng)友


前言

  借助有效率的工具,可以讓我們更加方便的寫出爬蟲程序。本篇使用request和bs4庫爬取豆瓣音樂榜單。

介紹

豆瓣音樂榜單:https://music.douban.com/top250 圖片描述 bs4:Beautiful Soup 4 是一個(gè)可以從HTML或xml文件中提取數(shù)據(jù)的Python庫。它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航、查找、修改文檔的方式。Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間。

一、獲取網(wǎng)頁html

def download_page(url): headers = { 'User-Agent':'查看自己的User-Agent,粘貼到此處' } data = requests.get(url, headers=headers).content return data

  不添加headers可能導(dǎo)致403,無法獲取網(wǎng)頁源碼,這是因?yàn)椴僮鞅环?wù)器認(rèn)為是爬蟲而拒絕訪問。服務(wù)器通過校驗(yàn)請求的U-A來識別爬蟲,這是一種相對簡單的反爬蟲機(jī)制。通過模擬瀏覽器的U-A,可以解決這個(gè)問題。

  通常,瀏覽器在向服務(wù)器發(fā)送請求的時(shí)候,會(huì)有一個(gè)請求頭——User-Agent,它用來標(biāo)識瀏覽器的類型。當(dāng)我們使用requests來發(fā)送請求的時(shí)候,默認(rèn)的User-Agent是python-requests/2.8.1。如此我們嘗試將User-Agent偽裝成瀏覽器。我們通過手動(dòng)指定User-Agent為Chrome瀏覽器(F12–>Network中查看),再次訪問得到網(wǎng)頁源碼。

二、獲取當(dāng)前頁歌名

def parse_html(html): global count soup = BeautifulSoup(html, "html.parser") music_list_soup = soup.find('div', attrs={'class': 'indent'}) music_name_list = [] for music_li in music_list_soup.find_all('table'): detail = music_li.find('div', attrs={'class': 'pl2'}) count += 1 music_name = 'Top ' + str(count) music_name = music_name + detail.find('a').getText() + '/n' music_name_list.append(music_name) next_page = soup.find('span', attrs={'class': 'next'}).find('a') if next_page: return music_name_list, next_page['href'] else: return music_name_list, None

  我們使用了beautifulsoup來分析網(wǎng)頁源碼, 創(chuàng)建bs對象soup,并使用解析器html.parser來解析源碼。    按F12–>Element查看網(wǎng)頁源碼,發(fā)現(xiàn)<div class='indent'>標(biāo)簽下存在歌單(table標(biāo)簽); 圖片描述 用for循環(huán)獲取所有table,并對每一個(gè)table進(jìn)行分析;

<div, class='pl2'>標(biāo)簽下的<a>標(biāo)簽下發(fā)現(xiàn)歌名, 圖片描述

用此detail.find('a').getText() 函數(shù)獲取a標(biāo)簽下的文字內(nèi)容,并添加到列表中music_name_list.append(music_name) ,再把列表的元素寫進(jìn)文件就可以了。

注: BeautifulSoup中的find和findAll用法相同,不同之處為find返回的是findAll搜索值的第一個(gè)值。

三、翻頁

  next_page是為了讓程序能夠翻頁,next_page['href'] ,獲取下一頁url,通過while循環(huán)來反復(fù)訪問,進(jìn)而可以獲取完整歌單。 圖片描述

四、代碼

  最后,完整程序代碼如下:

#!/usr/bin/env python# encoding=utf-8import requestsfrom bs4 import BeautifulSoupimport codecsdef download_page(url): headers = { 'User-Agent':'查看自己的User-Agent,粘貼到此處' } data = requests.get(url, headers=headers).content return datadef parse_html(html): global count soup = BeautifulSoup(html, "html.parser") music_list_soup = soup.find('div', attrs={'class': 'indent'}) music_name_list = [] for music_li in music_list_soup.find_all('table'): detail = music_li.find('div', attrs={'class': 'pl2'}) count += 1 music_name = 'Top ' + str(count) music_name = music_name + detail.find('a').getText() + '/n' music_name_list.append(music_name) next_page = soup.find('span', attrs={'class': 'next'}).find('a') if next_page: return music_name_list, next_page['href'] else: return music_name_list, Nonedef main(): url = 'https://music.douban.com/top250' fp = codecs.open('music', 'w', encoding='utf-8') while url: html = download_page(url) musics, url = parse_html(html) fp.write(''.join(musics))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖边县| 邻水| 花莲县| 时尚| 射阳县| 本溪| 高要市| 德安县| 潢川县| 峨山| 高青县| 马鞍山市| 和平县| 沭阳县| 长泰县| 岳西县| 乌拉特前旗| 土默特右旗| 东城区| 华阴市| 鸡西市| 青川县| 星子县| 贺兰县| 德州市| 青海省| 玉林市| 望奎县| 施甸县| 门源| 昌邑市| 泽库县| 台东市| 庆安县| 连城县| 平江县| 吐鲁番市| 宜川县| 阜南县| 察雅县| 阳东县|