目錄
1.算法原理:
2.程序流程:
3.程序代碼:
4.運(yùn)行結(jié)果(部分結(jié)果展示):
5.結(jié)果分析:
1.算法原理:
(1)利用import命令導(dǎo)入模塊或者導(dǎo)入模塊中的對象;
①利用requests庫獲取數(shù)據(jù);
②用BeautifulSoup庫將網(wǎng)頁源代碼轉(zhuǎn)換成BeautifulSoup類型,以便于數(shù)據(jù)的解析和處理;
③用time庫進(jìn)行時(shí)間延時(shí),避免訪問速度過快被封禁(封禁后會一段時(shí)間內(nèi)無法進(jìn)行對網(wǎng)址的訪問);
(2)利用resquests.get()獲取的數(shù)據(jù),其中第一個(gè)參數(shù)為網(wǎng)頁鏈接,第二個(gè)參數(shù)為請求頭Headers,返回的數(shù)據(jù)類型為字符串類型網(wǎng)頁源代碼;
(3)利用BeautifuSoup()命令將獲取的網(wǎng)頁源代碼轉(zhuǎn)化為BeautifuSoup對象,第一個(gè)參數(shù)為要解析的HTML文本,即網(wǎng)頁源代碼,第二個(gè)參數(shù)為解析HTML的解析器;
(4)利用CSS選擇器,找到我們所需要的數(shù)據(jù),在CSS選擇器中,“#”表示id,“.”表示class;
(5)tag(標(biāo)簽)對象的常用屬性/方法
屬性/方法 | 作用 |
tag.find() | 返回符合條件的首個(gè)數(shù)據(jù) |
tag.find_all() | 返回符合條件的所有數(shù)據(jù) |
tag.text | 獲取標(biāo)簽的文本內(nèi)容 |
tag['屬性名'] | 獲取標(biāo)簽HTML屬性的值 |
例如:
(6)字符串的format格式:<模板字符串>.format(<以逗號分隔的參數(shù)>),format()中參數(shù)和前面的{}順序一 一對應(yīng)例如:
print('我是{},來自{}。'.format('小浪','中國'))
也可以在{}中加入序號,format()括號中類似列表進(jìn)行讀取,序號對應(yīng)列表的下標(biāo),例如:
print('我是{1},來自{0}。'.format('中國','小浪'))
也可以給占位符{}命名,例如:
print('我是{name},來自{country}。'.format(country='中國',name='小浪'))
以上三種都輸出:我是小浪,來自中國。
2.程序流程:
(1)利用import導(dǎo)入第三方庫requests,time和bs4庫中的BeautifulSoup;
(2)創(chuàng)建get_film函數(shù),形參為變量link(用于傳入網(wǎng)址,因?yàn)槊宽撝挥?5部電影,爬取250部,每個(gè)網(wǎng)頁鏈接末尾的查詢字符串會有所不同)
(3)為了應(yīng)對反爬蟲機(jī)制,這里修改請求頭,將網(wǎng)頁中User-Agent字段定義為字典,傳入requests.get()命令中,賦值給變量res(當(dāng)然,也有其他的方法,比如通過別的IP訪問網(wǎng)站,具體請自己查看requests的官方文檔:https://cn.python-requests.org/zh_CN/latest/);
①:?打開豆瓣電影top250排行版,右擊(以搜狗瀏覽器為例)--->審查元素,點(diǎn)擊方塊內(nèi)圖標(biāo)
?②:隨便點(diǎn)擊一個(gè)電影名,以《肖申克的救贖》為例,網(wǎng)頁加載完畢點(diǎn)擊Network標(biāo)簽,里面可能為空的,刷新一下網(wǎng)頁就好了。點(diǎn)擊Network——>name中第一個(gè)標(biāo)簽——>找到Requests Headers標(biāo)簽——>找到User-Agent字段。
?(4)將res.text(源代碼的字符串格式)傳給BeautifulSoup命令,并且用Python內(nèi)置的解析器html.parser,賦值給變量soup;
?(5)利用CSS選擇器找到標(biāo)簽為div,class="hd"的所有元素(隨便點(diǎn)擊一部電影名稱,以《肖申克的救贖》為例,觀察到的規(guī)律為電影鏈接、電影名分布在標(biāo)簽為:div,class="hd"的標(biāo)簽“a”中),傳入soup.select()命令中,賦值給item;
?(6)遍歷item中的所有元素,觀察發(fā)現(xiàn)鏈接在標(biāo)簽a中的href屬性中,電影名在標(biāo)簽a中第一個(gè)標(biāo)簽span的文本中,此時(shí)用find命令可以找到第一個(gè)符合條件的元素,找到第一個(gè)標(biāo)簽其中的文本內(nèi)容,并輸出電影名和電影鏈接;
(7)觀察豆瓣10頁的網(wǎng)頁鏈接(每頁25個(gè)電影,其實(shí)就觀察幾頁就可以發(fā)現(xiàn)規(guī)律):
https://movie.douban.com/top250?start=0&filter=(第一頁,從一開始網(wǎng)頁打開沒有問號后的查詢字符串,從其他頁跳到第一頁就有了,第一頁帶查詢字符串和不帶查詢字符串打開內(nèi)容相同)
https://movie.douban.com/top250?start=25&filter=(第二頁)
https://movie.douban.com/top250?start=50&filter=(第三頁)
通過以上三個(gè)網(wǎng)頁鏈接的對比發(fā)現(xiàn),只有start后面的發(fā)生了改變,那么就可以利用字符串的format格式,進(jìn)行創(chuàng)建字符串列表link_all
(8)遍歷10頁網(wǎng)頁,傳入之前建立的函數(shù)get_film,利用time.sleep()進(jìn)行延時(shí)爬取,防止訪問速度過快被對方服務(wù)器封禁。
3.程序代碼:
import requests
import time
from bs4 import BeautifulSoup
def get_film(link):
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'}
res=requests.get(link,headers=headers)
soup=BeautifulSoup(res.text,'html.parser')
items=soup.select('div.hd a')
for i in items:
name=i.find('span').text
link_film=i['href']
print('電影名:',name,'網(wǎng)址:',link_film)
l='https://movie.douban.com/top250?start={}&filter='
link_all=[l.format(i*25) for i in range(10)]
for i in range(10):
get_film(link_all[i])
time.sleep(1)
4.運(yùn)行結(jié)果(部分結(jié)果展示):
文章來源:http://www.zghlxwxcb.cn/news/detail-415693.html
5.結(jié)果分析:
? ? ?程序獲取的結(jié)果與預(yù)期結(jié)果相同,在找到電影名的過程中可以使用find和find_all命令,可以不使用CSS選擇器,也可以將電影名存到txt文檔,或者excel文檔中,便于儲存。此程序僅演示豆瓣電影名、電影網(wǎng)絡(luò)鏈接,其他靜態(tài)網(wǎng)頁也可通過此方法進(jìn)行爬取。文章來源地址http://www.zghlxwxcb.cn/news/detail-415693.html
到了這里,關(guān)于python爬取豆瓣電影排行前250獲取電影名稱和網(wǎng)絡(luò)鏈接[靜態(tài)網(wǎng)頁]————爬蟲實(shí)例(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!