这次的任务是在自己写好的网页中提取所需要的信息。(当然网页不是我写的)
所需要提取的信息已经标注,共五种:图片的地址、标题、价格、评星以及预览数。在Chrome中在所需要提取的信息处右击检查元素,在对应的代码上右击copy selector,获得所需的位置信息,把div li ul a 后标注的:信息去除,然后利用
soup.select(' ')
得到信息,这样的解决方案可以使用于1、2、3、5都可以利用这中方法得到附上源代码
from bs4 import BeautifulSoup as BS
with open('./1_2_homework_required/index.html','r') as web_data:
soup = BS(web_data, 'lxml')
title = soup.select('body > div > div > div > div > div > div > div > h4 > a')
price = soup.select('body > div > div > div > div > div > div > div > h4.pull-right')
image = soup.select('body > div > div > div > div > div > div > img')
review = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
star = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p')
star_num=[]
#**************************************************************
for i in star:
if len(list(i)) > 1:
num=0
for j in list(i):
if str(j)=="<span class=\"glyphicon glyphicon-star\"></span>":
num=num+1
star_num.append(num)
#**************************************************************
for titles,prices,images,reviews,stars in zip(title,price,image,review,star_num):
data = {
'title' : titles.get_text(),
'price' : prices.get_text(),
'image' : images.get('src'),
'review' : reviews.get_text(),
'star' : stars
}
print(data)
中间区域是为了得到评星数量
观察网页对应部分的源代码
<p>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star-empty"></span>
</p>
利用
star = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p')
print(star)
得到的信息我截取一部分,
<p class="pull-right">65 reviews</p>,
<p>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
</p>
发现除了所需要的信息外还有额外的信息,因此我尝试检验<p> </p>
中间的元素,所以利用for in
并把其中的元素转换成list
,检查里面的长度,设置当长度>1时才进行计数,并把所得的数字放入数组中即可得到。
附上运行结果
网友评论