这次是要爬取一个本地网页的信息,这个本地网页是一个类电商销售的网页,我需要爬取其中的商品名,图片地址,描述,评价,评价人数。
话不多说,直接上代码:
with open('F:/Python/爬虫学习/Lib/1_2_homework_required/index.html', 'r')as wb_data: #python打开本地网页文件
Soup = BeautifulSoup(wb_data, 'lxml') #建立Soup对象,随后用select函数选取所需部分
images = Soup.select( #这里由于要选取这类型所有的元素,所以将具体指定位置的部分删除,如:nth_of_type
"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")
review_number = Soup.select(
"body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right")
rate = Soup.select(
"body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span")
ratings = []
while len(rate)!=0: #这里是将每五个rate组合成一个新元组
temp = rate[0:5]
ratings.insert(1,temp)
del rate[0:5]
for titles, images, prices, ratings, review_number in zip(titles, images, prices, ratings, review_number):
star = []
str_rate = str(ratings) #用★和☆,分别替代html中的相关语句
with_star = str_rate.replace('','★') #这里学会了使用replace函数,返回替换后的字符串
with_star_and_star_empty = with_star.replace('','☆')
data = { #为每个商品的信息建立一个数据结构data
'title': titles.get_text(),
'image': images.get('src'),
'price': prices.get_text(),
'rate': with_star_and_star_empty,
'review_number': review_number.get_text()
}
print(data)
这里用到beautifulSoup4,还有lxml库
这是爬取结果
{'title': 'EarPod', 'image': 'img/pic_0000_073a9256d9624c92a05dc680fc28865f.jpg', 'price': '$24.99', 'rate': '[★, ★, ★, ★, ★]', 'review_number': '65 reviews'}
{'title': 'New Pocket', 'image': 'img/pic_0005_828148335519990171_c234285520ff.jpg', 'price': '$64.99', 'rate': '[★, ★, ★, ★, ☆]', 'review_number': '12 reviews'}
{'title': 'New sunglasses', 'image': 'img/pic_0006_949802399717918904_339a16e02268.jpg', 'price': '$74.99', 'rate': '[★, ★, ★, ★, ☆]', 'review_number': '31 reviews'}
{'title': 'Art Cup', 'image': 'img/pic_0008_975641865984412951_ade7a767cfc8.jpg', 'price': '$84.99', 'rate': '[★, ★, ★, ★, ☆]', 'review_number': '6 reviews'}
{'title': 'iphone gamepad', 'image': 'img/pic_0001_160243060888837960_1c3bcd26f5fe.jpg', 'price': '$94.99', 'rate': '[★, ★, ★, ★, ☆]', 'review_number': '18 reviews'}
{'title': 'Best Bed', 'image': 'img/pic_0002_556261037783915561_bf22b24b9e4e.jpg', 'price': '$214.5', 'rate': '[★, ★, ★, ☆, ☆]', 'review_number': '18 reviews'}
{'title': 'iWatch', 'image': 'img/pic_0011_1032030741401174813_4e43d182fce7.jpg', 'price': '$500', 'rate': '[★, ★, ★, ★, ☆]', 'review_number': '35 reviews'}
{'title': 'Park tickets', 'image': 'img/pic_0010_1027323963916688311_09cc2d7648d9.jpg', 'price': '$15.5', 'rate': '[★, ★, ★, ★, ☆]', 'review_number': '8 reviews'}