Python爬虫实战笔记_1-2

一个小爬虫,爬一个本地的网页。


Screen Shot 2016-06-26 at 10.07.06 PM.png

需要提取的信息包括:
页面中显示的所有商品的标题,价格,点击量,评分以及商品的图片地址。

#!usr/bin/env python
#_*_ coding: utf-8 _*_
#
# filter out specifical info from a local webpage
#
from bs4 import BeautifulSoup

path = '1_2answer_of_homework/index.html'

with open(path, 'r') as webpage:
    content = webpage.read()
    #print content
    soup = BeautifulSoup(content, "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')
    reviews = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
    stars = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings')
    #print stars
    for (img, title, price, review, star) in zip(images, titles, prices, reviews, stars):
        img_content = img.get('src')
        title_content = title.get_text()
        price_content = price.get_text()
        review_content = review.get_text()
        star_content = len(star.select('p > span.glyphicon-star'))
    #print stars

        data = {
            "title": title_content,
            "review": review_content,
            "image": img_content,
            "price": price_content,
            "rating": star_content
        }
        print(data)

运行结果

{'image': 'img/pic_0000_073a9256d9624c92a05dc680fc28865f.jpg', 'price': '$24.99', 'review': '65 reviews', 'rating': 5, 'title': 'EarPod'}
{'image': 'img/pic_0005_828148335519990171_c234285520ff.jpg', 'price': '$64.99', 'review': '12 reviews', 'rating': 4, 'title': 'New Pocket'}
{'image': 'img/pic_0006_949802399717918904_339a16e02268.jpg', 'price': '$74.99', 'review': '31 reviews', 'rating': 4, 'title': 'New sunglasses'}
{'image': 'img/pic_0008_975641865984412951_ade7a767cfc8.jpg', 'price': '$84.99', 'review': '6 reviews', 'rating': 3, 'title': 'Art Cup'}
{'image': 'img/pic_0001_160243060888837960_1c3bcd26f5fe.jpg', 'price': '$94.99', 'review': '18 reviews', 'rating': 4, 'title': 'iphone gamepad'}
{'image': 'img/pic_0002_556261037783915561_bf22b24b9e4e.jpg', 'price': '$214.5', 'review': '18 reviews', 'rating': 4, 'title': 'Best Bed'}
{'image': 'img/pic_0011_1032030741401174813_4e43d182fce7.jpg', 'price': '$500', 'review': '35 reviews', 'rating': 4, 'title': 'iWatch'}
{'image': 'img/pic_0010_1027323963916688311_09cc2d7648d9.jpg', 'price': '$15.5', 'review': '8 reviews', 'rating': 4, 'title': 'Park tickets'}

总结

  • 爬之前要先了解网页的结构
  • 熟悉soup.select()如何筛选目标元素
  • 学习如何从筛选出的元素中提取目标信息,get_text(), get('class')方法的使用
  • 将目标信息保存为一个dict, 方便整理
  • 计算星星个数的方法: star_content = len(star.select('p > span.glyphicon-star')),
    先筛选出目标标签再用len()函数得到个数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,832评论 0 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,870评论 25 708
  • 今天听了王媛老师分享的《百变朋友圈打造术》,怎样让自己的朋友圈精彩绝伦,精彩万分,让自己的朋友圈色彩鲜明,从此更加...
    辛勒换成果阅读 180评论 0 0
  • 江水沛兮。舟楫败兮。我王废兮。 趣归于薄。薄亦大兮。乐兮乐兮。 四牡跷兮。六辔沃兮。去不善而从善。何不乐兮。———...
    清风明月照牡丹阅读 174评论 0 2