摘要:前篇全片都是生硬的理論使用,今天就放個靜態(tài)爬取的實例讓大家體驗一下的使用,了解一些背后的原理。給出網(wǎng)站打開右鍵檢查第一個電影,分析源碼先,發(fā)現(xiàn)每個標(biāo)簽就對應(yīng)著一個電影的信息。
前篇全片都是生硬的理論使用,今天就放個靜態(tài)爬取的實例讓大家體驗一下BeautifulSoup的使用,了解一些背后的原理。
順便在這引入靜態(tài)網(wǎng)頁的概念——靜態(tài)網(wǎng)頁是指一次性加載所有內(nèi)容的網(wǎng)頁,爬蟲一次請求便能得到所有信息,對爬蟲非常友好,適合練手
豆瓣top250電影信息爬取這是一個老掉牙的經(jīng)典實例了,但越是經(jīng)典,越有示范性作用,最重要的一點是,它是靜態(tài)的。
給出網(wǎng)站:https://movie.douban.com/top250
打開F12/右鍵檢查第一個電影,分析源碼先,發(fā)現(xiàn)每個
我們來爬取每部電影的圖片,名稱,導(dǎo)演演員,類型,評分,和它的一句話總結(jié),繼續(xù)對
布置好偽裝后就可一開始根據(jù)每個
圖片鏈接是
電影名有多個,都在
導(dǎo)演演員是
標(biāo)簽的第一段字符串
類型是
標(biāo)簽的第二段字符串
評分和評分人數(shù)都在
一句話總結(jié)直屬于標(biāo)簽
html中的&NBSP(實際上是小寫,這里大寫避免markdown識別)對應(yīng)字符串中的xa0,可用replace方法替換掉
url = "https://movie.douban.com/top250" headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"} r=requests.get(url,headers=headers) soup = BeautifulSoup(r.text,"lxml") for each in soup.find_all("div",class_="info"): img_url = each.previous_sibling.previous_sibling.a.img["src"]#圖片鏈接 """with open("*.jpg","wb") as img:#還可以順便下載回來,名字自起 img.write(requests.get(img_url,headers=headers).content)""" title=each.find("div",class_="hd").get_text(strip=True).replace("xa0","")#標(biāo)題 actor = list(each.find("p",class_="").strings)[0].strip().replace("xa0","")#導(dǎo)演演員 type_ = list(each.find("p",class_="").strings)[1].strip().replace("xa0","")#類型 score = each.find("div",class_="star").get_text("/",strip=True)#評分及人數(shù) quote = each.find("span",class_="inq").string#一句話總結(jié) print([img_url,title,actor,type_,score,quote])#這里只簡單打出來看下,怎樣存儲由你來決定
??但是這樣只有25部電影啊,是的,"https://movie.douban.com/top250"指向第一頁,我們現(xiàn)在只爬了一頁,其實還有9頁還沒爬啊,這是就要構(gòu)造網(wǎng)址了。
??我們點到第二頁,發(fā)現(xiàn)網(wǎng)址變成了https://movie.douban.com/top2...,第三頁start條件值變成50,我們可以得出結(jié)論,每下一頁,start條件值就加25。第一頁start=0,第二頁start=25.....第十頁start=225。這樣就可以循環(huán)構(gòu)造網(wǎng)頁并爬取了,這交給讀者實現(xiàn)
??下面筆者提供另一種思路:網(wǎng)頁不是有下一頁的按鈕嗎,右鍵檢查一下,發(fā)現(xiàn)它已經(jīng)包含了要構(gòu)造的部分了,是一個屬性值,提取出來接到原網(wǎng)址上即得到下一頁的網(wǎng)址,這樣能完全爬取所有頁數(shù),不用像上面一樣設(shè)置循環(huán)次數(shù)。
貼上完整代碼
import requests
from bs4 import BeautifulSoup
url = "https://movie.douban.com/top250"
with open("douban.txt","w",encoding="utf-8") as f:
while url :
headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"}
r=requests.get(url,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
for each in soup.find_all("div",class_="info"):
img_url = each.previous_sibling.previous_sibling.a.img["src"]
title=each.find("div",class_="hd").get_text(strip=True).replace("xa0","")
actor = list(each.find("p",class_="").strings)[0].strip().replace("xa0","")
#將生成器list化后索引,strip()去除兩邊空格再用空字符替換 
type_ = list(each.find("p",class_="").strings)[1].strip().replace("xa0","")
score = each.find("div",class_="star").get_text("/",strip=True)
if each.find("span",class_="inq"):#注意有部電影沒有總結(jié),也就沒有標(biāo)簽這里用if檢測一下防止None使用string方法報錯
quote = each.find("span", class_="inq").string
else:
quote = "沒有總結(jié)哦"
print([img_url,title,actor,type_,score,quote])
try:#到最后一頁時沒有下一頁按鈕,會報TypeError,這時用try語句讓url=None使while循環(huán)停止
url = "https://movie.douban.com/top250" + soup.find("span",class_="next").a["href"]
except TypeError:
url = None
本實例的篩選方法已經(jīng)講的很細致了,幾乎提及了BeautifulSoup的所有方法,希望大家能通過此實例能加深對BeautifulSoup的理解,然后自己手打一些爬蟲出來,小的十幾行多的幾十行都可以,爬貼吧什么的都可以。
還是那句話“只看不實踐的程序員不是好程序員”
下一篇應(yīng)該會將正則表達式,更加強大也更加難的信息匹配方法
下下篇了解一下動態(tài)爬取?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41578.html
摘要:爬蟲架構(gòu)架構(gòu)組成管理器管理待爬取的集合和已爬取的集合,傳送待爬取的給網(wǎng)頁下載器。網(wǎng)頁下載器爬取對應(yīng)的網(wǎng)頁,存儲成字符串,傳送給網(wǎng)頁解析器。從文檔中獲取所有文字內(nèi)容正則匹配后記爬蟲基礎(chǔ)知識,至此足夠,接下來,在實戰(zhàn)中學(xué)習(xí)更高級的知識。 前言 Python非常適合用來開發(fā)網(wǎng)頁爬蟲,理由如下:1、抓取網(wǎng)頁本身的接口相比與其他靜態(tài)編程語言,如java,c#,c++,python抓取網(wǎng)頁文檔的接...
摘要:其次,使用后,還需要針對做特定處理??吹竭@就可以構(gòu)想一下爬蟲的爬取邏輯了。 運行環(huán)境 我的運行環(huán)境如下: 系統(tǒng)版本 Windows10。 Python版本 Python3.5,推薦使用Anaconda 這個科學(xué)計算版本,主要是因為它自帶一個包管理工具,可以解決有些包安裝錯誤的問題。去Anaconda官網(wǎng),選擇Python3.5版本,然后下載安裝。 IDE 我使用的是PyCharm,是專...
閱讀 2237·2021-09-24 10:31
閱讀 3887·2021-09-22 15:16
閱讀 3408·2021-09-22 10:02
閱讀 1023·2021-09-22 10:02
閱讀 1837·2021-09-08 09:36
閱讀 1982·2019-08-30 14:18
閱讀 616·2019-08-30 10:51
閱讀 1877·2019-08-29 11:08