Python实战计划学习笔记(二)

这次的任务是在自己写好的网页中提取所需要的信息。(当然网页不是我写的)


所需要提取的信息已经标注,共五种:图片的地址、标题、价格、评星以及预览数。在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)=="": 
        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)

中间区域是为了得到评星数量
观察网页对应部分的源代码

利用

star = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p')
print(star)

得到的信息我截取一部分,

65 reviews

,

发现除了所需要的信息外还有额外的信息,因此我尝试检验

中间的元素,所以利用for in并把其中的元素转换成list,检查里面的长度,设置当长度>1时才进行计数,并把所得的数字放入数组中即可得到。

附上运行结果

Python实战计划学习笔记(二)_第1张图片

你可能感兴趣的:(Python实战计划学习笔记(二))