Python实战计划——第二节:爬取商品信息

视频重点####

练习代码####

总结#####

1. 视频重点###

  1. 解析网页soup = Beautifulsoup('html','lxml')Beautifulsoup只认css selector的写法xpatch是表示元素绝对路径的方法

  2. 描述要爬取元素的位置select到了一类信息放入了列表,之后要for循环释放这些位置信息

  3. 释放爬取标签的信息get_text()方法能获取标签中的文本信息,get()方法来获得标签中的属性信息,比如<img src='#'>中的链接信息。用zip()函数搭配for循环,将所有信息装入字典中。stripped_string获取父节点下所有子节点的文本信息。

2. 练习代码###

from bs4 import BeautifulSoup
    
    with open('F:/Plan-for-combating-master/week1/1_2/1_2answer_of_homework/index.html','r') as wb_data:
        soup = BeautifulSoup(wb_data,'lxml')
        imgs = soup.select('body > div > div > div.col-md-9 > div > div > div > img')
        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')
        rates1=soup.find_all('span', class_='glyphicon')  #find_all()方法,class因为是关键字,在使用css selector时用class_
        views=soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
        rates= rates1[2:]。#rates1列表中前两个不是星级,去掉前两个存到rates列表中。
        str_rates=[] #创建了一个存放将rates元素字符串化后的列表,因为在之后使用list.count()是,元素包含关键字。
        stars=[]#存放一个商品星级的列表
        nums=[]

        for i in rates:#此迭代将元素字符串化
            str_rates.append(str(i))

        while len(str_rates)!=0:#此循环借鉴课程的参考,del 选出的五个元素,配合while循环,将全部星级按五个一组分好,list.count()统计实心星的个数。
            stars=str_rates[0:5]
            star=stars.count('<span class="glyphicon glyphicon-star"></span>')
            nums.append(star)
            del str_rates[0:5]
    
    
    for img,title,price,view,num in zip(imgs,titles,prices,views,nums):#释放抓取的信息,并作结构化处理,存入data字典中。
        data={
            'title':title.get_text(),
            'price':price.get_text(),
            'view':view.get_text().split()[0],#view.get_text()的信息包含"views",去掉
            'img':img.get('src'),
            'num':str(num)+"星"
        }
        print(data)

结果##

运行结果.png

3. 总结###

  • 序列结构的数据

与序列有关的内建函数有:sorted()、reversed()、enumerate()、zip()),其中sorted()和zip()返回一个序列(列表)对象,reversed()、enumerate()返回一个迭代器(类似序列)
与序列有关的操作方法有:max(),min(),len(),+,*,切片,查询成员资格成员in序列,查询索引list[2]
for循环遍历整个可迭代对象

  • 切片

对于序列结构的数据,切片比如列表list[A:B:C],A表示起始位置,默认是0。B表示结束位置,C表示步长。
AB就是索引,索引和步长都有负值。正序表示时,第B个元素是取不到的。
负步长可以用作倒序取值。相比reverse,它不会改变数据结构。

负步长与reverse倒序区别.png

  • 计数

list.count(元素)

find() 和 find_all()

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

推荐阅读更多精彩内容

  • 两本不错的书: 《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。 《Python核心编程...
    静熙老师哈哈哈阅读 3,390评论 0 80
  • 套接字编程:1、 函数的功能基本和c类似,唯一不同的地方在于当发生错误时,它不是通过返回值来告知的,而是通过触发异...
    静熙老师哈哈哈阅读 669评论 0 11
  • 输出结果: 每个商品的信息存入字典,使用列表保存所有商品信息 作业 github 地址 功能,获取: 图片地址 价...
    超net阅读 646评论 0 1
  • 1、打印:print(100000) print("字符串输出") 2、获取输入:input("输入提示:") 3...
    annyecho阅读 891评论 0 0
  • 1 阿鱼是个没有心的人,阿鱼妈妈如是说。 但阿鱼并不认同,但对只有小学文化水平的鱼妈说出这样文艺伤感的话有些惊讶。...
    倾黛阅读 250评论 0 0