python实战计划的第二个项目:爬取商品信息。
最终结果如下:
共八件商品,每件商品包括5项信息,分别是:图片地址、商品价格、商品标题、评分量、评分星级。
代码如下:
from bs4 import BeautifulSoup
path=r'D:\Python_work\Plan-for-combating-master\week1\1_2\1_2answer_of_homework\index.html'
with open(path,'r') as f:
ff=f.read()
soup=BeautifulSoup(ff,'lxml')
images=soup.select('div.thumbnail > img')
prices=soup.select('div.caption > h4.pull-right')
titles=soup.select('div.caption > h4 > a')
quantities = soup.select('div.ratings > p.pull-right')
stars = soup.select('div.ratings > p:nth-of-type(2)')
# print(images,prices,titles,quantities,stars)
for image,price,title,quantity,star in zip(images,prices,titles,quantities,stars):
data={
'image':image.get('src'),
'price':price.get_text(),
'title':title.get_text(),
'quantity':quantity.get_text(),
'star':len(star.find_all("span","glyphicon glyphicon-star"))
}
print(data)
总结:
1.打开文件路径,r表示的是raw字符串,即r''单引号里的某些特殊字符就不必转义了
2.find_all()方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件。
3.star.find_all("span","glyphicon glyphicon-star"),查找star中class为"glyphicon glyphicon-star"的span标签。
4.soup.select('div.ratings > p:nth-of-type(2)'),直接查找第二个p标签。
5.soup.select('a[href="#"]'),查找href属性为#的a标签。