python 爬虫004-使用urllib2与正则表达式扒取糗事百科新鲜页首页帖子
面向过程的方式
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import urllib2
- import sys
- import re
- import os
- type = sys.getfilesystemencoding()
- if __name__ == '__main__':
- # 1.访问其中一个网页地址,获取网页源代码
- url = 'http://www.qiushibaike.com/textnew/'
- user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'
- headers = {'User-Agent': user_agent}
- try:
- req = urllib2.Request(url=url, headers=headers)
- res = urllib2.urlopen(req)
- html = res.read().decode("UTF-8").encode(type)
- except urllib2.HTTPError as e:
- print e
- exit()
- except urllib2.URLError as e:
- print e
- exit()
- # 2.根据抓取到的网页源代码去提取想要的数据,帖子id,帖子内容
- regex_content = re.compile(
- '<div class="article block untagged mb15" id=(.*?)>(?:.*?)<div class="content">(.*?)</div>',
- re.S)
- items = re.findall(regex_content, html)
- for item in items:
- file_name = item[0].strip('\'')
- content = item[1].strip().lstrip('<span>').rstrip('</span>').replace('\n', '').replace(
- '<br/>', '\n')
- # 3.保存抓取的数据到文件中
- path = 'qiubai'
- if not os.path.exists(path):
- os.makedirs(path)
- file_path = path + '/' + file_name + '.txt'
- with open(file_path, 'w') as fp:
- fp.write(content)
- fp.close()
面向对象的方式
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import urllib2
- import re
- import os
- import sys
- type = sys.getfilesystemencoding()
- class Spider:
- def __init__(self):
- self.url = 'http://www.qiushibaike.com/textnew/page/%s/?s=4979315'
- self.user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'
- # 获取网页源代码
- def get_page(self, page_index):
- headers = {'User-Agent': self.user_agent}
- try:
- req = urllib2.Request(url=self.url % str(page_index), headers=headers)
- res = urllib2.urlopen(req)
- html = res.read().decode("UTF-8").encode(type)
- return html
- except urllib2.HTTPError as e:
- print e
- exit()
- except urllib2.URLError as e:
- print e
- exit()
- # 分析网页源代码
- def analysis(self, html):
- regex_content = re.compile(
- '<div class="article block untagged mb15" id=(.*?)>(?:.*?)<div class="content">(.*?)</div>',
- re.S)
- items = re.findall(regex_content, html)
- return items
- # 保存抓取的数据到文件中
- def save(self, items, path):
- if not os.path.exists(path):
- os.makedirs(path)
- for item in items:
- file_name = item[0].strip('\'')
- content = item[1].strip().lstrip('<span>').rstrip('</span>').replace('\n', '').replace(
- '<br/>', '\n')
- file_path = path + '/' + file_name + '.txt'
- with open(file_path, 'w') as fp:
- fp.write(content)
- fp.close()
- # 运行的方法
- def run(self):
- print u'开始抓取内容...'
- for i in range(1, 3):
- content = self.get_page(i)
- items = self.analysis(content)
- self.save(items, 'qiubai')
- print u'内容抓取完毕...'
- if __name__ == '__main__':
- sp = Spider()
- sp.run()
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
python 爬虫004-使用urllib2与正则表达式扒取糗事百科新鲜页首页帖子的更多相关文章
- 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据
初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...
- python爬取糗事百科段子
初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) #-*-coding:utf--*- import urllib import urllib2 import re page = url ...
- Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- Python爬虫--抓取糗事百科段子
今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该 ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
- Python爬虫爬取糗事百科段子内容
参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import ...
- 芝麻HTTP:Python爬虫实战之爬取糗事百科段子
首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...
- 8.Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- python网络爬虫--简单爬取糗事百科
刚开始学习python爬虫,写了一个简单python程序爬取糗事百科. 具体步骤是这样的:首先查看糗事百科的url:http://www.qiushibaike.com/8hr/page/2/?s=4 ...
随机推荐
- 洛谷 P2331 [SCOI2005]最大子矩阵
洛谷 这一题,乍一眼看上去只想到了最暴力的暴力--大概\(n^4\)吧. 仔细看看数据范围,发现\(1 \leq m \leq 2\),这就好办了,分两类讨论. 我先打了\(m=1\)的情况,拿了30 ...
- NOIP2018酱油记
考完了,终于有时间来写游记了. 有一种悲伤,叫做知道正解是什么但是就是不会写... 有一种遗憾,叫做能拿到的分考完才意识到... 有一种$NOIP$,叫做$Day1$原题大赛,$Day2AHOI$.. ...
- 洛谷P4475 巧克力王国
洛谷P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的. 但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为 ...
- 报错:Cannot remove entries from nonexistent file c:\program files\anaconda3\lib\site-packages\easy-install.pth
Outline 这两天通过“掘金量化终端”跑模型策略,之前装好环境一直ok,可以顺畅的Running~ 下午重装了下 Anaconda,刚才跑的时候提示 缺少“gm”模块 (掘金量化必须包): 就按照 ...
- python小知识点复习
join 与 split 对应,join传入的列表只包含字符串卡类型 字典 dic = {'x':1, 'y':2, 'x':3} print(dic) # {'x': 3, 'y': 2} 重复的k ...
- 我的Android进阶之旅------>关于android:layout_weight属性的详细解析
关于androidlayout_weight属性的详细解析 效果一 效果二 图3的布局代码 图4的布局代码 效果三 图7代码 图8代码 效果四 效果五 版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转 ...
- Python井字游戏
import sys def print_board(): for i in range(3): for j in range(3): print map[2 - i][j], if j != 2: ...
- SVN入门-2分钟教你入门
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010540106/article/details/37317201 学习SVN首先我们应该知道 ...
- HTML5 canvas绘图基本使用方法
<canvas></canvas>是HTML5中新增的标签,用于绘制图形,实际上,这个标签和其他的标签一样,其特殊之处在于该标签可以获取一个CanvasRenderingCon ...
- 在Centos上打Preempt-rt实时补丁
1.系统centos6.5,内核2.6.31.6,补丁patch-2.6.31.6-rt19.bz2,以下方式获得: wget https://www.kernel.org/pub/linux/ker ...