Python爬虫实战(二)使用Beautifulsuop来解析整个页面

    一.   BeautifulSoup的官方解释:

        Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

 1.  在上一篇文章,这篇文章主要记录使用 beautifulsoup来解析我们想要获得字段。因为Beautifulsoup已经移植到bs4,所以要从这个模块引入。

官方文档:http://beautifulsoup.readthedocs.io/zh_CN/latest/

      find_all( name , attrs , recursive , text , **kwargs )这个方法可以用遍历所有的文档并返回一个列表。 可以同get_text()来回去列表某个元素的内容,get('class')参数是属性名,来获得某个属性的内容

      select()也是遍历文档树,并返回一个列表。其他使用方法同 find_all.唯一不同的是参数传递方法不同,如果select属性查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。 eg:soup.select('p[class="star"]')  等价于 soup.find_all('p','star')

 思考:可以看到find_all方法被调用了,是否可以考虑用一个class来包装这个方法,通过传入的参数不同,用面向对象的方法来调用这个类。

def parse_one_page(soup):

    score_integer=soup.find_all('i','integer')
    score_fraction=soup.find_all('i','fraction')
    
    index=soup.find_all('i','board-index')
    actor=soup.find_all('p','star')
    time=soup.find_all('p','releasetime')
    #also can use select method
    #title=soup.select('a[class="image-link"]')[0].get('title')  
    title=soup.find_all('a','image-link') 
    image=soup.find_all('img','board-img')
    for i in range(len(title)):
        yield{ 
             "index":index[i].get_text(),
             "title":title[i].get('title'),
             "actor":actor[i].get_text().strip()[3:],
             "time":time[i].get_text().strip()[5:],
             "score":score_integer[i].get_text()+score_fraction[i].get_text(),
             "image":image[i].get('data-src')
              
             }

 

原文地址:https://www.cnblogs.com/yan-2010/p/7099949.html