wow!! beautiful soup!
这次的练习是爬取本地网页,但是在刚开始使用beautifulsoup的时候就给了我一个老大的难题,没安装lxml库,按照课前预习的安装了也安装失败,后来还是在知乎找到了解决方法,呃,虽然好像不是那么程序猿,但是能抓到老鼠就是好猫了。和群里老师私聊说是第一周直播的时候有讲过这个问题,看来不能光看课程,还是得回去再看一遍直播去。
下面是代码,后来发现跟答案的selector路径不是很一样,还得再细细琢磨一下,我的删的太过分了,好在这个网页比较简单没出错。
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)")
总结:
基本的安装库还得回去再看看直播,打造最合适的python环境有助于提高效率。
-
CSS selector的路径选择怎么样比较科学和合理还得再研究。
1.BeautifulSoup不支持nth-child语法
另外是对于文件路径的设置:
相对路径,确保index.html和main.py在同一个文件夹
相对路径可以方便代码拷贝,移动到其他文件夹不需要修改代码
path = './index.html'
设置一个path变量保存路径是很聪明的做法。
4.find_all()用来筛选挺好用的,不过没想到用len()函数统计★个数,借鉴了一下答案。思路还是不够开阔和专业。
5.用with语法来open文件,不用close()函数。
with open(‘文件地址’,‘r’) as wb_data:
content=wb_data.read()
6.利用zip函数,for遍历得到的列表,取得每一项信息。