wow!壶硅! beautiful soup威兜!
這次的練習(xí)是爬取本地網(wǎng)頁,但是在剛開始使用beautifulsoup的時候就給了我一個老大的難題森瘪,沒安裝lxml庫牡属,按照課前預(yù)習(xí)的安裝了也安裝失敗票堵,后來還是在知乎找到了解決方法扼睬,呃,雖然好像不是那么程序猿悴势,但是能抓到老鼠就是好貓了窗宇。和群里老師私聊說是第一周直播的時候有講過這個問題,看來不能光看課程特纤,還是得回去再看一遍直播去军俊。
下面是代碼,后來發(fā)現(xiàn)跟答案的selector路徑不是很一樣捧存,還得再細(xì)細(xì)琢磨一下粪躬,我的刪的太過分了担败,好在這個網(wǎng)頁比較簡單沒出錯。
from bs4 import BeautifulSoup
with open('./index.html','r')as wb_data:
soup=BeautifulSoup(wb_data,'lxml')
images = soup.select('body > div > div > div > div > div > div > img')
titles = soup.select('body > div > div > div > div > div > div > div > h4 > a')
prices = soup.select('body > div > div > div > div > div > div > div > h4.pull-right')
stars = soup.select('body > div > div > div > div > div > div > div > p:nth-of-type(2)')
views = soup.select('body > div > div > div > div > div > div > div > p.pull-right')
for title,image,star,view,price in zip(titles,images,stars,views,prices):
data = {
'title':title.get_text(),
'price':price.get_text(),
'star' :len(star.find_all('span','glyphicon-star')),
'view' :view.get_text(),
'image':image.get('src')
}
print(data)
這是下載的CSS selector路徑:
titles = soup.select("body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a")
images = soup.select("body > div > div > div.col-md-9 > div > div > div > img")
reviews = soup.select("body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right")
prices = soup.select("body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right")
stars = soup.select("div > div.ratings > p:nth-of-type(2)")
總結(jié):
基本的安裝庫還得回去再看看直播镰官,打造最合適的python環(huán)境有助于提高效率提前。
-
CSS selector的路徑選擇怎么樣比較科學(xué)和合理還得再研究。
1.BeautifulSoup不支持nth-child語法
另外是對于文件路徑的設(shè)置:
相對路徑,確保index.html和main.py在同一個文件夾
相對路徑可以方便代碼拷貝泳唠,移動到其他文件夾不需要修改代碼
path = './index.html'
設(shè)置一個path變量保存路徑是很聰明的做法狈网。
4.find_all()用來篩選挺好用的,不過沒想到用len()函數(shù)統(tǒng)計★個數(shù)笨腥,借鑒了一下答案拓哺。思路還是不夠開闊和專業(yè)。
5.用with語法來open文件脖母,不用close()函數(shù)士鸥。
with open(‘文件地址’,‘r’) as wb_data:
content=wb_data.read()
6.利用zip函數(shù)谆级,for遍歷得到的列表础淤,取得每一項信息。