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

视频重点####

练习代码####

总结#####

1. 视频重点###

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

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

  3. 释放爬取标签的信息get_text()方法能获取标签中的文本信息,get()方法来获得标签中的属性信息,比如中的链接信息。用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('')
            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)

结果##

Python实战计划——第二节:爬取商品信息_第1张图片
运行结果.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,它不会改变数据结构。

Python实战计划——第二节:爬取商品信息_第2张图片
负步长与reverse倒序区别.png

  • 计数

list.count(元素)

  • Beatuifulsoup4中find_all()

find() 和 find_all()

你可能感兴趣的:(Python实战计划——第二节:爬取商品信息)