python爬虫深入爬取_Python爬虫初学(一)—— 爬取段子
最近开始学Python的爬虫,是在这个博客跟着学习的,该博主用的是Python 2.7版本,而我使用的是3.5版本,很多不兼容的地方,不过没关系,自己改改就好了。
我们想针对网站的内容进行筛选,只获取自己感兴趣的部分。比如你想在XX网站把小黄图筛选出来,打包带走。这里只做简单的实现,以百思不得姐上的段子(纯文本)为例。我们想要实现如下功能:
批量下载若干页段子到本地文件中
按下任意一键,开始阅读下一条段子
1. 获取网页代码
导入urllib的相关库,Python 3中应该这样写:
import urllib.request
import urllib.parse
import re
re库是正则表达式(Regular Expression),后面作匹配时会用到。
百思不得姐的段子页面url ='http://www.budejie.com/text/1',这里末尾数字1代表此为第一页。通过以下代码就能返回网页内容。
req = urllib.request.Request(url)
# 添加headers 使之看起来像浏览器在访问
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
response = urllib.request.urlopen(req)
# 得到网页内容,注意必须使用decode()解码
html = response.read().decode('utf-8')
print(html)的话,就是如下所示的内容:
这能看?段子呢?我们想要的段子呢?!
哦对了headers这样查看。
按F12,然后...看图吧
2. 正则匹配提取段子
要想筛选符合普通人阅读的内容(如果还带着html标签那还咋读是不),成功提取出段子,为此我们需要一些既定的模式去和网页全部内容进行匹配,将模式下匹配成功的对象返回。我们使用强大的正则表达式进行匹配(Regular Expression),相关语法可以看这里。
仅仅针对本例中的网页内容,先看看我们需要的段子对应了网页中的什么内容。
可以看到段子被
这样的标签所包围,只需要指定相应规则提取出来即可!上图可以看出段子正文前后是有很多空格的,需要匹配进去。
pattern = re.compile(r'
')
result = re.findall(pattern, html)
通过re库的compile函数制定规则。
\s+可以匹配一个或更多的空格
.匹配除开换行符\n外的所有字符。
现在我们得到了匹配后的结果,来看下。
Bingo!提取出来了不是?!
可是我们发现里面还有些讨厌的
。没关系,写几行代码的事。这里就不再展示去掉后的内容,自行脑补哈哈。
for each in content:
# 如果某个段子里有
if '
' in each:
# 替换成换行符并输出
new_each = re.sub(r'
', '\n', each)
print(new_each)
# 没有就照常输出
else:
print(each)
这里content由get_content方法返回,表示所有获取到的段子列表。get_content方法下面会给出实现。
至此,我们成功得到我们想看的段子了!如果想要下载到本地呢?
3. 下载段子到本地
通过定义一个save()函数即可,num参数用户自定,想下载最近100页的内容都没问题!里面还有些变量没有提到,最后会给出源代码。
# num是指定网页页数
def save(num):
# 写方式打开一个文本,把获取的段子列表存放进去
with open('a.txt', 'w', encoding='utf-8') as f:
text = get_content(num)
# 和上面去掉
类似
for each in text:
if '
' in each:
new_each = re.sub(r'
', '\n', each)
f.write(new_each)
else:
f.write(str(each) + '\n')
下载到本地文档后如下图所示
4. 逐条读取段子
段子太多,琳琅满目。可我们只希望一条条阅读。通过按下键盘任意键可以切换到下一条,直到读取到最后一条程序才结束,或者通过设置一个退出键随时退出程序,比如设定q键退出。这里把全部代码给出。
import urllib.request
import urllib.parse
import re
pattern = re.compile(r'
')
# 返回指定网页的内容
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
return html
# num为用户自定,返回的是所有页的段子列表
def get_content(num):
# 存放段子的列表
text_list = []
for page in range(1, int(num)):
address = 'http://www.budejie.com/text/' + str(page)
html = open_url(address)
result = re.findall(pattern, html)
# 每一页的result都是一个列表,将里面的内容加入到text_list
for each in result:
text_list.append(each)
return text_list
# num是指定网页页数
def save(num):
# 写方式打开一个文本,把获取的段子列表存放进去
with open('a.txt', 'w', encoding='utf-8') as f:
text = get_content(num)
# 和上面去掉
类似
for each in text:
if '
' in each:
new_each = re.sub(r'
', '\n', each)
f.write(new_each)
else:
f.write(str(each) + '\n')
if __name__ == '__main__':
print('阅读过程中按q随时退出')
number = int(input('想读几页的内容: '))
content = get_content(number + 1)
for each in content:
if '
' in each:
new_each = re.sub(r'
', '\n', each)
print(new_each)
else:
print(each)
# 用户输入
user_input = input()
# 不区分大小写的q,输入则退出
if user_input == 'q' or user_input == 'Q':
break
演示一下,效果是这样的。
虽然功能很鸡肋,不过作为初学我还是很满意了,有兴趣才能深入下去嘛!爬虫可不仅仅如此而已,以后会学习更加高级的功能。
by @sunhaiyu
2016.8.15
python爬虫深入爬取_Python爬虫初学(一)—— 爬取段子相关推荐
- python爬虫微博评论图片_python爬虫爬取微博评论
原标题:python爬虫爬取微博评论 python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手.python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无 ...
- python爬虫教材推荐 豆瓣_Python爬虫入门教程:豆瓣Top电影爬取
基本开发环境Python 3.6 Pycharm 相关模块的使用requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一.明确需求 爬 ...
- python爬虫教材推荐 豆瓣_Python爬虫爬取豆瓣书籍数据
炎热的夏天,酷暑难挡,难免会心烦意燥,睡前随手拿起枕边看过很多遍的「平凡的世界」.看书,会让躁动的心瞬间安静下来. 生活不能等待别人来安排,要自己去争取和奋斗:而不论其结果是喜是悲,但可以慰藉的是,你 ...
- python爬虫快速下载图片_Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests...
Python到底多强大,绝对超乎菜鸟们(当然也包括我了)的想象.近期我接触到了爬虫,被小小地震撼一下.总体的感觉就两个词--"强大"和"有趣".今天就跟大家分享 ...
- python发短信 金山_Python爬虫基础练习(四) 金山翻译爬取(进阶篇)
上一篇文章金山翻译爬取(基础篇)讲到爬取金山翻译,并且实现了简单词汇的爬取,但是我们的报错信息都是一长串字符,就像这样 当然这个报错还是很容易看懂的,"列表索引超出范围",但是我们 ...
- pythonscrapy爬虫 崔庆才_Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- python爬图片_python爬虫(爬取图片)
python爬虫爬图片 爬虫爬校花网校花的图片 第一步 载入爬虫模块#载入爬虫模块 import re #载入爬虫模块 import requests #载入爬虫模块 第二步 获得校花网的地址,获得其 ...
- python壁纸数据抓取_python爬虫系列之 xpath实战:批量下载壁纸
一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照 ...
- python爬虫scrapy框架教程_Python爬虫教程-30-Scrapy 爬虫框架介绍
从本篇开始学习 Scrapy 爬虫框架 Python爬虫教程-30-Scrapy 爬虫框架介绍 框架:框架就是对于相同的相似的部分,代码做到不出错,而我们就可以将注意力放到我们自己的部分了 常见爬虫框 ...
- python爬虫网络出错怎么办_Python爬虫常见问题
第一个问题:JS加密如何突破 (1) 熟练掌握Chrome的开发者工具的各个功能,Elements, Network,Source (2) 认真观察,善于思考.Network查看加载流程,找可疑的xh ...
最新文章
- 根据ip获取地理位置
- java cache缓存_为什么 Java 中“1000==1000”为false,而”100==100“为true?
- 缺省参数-指定函数缺省参数的默认值
- Qt学习之路(28): 坐标变换
- linux命令怎么调wsdl,如何从命令行执行SOAP wsdl Web服务调用
- linux6.6 sudo环境变量,linux sudo环境变量设置
- 前端开发 css样式的简写
- 虚拟主机php.ini在哪里,虚拟主机的php.ini配置文件在哪里
- 点击加入购物车直接转到购物车页面
- mysql技术blog_Mysql技术 - 包子博客 _ 关注互联网前端、开发、SEO、移动互联网应用技术...
- 利用百度搜索结果爬取邮箱
- NIFI 自定义 processor 实现
- 3.JDBC基础代码书写
- 蓝桥杯T513---- 算法训练 素因子去重 java
- 计算机考研400分以上,考研400分是什么概念?
- [转自左潇龙的博客]设计模式大杂烩(24种设计模式的总结以及学习设计模式的几点建议)...
- 联合办公空间会员需要保险吗?
- 大数据 -- 数据倾斜
- 液压绞车液压系统设计
- 奥鹏英语计算机统考时间2019,【真题及答案】2019年4月网络教育统考《大学英语B》考试试题及答案[适用于奥鹏、电大国开、网络教育学...
热门文章
- datastage 函数_DataStage_Transformer常用函数
- 拨号云服务器怎么自动配置网关_如何解决路由器静态IP+PPPoE拨号双链路负载分担问题...
- mysql分区、分表学习
- kotlin学习之lambda(十)
- PooledDirectByteBuf源码分析
- 02.elasticsearch-meta-field元字段
- Spring容器创建过程
- CentOS7关于防火墙的命令
- 爬取豆瓣TOP250并将数据保存为txt文件和csv文件并存入MySQL数据库
- dfs时间复杂度_一文吃透时间复杂度和空间复杂度