使用爬虫爬取本地网页信息

2016-07-20  本文已影响0人  许山山

一、作业描述

snapshot1.png

爬取如上本地网页上商品的图片地址、标题、价格、浏览量和评分星级。

二、作业目的

  1. 使用with函数读取本地网页
  2. 使用bs4解析本地网页
  3. 使用css selector定位网页内容
  4. 使用.select方法爬取所需内容
  5. 使用字典格式化爬取数据

三、作业代码

from bs4 import BeautifulSoup

#使用with函数会在文件命令执行完毕后自动关闭文件
with open('/home/xss/Plan-for-combating/week1/1_2/1_2answer_of_homework/index.html','r') as wb_data:
    soup = BeautifulSoup(wb_data, 'lxml')
    images  = soup.select('div.thumbnail > img')
    prices  = soup.select('div.caption > h4.pull-right')
    titles  = soup.select('div.caption > h4 > a')
    amouts  = soup.select('p.pull-right')
    ratings = soup.select('div.ratings > p:nth-of-type(2)')

info = []



for title, image, price, amout, rating in zip(titles, images, prices, amouts, ratings):

    data = {
        'title' : title.get_text(),
        'image' : image.get('src'),
        'price' : price.get_text(),
        'amout' : amout.get_text(),
        'rating' : len(rating.find_all('span', class_ = 'glyphicon glyphicon-star'))
    }
    info.append(data)

for i in info:
    if float(i['rating']) > 3:
        print(i['title'], i['price'])

作业小结:

定义:zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些 tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。
例如

>>>> a = [1,2,3]
>>>> b = [4,5,6] 
>>>> zipped = zip(a,b) 
[(1, 4), (2, 5), (3, 6)] 
上一篇下一篇

猜你喜欢

热点阅读