美文网首页
Python实战计划学习笔记(二)

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

作者: Mashirol | 来源:发表于2016-12-07 19:00 被阅读8次

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


    所需要提取的信息已经标注,共五种:图片的地址、标题、价格、评星以及预览数。在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时才进行计数,并把所得的数字放入数组中即可得到。

    附上运行结果

    相关文章

      网友评论

          本文标题:Python实战计划学习笔记(二)

          本文链接:https://www.haomeiwen.com/subject/qgqjmttx.html