有了解析网页的基础,感觉难度不大,主要时间花在了解决评分星级数量上
最终实现结果
![](https://img.haomeiwen.com/i1709416/51720d98bbdea49d.jpg)
我的代码
from bs4 import BeautifulSoup
with open('index.html','r') as f:
soup=BeautifulSoup(f.read(),'lxml')
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')
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')
stars=soup.select('div > div.ratings > p:nth-of-type(2)')
# for star in stars:
# print(star)
for title,price,image,review,star in zip(titles,prices,images,reviews,stars):
star_level=len(star.find_all("span", class_="glyphicon glyphicon-star"))
data={
'title':title.get_text(),
'price':price.get_text(),
'image':image.get('src'),
'review':review.get_text(),
'stars':star_level
}
print(data)
总结
- 开始在统计星星数量的时候有想到用len()函数,所以问题就变成了找有几个星星标签,第一次想到了循环
- 立刻觉得实现起来过于麻烦,参考文档中的find_all的资料,可以按照需求找标签得到列表,于是解决
网友评论