第一周第二节作业
本地页面
爬取商品的图片地址、标题、价格、评分、评分人数
代码
from bs4 import BeautifulSoup
path = './1_2_homework_required/index.html' #这里使用了相对路径,只要你本地有这个文件就能打开
with open(path, "r") as wb_data:
# print(wb_data)
soup = BeautifulSoup(wb_data, 'lxml') #解析网页内容
images = 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')
stars = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p:nth-of-type(2)')
rates = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
# 为了从父节点开始取,此处保留:nth-of-type(2),观察网页,多取几个星星的selector,就发现规律了
# print(titles,images,rates,prices,stars,sep='\\n--------\\n')
for title, image, price, star, rate in zip(titles, images, prices, stars, rates): # 使用for循环,把每个元素装到字典中
data = {
'title': title.get_text(),
'image': image.get('src'),
'price': price.get_text(),
'rate': rate.get_text(),
'star': len(star.find_all("span", class_='glyphicon glyphicon-star'))
# 观察发现,每一个星星会有一次<span class="glyphicon glyphicon-star"></span>,所以我们统计有多少次,就知道有多少个星星了;
# 使用find_all 统计有几处是的样式,第一个参数定位标签名,第二个参数定位css 样式,具体可以参考BeautifulSoup 文档示例http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#find-all;
# 由于find_all()返回的结果是列表,我们再使用len()方法去计算列表中的元素个数,也就是星星的数量
}
print(data)
总结
Beautifulsoup和lxml解析网页内容,用chorme浏览器的Copy CSS Selector获取目标位置
soup.select()返回的是一个列表
find_all()用来搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.