视频重点####
练习代码####
总结#####
1. 视频重点###
解析网页soup = Beautifulsoup(
'html'
,'lxml'
)Beautifulsoup只认css selector的写法xpatch是表示元素绝对路径的方法描述要爬取元素的位置select到了一类信息放入了列表,之后要for循环释放这些位置信息
释放爬取标签的信息
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)
结果##
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,它不会改变数据结构。
-
计数
list.count(元素
)