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)=="<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时才进行计数,并把所得的数字放入数组中即可得到。

附上运行结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一周第二节作业 本地页面 爬取商品的图片地址、标题、价格、评分、评分人数 代码 总结 Beautifulsoup...
    折青颜阅读 847评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,885评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 遇见一个走心的人太难; 生活中如果有一个能够让你欺负 还不生气的人,那么都是爱你的。” 往往这样 你一定要区分你的...
    曾琳阅读 147评论 0 0
  • 洗着澡 突然的就停水了 邻居家的加压泵 还在辛苦地嗡嗡着 露了底儿的鱼缸 翻着肚皮的小鱼儿们怒目而视 唔,我只是想...
    海之贝阅读 185评论 0 1