学习Python第二节课,爬取商品信息。
1.爬取目标
爬取本地网页中图片地址、价格、商品标题、浏览量、评分星级。
爬取网页及爬取信息2.爬取成果
本地网页爬取信息成果3.我的代码
#! /usr/bin/env/python
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
path='./1_2_homework_required/index.html' #这里使用了相对路径,只要本地有这个文件就能打开
with open(path,'r') as f: # 使用with open打开本地文件
Soup = BeautifulSoup(f,'lxml') # 解析网页内容
# print(Soup) 打印网页被解析后得到的内容(网页代码)
titles = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a') # 复制每个元素的css selector 路径
images = Soup.select('body > div > div > div.col-md-9 > div > div > div > img')
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)')
reviews = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
# print(titles,images,prices,stars,reviews,sep='\n----------------------------\n') # 打印每个元素,其中sep='\n--------\n'是为了在不同元素之间添加分割线
for title,image,price,star,review,in zip(titles,images,prices,stars,reviews): # 使用for循环,把每个元素装到字典中
data = {
'title':title.get_text(),
'image':image.get('src'),
'price':price.get_text(),
'review':review.get_text(),
'star': len(star.find_all("span", class_='glyphicon glyphicon-star'))
# 观察发现,每一个星星会有一次<span class="glyphicon glyphicon-star"></span>,所以我们统计有多少次,就知道有多少个星星了;
# 使用find_all 统计有几处是★的样式,第一个参数定位标签名,第二个参数定位css 样式
# 由于find_all()返回的结果是列表,我们再使用len()方法去计算列表中的元素个数,也就是星星的数量
}
print(data)
4.总结
4.1爬取步骤
1.使用BeautifuSoup解析网页内容
首先使用open语句打开网页,然后使用BeautifulSoup语句解析网页。
2.描述网页爬取的东西
此过程分以下几步实现:
首先,使用浏览器工具得到所抓取信息的Css Path。
其次,由于BeautifulSoup不支持nth-child语法,去掉上一步中获取Css Path的nth-child语法。
再次,使用select方法对爬取信息进行描述。
3.从标签中获取所需的东西然后装入字典中。
在此过程中,使用了for语句和find函数。
4.2相关语句的用法解释
1.open语句
open语句使用方法2.BeautifulSoup语句
BeautifulSoup语句使用方法3.select语句
4.find语句
find_all( name , attrs , recursive , text , **kwargs )
find_all()
方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.详细见:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#find-all
网友评论