python爬虫之爬取捧腹网段子
2017-06-23 16:14
267 查看
背景:抓取捧腹网首页的段子和搞笑图片链接
如图:
地址:https://www.pengfu.com/
首页中有很多子页面:
这里抓取前10页的段子和图片链接。
首先写一个获取页面的接口,捧腹网页面可以直接获取,不需要做特殊处理,代码如下:
获取页面之后对页面进行提取处理,捧腹网的每一个段子是一个整体,在一个块级结构里,所以先对一个页面提取出所有的段子,然后在提取每个段子的文字描述和图片链接。
首先提取所有的段子,代码:
获取的所有的段子后,提取内容,捧腹网的段子要么是搞笑文字描述,要么是图片,其中图片有动图gif和静图,所以接下来循环遍历所有的段子,提取搞笑内容。代码:
这样获取了一个页面的所有的段子,获取前10页的段子同理,只需写一个遍历生成10个地址,逐一获取这10个地址的段子就好了。
接下来打印出提取的内容,代码:
结果如下:
如图:
地址:https://www.pengfu.com/
首页中有很多子页面:
这里抓取前10页的段子和图片链接。
首先写一个获取页面的接口,捧腹网页面可以直接获取,不需要做特殊处理,代码如下:
# -*- coding:utf-8 -*- #Python抓取网页必备的库 import urllib import urllib2 #正则表达式 import re #user-agent user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" #抓取页面接口,参数为地址和referer def getHtml(url, referer = None): try: #构建页面请求的头部 headers = {'User-Agent':user_agent, "Referer":referer} #构建页面请求 request = urllib2.Request(url, headers=headers) #请求目的页面,设置超时时间为45秒 response = urllib2.urlopen(request, timeout = 45) #读取数据 html = response.read() return html #如果请求异常 except urllib2.URLError, e: if hasattr(e, "code"): print e.code elif hasattr(e, "reason"): print e.reason return None
获取页面之后对页面进行提取处理,捧腹网的每一个段子是一个整体,在一个块级结构里,所以先对一个页面提取出所有的段子,然后在提取每个段子的文字描述和图片链接。
首先提取所有的段子,代码:
#捧腹网地址 PENGFU_URL = "https://www.pengfu.com/index_{0}.html" #获取页面 html = getHtml(PENGFU_URL.format(1)) #提取段子的正则表达式 pattern = re.compile('<dl class="clearfix dl-con">(.*?)</dl>', re.S) #获得所有的段子 articleRes = re.findall(pattern, html)
获取的所有的段子后,提取内容,捧腹网的段子要么是搞笑文字描述,要么是图片,其中图片有动图gif和静图,所以接下来循环遍历所有的段子,提取搞笑内容。代码:
#遍历段子 for article in articleRes: #取图片或内容,有图片则提取图片,没有图片则提取文字描述 #静图链接正则表达式 pattern = re.compile('<div class="content-img.*?<img.*?jpgsrc="(.*?)".*?>.*?</div>', re.S) #提取静图链接 jpg = re.search(pattern, article) #动图链接正则表达式 pattern = re.compile('<div class="content-img.*?<img.*?gifsrc="(.*?)".*?>.*?</div>', re.S) #提取动图链接 gif = re.search(pattern, article) #判断是否有图片 if (jpg != None) or (gif != None): #取链接 link = (gif != None) and gif.group(1) or jpg.group(1) #存入结果 Res.append(link) else: #没有图片,提取文字描述 #文字描述正则表达式 pattern = re.compile('<div class="content-img.*?>(.*?)</div>', re.S) #提取文字描述 content = re.search(pattern, article) if content == None: continue else: #存入结果 Res.append(content.group(1))
这样获取了一个页面的所有的段子,获取前10页的段子同理,只需写一个遍历生成10个地址,逐一获取这10个地址的段子就好了。
接下来打印出提取的内容,代码:
#打印结果 for v in Res: print(v.decode('utf8'))
结果如下:
相关文章推荐
- python3制作捧腹网段子页爬虫
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫教程——实战一之爬取糗事百科段子
- Python爬虫实战一:爬取糗事百科的文本段子
- Python爬虫实战一之爬取糗事百科段子
- Python 爬虫 简单实例 爬取糗事百科段子
- 使用python 编写 抓取内涵段子动态图的简单爬虫
- python爬虫学习——爬取糗百页面段子
- python实现爬虫抓取段子
- python 爬虫 爬取糗事百科段子
- python爬虫爬取段子
- Python 网络爬虫 - 抓取糗事百科的段子(最新版)
- 玩转python爬虫之爬取糗事百科段子
- 玩转python爬虫之爬取糗事百科段子
- python爬虫学习(2)__抓取糗百段子,与存入mysql数据库
- Python抓取段子的爬虫
- Python爬虫实战(1):爬取糗事百科段子
- Python3.4简单爬虫实现之抓取糗事百科段子
- Python 爬虫实战 - 糗事百科段子
- Python爬虫实战一之爬取糗事百科段子