<h2>代碼</h2>
<pre>
from bs4 import BeautifulSoup
with open('./index.html','r') as wb_data:
soup = BeautifulSoup(wb_data,'lxml')
images = soup.select('body > div > div > div.col-md-9 > div > div > div > img')
titles = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')
prices = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right')
reviews = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
stars = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span')
#stars = soup.find_all('span',class_='glyphicon-star')
print(stars)
print(images,titles,prices,reviews,stars,sep='\n--------------------\n')
print(len(stars),len(images))
for image,title,price,review,star in zip(images,titles,prices,reviews,stars):
data = {
'image':image.get('src'),
'title':title.get_text(),
'price':price.get_text(),
'review':review.get_text(),
'star':len(star),
}
print(data)
</pre>
<h2>成果</h2>
<h2>總結(jié)</h2>
改作業(yè)的主要目標(biāo)是爬取一個(gè)本地網(wǎng)頁(yè)中的相關(guān)信息。
主要的步驟有:
1.加載這個(gè)本地網(wǎng)頁(yè)咐容。這里用到了with open(還不太懂!)
2.利用BeautifulSoup解析這個(gè)網(wǎng)頁(yè)的內(nèi)容
3.利用瀏覽器的“檢查”功能,定位要爬取數(shù)據(jù)的標(biāo)簽并加以整理
4.提取這些信息并利用for循環(huán)整理到字典中,并打印出來(lái)
<h2>反思</h2>
本次作業(yè)主要有兩個(gè)問(wèn)題:
1.對(duì)于with這個(gè)語(yǔ)法還不了解编兄。
2.要爬取的數(shù)據(jù)中劫瞳,星級(jí)比較難以處理,在網(wǎng)頁(yè)文件中漆际,幾顆星是這樣表示的:
<pre>
class="glyphicon glyphicon-star"
class="glyphicon glyphicon-star-empty" #共有5條這樣的語(yǔ)句,有幾個(gè)無(wú)“empty”就代表幾顆星拉庵。
</pre>
老師給出的方法是:
<pre>
stars = soup.select("body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span")
stars_count = len(star)
"star": stars_count
</pre>
但結(jié)果是灿椅,字典中的star都是0。我認(rèn)為循環(huán)沒(méi)有將每一個(gè)商品的星級(jí)給提取出來(lái)钞支。stars包括了所有的星級(jí)茫蛹,然后len對(duì)其計(jì)數(shù)。目前我還沒(méi)有找到合適的解決辦法烁挟。
我嘗試使用find_all來(lái)提取數(shù)據(jù)婴洼,能夠做到只提取class="glyphicon glyphicon-star" 。但是并沒(méi)有用撼嗓。
<pre>
stars = soup.find_all('span',class_='glyphicon-star')
</pre>
不過(guò)也算是Get了一個(gè)新知識(shí)點(diǎn)吧柬采。