美文网首页
Python爬虫--解析网页中的元素

Python爬虫--解析网页中的元素

作者: LineWay | 来源:发表于2016-05-27 17:36 被阅读0次

    本次学习目的:
    学会筛选所需要的信息。

    解析网页的步骤:

    1.使用Beautiful解析网页
    Soup = BeautifulSoup(html,'lxml')

    1. 描述要爬取的东西在哪里
      message = Soup.select()
      3.从标签中获得你要的信息

    1.使用BeautifulSoup解析网页

    Soup = BeautifulSoup(html, 'lxml)
    这一句代码的意思是,解析一个html文件,使用lxml这个库,在Python中,解析一个网页有多种的库,比如:html.parselxml HTMLlxml XMLhtml5lib等,选择lxml的原因是这个库相对比较快速且稳定性较好。

    2.描述要爬取的元素的位置

    网页中对应元素的检查Copy的格式有两种,selectorXPath
    区别如下:
    CSS selector:body > div:nth-child(2) > div > div.col-md-9 > div:nth-child(2) > div:nth-child(1) > div > img

    XPath:/html/body/div[1]/div/div[2]/div[2]/div[1]/div/img

    上面两行代码是一个网页中的同一个元素的selectorXPath,可以看出,XPath单纯的指出了元素所在的位置,selector则同时标出了元素的样式。

    3.筛选所需要的信息

    筛选所需要的信息,在逻辑处理上进行操作即可完成,增加筛选条件即可。

    示例代码:

    from bs4 import BeautifulSoup
    
    info = []
    
    with open('index.html','r') as wb_data:
        Soup = BeautifulSoup(wb_data,'lxml')
    
        titles = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')
        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')
        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 > p:nth-of-type(2)')
    
    for title, image, price, review, star in zip(titles, images, prices, reviews, stars):
        data = {
            'title': title.get_text(),
            'iamge': image.get('src'),
            'price': price.get_text(),
            'review': review.get_text(),
            # 对评分进行提取
            # 每个星级都有一个class_="glyphicon glyphicon-star"
            
            'star': len(star.find_all("span", class_="glyphicon glyphicon-star"))
        }
    
        info.append(data)
    
    
    for i in info:
        if i['star'] > 3:
            print i['title'],i['price']
    
    

    上述代码实现了从一个页面index.html页面爬取到所需要的信息,并对结果进行筛选并打印出来。其中的难点部分是对商品的星级评分进行爬取。

    上述代码中,提取标签中的文本信息使用get_text()方法,提取图片信息使用的是get('src'),在星级评分中使用的是find_all()

    具体的用法可以参考BeautifulSoup的中文手册

    相关文章

      网友评论

          本文标题:Python爬虫--解析网页中的元素

          本文链接:https://www.haomeiwen.com/subject/jvkfdttx.html