糗事百科电子版完整免费版(糗事百科软件完整免费版)

manzhushahua 6378 0

  

  最先,糗事百科大家都听闻过吧?糗友们发的搞笑的段子一抓一大把,此次大家试着一下用网络爬虫把她们爬取下来。

  温馨提示

  这篇总体目标

  糗事百科是不用登陆的,因此也没必要使用Cookie,此外糗事百科有的笑话是图下的,大家把图抓下来照片不有利于表明,那麼咱们就试着过虑掉带图的段子吧。

  好,如今大家试着爬取一下糗事百科的受欢迎段子吧,每按下一次回车键大家表明一个搞笑段子。

  糗事百科电子版完整免费版(糗事百科软件完整免费版)-第1张图片

  

  1.明确URL并爬取网页页面编码

  最先大家明确好网页页面的URL是 http://www.qiushibaike.com/hot/page/1,在其中最后一个数据1意味着页码,我们可以传到不一样的值来得到某一页的搞笑段子具体内容。

  大家基本搭建如下所示的编码来打印出网页页面编码具体内容试一试,先结构最主要的网页页面爬取方法,看一下是否会取得成功

  # -*- coding:utf-8 -*-\nimport urllib\nimport urllib2\n \n \npage = 1\nurl = 'http://www.qiushibaike.com/hot/page/' str(page)\ntry:\n request = urllib2.Request(url)\n response = urllib2.urlopen(request)\n print response.read()\nexcept urllib2.URLError, e:\n if hasattr(e,code):\n print e.code\n if hasattr(e,reason):\n print e.reason\n

  运作程序流程,哦不,它居然出错了,真的是时运不济,命途多舛啊

  line 373, in _read_status\n raise BadStatusLine(line)\nhttplib.BadStatusLine: ''\n

  行吧,应该是headers认证的问题,大家再加上一个headers认证试试看吧,将编码改动如下所示

  # -*- coding:utf-8 -*-\nimport urllib\nimport urllib2\npage = 1\nurl = 'http://www.qiushibaike.com/hot/page/' str(page)\nuser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'\nheaders = { 'User-Agent' : user_agent }\ntry:\n request = urllib2.Request(url,headers = headers)\n response = urllib2.urlopen(request)\n print response.read()\nexcept urllib2.URLError, e:\n if hasattr(e,code):\n print e.code\n if hasattr(e,reason):\n print e.reason\n

  哈哈哈,此次运作总算正常的了,打印出出了第一页的HTML编码,大伙儿可以运作下编码试一试。在这儿运作结论过长也不贴了。

  2.获取某一页的全部搞笑段子

  好,获得了HTML编码以后,大家逐渐剖析如何获得某一页的全部搞笑段子。段子

  最先大家查看源代码看一下,按电脑浏览器的F12,截屏如下所示

  糗事百科电子版完整免费版(糗事百科软件完整免费版)-第2张图片

  

  我们可以见到,每一个搞笑段子全是<div class=”article block untagged mb15″ id=”…”…</div包囊的具体内容。

  因此大家添加如下所示正则来配对一下,使用的办法是 re.findall 是寻找全部配对的具体内容。方式的使用方法详细信息能看前边说的正则的详细介绍。

  好,大家的正则配对句子撰写如下所示,在原先的基本上增加如下所示编码

  content = response.read().decode('utf-8')\npattern = re.compile('<div.*?author.*?<a.*?<img.*?(.*?)</a.*?<div.*?' \n 'content(.*?)<!--(.*?)--.*?</div(.*?)<div class=stats.*?class=number(.*?)</i',re.S)\nitems = re.findall(pattern,content)\nfor item in items:\n print item[0],item[1],item[2],item[3],item[4]\n

  如今正则在这儿稍加表明

  1).*? 是一个稳定的配搭,.和*意味着可以配对随意无尽好几个标识符,再加上?表明应用非贪欲方式开展配对,也就是大家会尽量短地做配对,之后大家还会继续很多使用 .*? 的配搭。

  2)(.*?)意味着一个分类,在这个正则中大家配对了五个分类,在后面的解析xmlitem中,item[0]就意味着第一个(.*?)所说代的具体内容,item[1]就意味着第二个(.*?)所说代的具体内容,依此类推。

  3)re.S 标示意味着在配对时为点随意模式匹配,点 . 还可以意味着回车符。

编码

  在这儿留意一下,我们要获得的具体内容如果是含有照片,立即导出出去较为繁杂,因此这儿大家只获得没有照片的搞笑段子就好了。

  因此,在这儿大家就必须对带照片的搞笑段子开展过虑。

  我们可以发觉,含有照片的笑话会带着相近下边的编码,而没有照片的则并没有,因此,大家的正则的item[3]便是获得了下边的具体内容,假如没有照片,item[3]获得的具体内容就是空。

  <div class=thumb\n<a href=/article/112061287?list=hot&s=4794990 target=_blank\n<img src=http://pic.qiushibaike.com/system/pictures/11206/112061287/medium/app112061287.jpg alt=但她们仍然开朗\n</a\n</div\n

  因此人们只必须分辨item[3]中是不是带有img标签就可以了。

  好,大家再把以上编码中的for循环改成下边的模样

  for item in items:\n haveImg = re.search(img,item[3])\n if not haveImg:\n print item[0],item[1],item[2],item[4]\n

  如今,总体的源代码如下所示

  # -*- coding:utf-8 -*-\nimport urllib\nimport urllib2\nimport re\npage = 1\nurl = 'http://www.qiushibaike.com/hot/page/' str(page)\nuser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'\nheaders = { 'User-Agent' : user_agent }\ntry:\n request = urllib2.Request(url,headers = headers)\n response = urllib2.urlopen(request)\n content = response.read().decode('utf-8')\n pattern = re.compile('<div.*?author.*?<a.*?<img.*?(.*?)</a.*?<div.*?' \n 'content(.*?)<!--(.*?)--.*?</div(.*?)<div class=stats.*?class=number(.*?)</i',re.S)\n items = re.findall(pattern,content)\n for item in items:\n haveImg = re.search(img,item[3])\n if not haveImg:\n print item[0],item[1],item[2],item[4]\nexcept urllib2.URLError, e:\n if hasattr(e,code):\n print e.code\n if hasattr(e,reason):\n print e.reason\n

  运作一下看下实际效果

  糗事百科电子版完整免费版(糗事百科软件完整免费版)-第3张图片

  

  恩,含有照片的搞笑段子已经被去除啦。是否很开心表情?

  3.健全互动,设计方案面向对象编程方式

  好了,如今最主要的一部分人们已经进行啦,剩余的是修一下井井有序的物品,大家想做到的目的性是:

  此外大家必须设计方案面向对象编程方式,引进类和方式,将编码做一下提升和封装形式,最终,大家的源代码如下所示所显示


  糗事百科PDF详细绿色版(糗事百科手机软件详细绿色版)

标签: 段子 代码

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~