源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python网页解析利器BeautifulSoup安装使用介绍

  • 时间:2020-08-27 17:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python网页解析利器BeautifulSoup安装使用介绍
python解析网页,无出BeautifulSoup左右,此是序言 [b]安装[/b] BeautifulSoup4以后的安装需要用eazy_install,如果不需要最新的功能,安装版本3就够了,千万别以为老版本就怎么怎么不好,想当初也是千万人在用的啊。安装很简单
[url=http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.2.1.tar.gz]http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.2.1.tar.gz[/url]"  $ tar zxvf BeautifulSoup-3.2.1.tar.gz 
然后把里面的BeautifulSoup.py这个文件放到你python安装目录下的site-packages目录下 site-packages是存放Python第三方包的地方,至于这个目录在什么地方呢,每个系统不一样,可以用下面的方式找一下,基本上都能找到
[url=http://movie.douban.com/tag/%E5%96%9C%E5%89%A7]http://movie.douban.com/tag/%E5%96%9C%E5%89%A7[/url]
它是豆瓣电影分类下的喜剧电影,如果让你找出里面评分最高的100部,该怎么做呢 好了,我先晒一下我做的,鉴于本人在CSS方面处于小白阶段以及天生没有美术细菌,界面做的也就将就能看下,别吐 [img]http://files.jb51.net/file_images/article/201503/201531791116509.png?201521791125[/img] 接下来我们开始学习BeautifulSoup的一些基本方法,做出上面那个页面就易如反掌了 鉴于豆瓣那个页面比较复杂,我们先以一个简单样例来举例,假设我们处理如下的网页代码
[url=http://www.leeon.me/upload/other/beautifulsoup-documentation-zh.html]http://www.leeon.me/upload/other/beautifulsoup-documentation-zh.html[/url] [b]初始化[/b] 首先将上面的HTML代码赋给一个变量html如下,为了方便大家复制这里贴的是不带回车的,上面带回车的代码可以让大家看清楚HTML结构
[url=http://movie.douban.com/tag/%E5%96%9C%E5%89%A7]http://movie.douban.com/tag/%E5%96%9C%E5%89%A7[/url] 如果要得到评分前100的所有电影,对这个页面需要提取两个信息:1、翻页链接;2、每部电影的信息(外链,图片,评分、简介、标题等) 当我们提取到所有电影的信息后再按评分进行排序,选出最高的即可,这里贴出翻页提取和电影信息提取的代码
[u]复制代码[/u] 代码如下:
## filename: Grab.py  from BeautifulSoup import BeautifulSoup, Tag  import urllib2  import re  from Log import LOG    def LOG(*argv):      sys.stderr.write(*argv)      sys.stderr.write('\n')    class Grab():      url = ''      soup = None      def GetPage(self, url):          if url.find('http://',0,7) != 0:              url = 'http://' + url          self.url = url          LOG('input url is: %s' % self.url)          req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"})          try:              page = urllib2.urlopen(req)          except:              return          return page.read()          def ExtractInfo(self,buf):          if not self.soup:              try:                  self.soup = BeautifulSoup(buf)              except:                  LOG('soup failed in ExtractInfo :%s' % self.url)              return          try:              items = self.soup.findAll(attrs={'class':'item'})          except:              LOG('failed on find items:%s' % self.url)              return          links = []          objs = []           titles = []          scores = []          comments = []          intros = []          for item in items:              try:                  pic = item.find(attrs={'class':'nbg'})                  link = pic['href']                  obj = pic.img['src']                  info = item.find(attrs={'class':'pl2'})                  title = re.sub('[ \t]+',' ',info.a.getText().replace(' ','').replace('\n',''))                  star = info.find(attrs={'class':'star clearfix'})                  score = star.find(attrs={'class':'rating_nums'}).getText().replace(' ','')                  comment = star.find(attrs={'class':'pl'}).getText().replace(' ','')                  intro = info.find(attrs={'class':'pl'}).getText().replace(' ','')              except Exception,e:                  LOG('process error in ExtractInfo: %s' % self.url)                  continue              links.append(link)              objs.append(obj)              titles.append(title)                  scores.append(score)              comments.append(comment)              intros.append(intro)          return(links, objs, titles, scores, comments, intros)        def ExtractPageTurning(self,buf):          links = set([])          if not self.soup:              try:                  self.soup = BeautifulSoup(buf)              except:                  LOG('soup failed in ExtractPageTurning:%s' % self.url)                  return          try:              pageturning = self.soup.find(attrs={'class':'paginator'})              a_nodes = pageturning.findAll('a')              for a_node in a_nodes:                  href = a_node['href']                  if href.find('http://',0,7) == -1:                      href = self.url.split('?')[0] + href                  links.add(href)          except:              LOG('get pageturning failed in ExtractPageTurning:%s' % self.url)            return links        def Destroy(self):          del self.soup          self.soup = None 
接着我们再来写个测试样例
[u]复制代码[/u] 代码如下:
## filename: test.py  #encoding: utf-8  from Grab import Grab  import sys  reload(sys)  sys.setdefaultencoding('utf-8')    grab = Grab()  buf = grab.GetPage('http://movie.douban.com/tag/喜剧?start=160&type=T')  if not buf:          print 'GetPage failed!'          sys.exit()  links, objs, titles, scores, comments, intros = grab.ExtractInfo(buf)  for link, obj, title, score, comment, intro in zip(links, objs, titles, scores, comments, intros):          print link+'\t'+obj+'\t'+title+'\t'+score+'\t'+comment+'\t'+intro  pageturning = grab.ExtractPageTurning(buf)  for link in pageturning:          print link  grab.Destroy() 
OK,完成这一步接下来的事儿就自个看着办吧 本文只是介绍了BeautifulSoup的皮毛而已,目的是为了让大家快速学会一些基本要领,想当初我要用什么功能都是去BeautifulSoup的源代码里一个函数一个函数看然后才会的,一把辛酸泪啊,所以希望后来者能够通过更便捷的方式去掌握一些基本功能,也不枉我一字一句敲出这篇文章,尤其是这些代码的排版,真是伤透了脑筋
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部