爬虫之BeautifulSoup

Jul 30, 2015


学习爬虫,记录一下BeautifulSoup模块


####XP下载安装Beautifulsoup

  • 地址 Beautifulsoup

  • 安装好后直接在文件中导入即可:

      from bs4 import BeautifulSoup  
    

####Beautifulsoup使用

  • 首先建立soup对象:

      url = 'http://www.idianhui.com/invest/detail.html?borrowid=11'
      req = urllib2.Request(url)
            
      response = urllib2.urlopen(req)
      mypage = response.read()
      soup = Beautifulsoup(mypage)
    
  • 获取特定的标签:

      capitalli = soup.find('li', class_='account')#获取class为'account'的li标签
        
      capitalli = soup.find('li', text = "Next") #获取标签文本为"Next"的标签
        
      例: <a href="page-2.html" style="text-decoration:underline;">Next</a>
      next_page = soup.find("a", text="Next")
    
  • 获取当前标签的下一个兄弟标签

      watchednumitem = div.find("div", {"class":"article_meta article_meta_nowrap"}).find("span", {"class":None})
      print watchednumitem
      watchednumitem_text = watchednumitem.get_text().strip()
      if filter(lambda x : x.isdigit(),watchednumitem_text) == '' :
          watchednumitem = watchednumitem.find_next()     #获取下一个兄弟标签
          print watchednumitem
          watchednumitem_text = watchednumitem.get_text().strip()
      watchednum = int (filter(lambda x : x.isdigit(),watchednumitem_text))
      print "阅读数为:%s" %watchednum
    
  • 获取标签里的内容和特定的属性值:

      capital = capitalli.find('p').get_text()
      capital = capitalli.find('p').attrs['xxx']
    
  • 标签里有多个子标签并列时:先获取全部内容,再用正则分别取特定部分

      repaymodeul = soup.find('ul', class_='clearfix')
      repaymodeli = repaymodeul.get_text()# 获取li标签下面的全部内容
        
      repaymode = re.search(u"还款方式.*",repaymodeli).group()#还款方式
      statenow = re.search(u"当前状态.*",repaymodeli).group().replace("\n","").replace("\r","").replace("\t","").replace(" ","")#当前状态
    

注意事项:

  • 汉字在IF条件中:

    if "分钟".decode('utf-8') in updatetimeitem  #一般都要加decode('utf-8'),否则会出现编码错误
    
  • 通过标签属性筛选

    find("img", {"alt":True})       #表示有alt属性的img标签  
    find("img", {"alt":None})       #表示没有alt属性的img标签,也可以写False
    find("img", {"alt":None,"class":True})      #可以多个属性过滤
    
  • 选择合适的标签属性

    item.image = list.find("div", {"class":"hlist-list-pic"}).find("img", {"alt":True}).attrs['data-src']
    #在取图片的标签时要注意区分动态链接,即选择合适的attrs,一般选没有下划线即不含其它链接的
    
  • 链接

    item.href = "http://www.huihui.cn" + str (item.href.find("a", {"data-log":True}).attrs['href'])
    #上面的情况最好加上 str()
    
  • 看清标签之间的关系,特别是没有三角形的标签,即找对标签之间的父子关系


参考文章:静觅博客


结语:

坚持每天进步一点点…