title: Python 网络爬虫 (一)
date: 2016-04-13 12:47:44
< Hi , 大家好,我是 Raymond 。 由于最近一段时间比较忙,换了新的工作环境,很久没有来分享技术文章 , 不知道大家有没有捉急 >
今天给大家带来的,是 Python 的网络爬虫实现 (不包含开源框架,自己造轮子系列)
好了 首先,我们先来了解一下, 什么是爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
传送门 :网络爬虫
看来爬虫能给我们带来大量的有效数据及和用途呢 , 当大家都在拿着手机、对着电脑,等着整点秒杀的时候,你却躺在床上,看着电视喝着咖啡等着你的爬虫帮你抢回秒杀的产品,是不是想想都很开心呢?那么,快点开始吧,来实现我们的第一个基于 Python 实现的爬虫
首先,大家需要了解一下 python 中常用的爬虫模块 包含:urllib2、urllib3、requests、BeautifulSoup 、 re 等
本章,我们先来介绍 requests 模块的简单使用,后续章节,我们会深入讲解其他爬虫模块
如果你还没有接触过 python,没有关系 python-requests ,可以查看文档后,再继续学习以下内容
import requests # 导入requests模块
request_url = 'http://testerhome.com' # 请求的url是 TesterHome的网站主页
response = requests.get(request_url).text # 请求TesterHome,并获取返回值
print(response) # 打印返回结果
WoW! 人生第一个爬虫,就这样诞生了,Python 的爬虫代码看起来是不是很简洁,很有层次感呢?
首先! 我们恭喜一下自己,你的爬虫成功的把 TesterHome 的主页 html 抓下来,并返回给你,你成功了。(如果返回错误,请自行对比代码)
那么问题随之而来, 竟然返回了一个 html ,这是什么鬼,我应该怎么样才能把这个 html 中我需要的内容获取出来?
容我卖个关子,今天就讲到这里, 下一张,我们会开始讲 html 的解析和 json 的解析 (接口测试包含,简单讲解一下)
留一部分练习内容:
如果遇到问题,可以在 TesterHome 的官方测试群@BJ-行者
是准备用 urllib 还是直接用 scrapy 啊
感谢楼主的技术分享,小白第一步就卡住了,py2.7 并不包含这些模块,可否另开一个传送门引导?
#10 楼 @jamesparagon pip 大法
#10 楼 @jamesparagon requests 需要安装,pip 一下吧
成功了,不过小白作死尝试了一下 www.baidu.com 电脑直接蓝屏了
给煎饼怂恿下这么快就出来了,把一系列的都写出来吧,看样子不错
zan
你这文章这么短, 差评啊.
#20 楼 @seveniruby 不短点留点神秘,怎么拉起人的好奇心呢
坐等连载~
#24 楼 @jianjianjianbing 嘿嘿。这部分还是比较简单的,后面如果大家都感兴趣,再开一片多线程消息队列的
#23 楼 @jianjianjianbing 下次看你分享,你懂的好像更多。
已关注大神,默默等待更新
期待更新,一直想尝试爬虫
慕课网有 nodejs 写的爬虫
期待后续内容
可以多个合在一起
不错,可以试试!
—— 来自 TesterHome 官方 安卓客户端
这个可以在 python3 下运行吗
#34 楼 @m58944869 是的呢, 这是 python3
感觉刚开始接触用 urllib2 跟 py2 比较好
下一篇什么时候出?坐等
最后输出,报这样的错:File "", line 1, in <mo
UnicodeEncodeError: 'gbk' codec
5: illegal multibyte sequence
给楼主赞一个
我已经解决了。网上找的问题链接
response 得到的 Unicode 的字符,需要 print 出来的话,由于 Windows 下的 cmd 是 GBK 编码的(可以在 cmd 中点击菜单查看属性),所以需要先将 Unicode 的 response 先编码为 GBK,然后再在 cmd 中显示出来,然后由于 response 中包含一些 GBK 中无法显示的字符,导致此时提示 “’gbk’ codec can’t encode”。
添加 ignore 参数,忽略无法无法编码的字符,这样就可以正常编码为 GBK 了。
最终代码:
# -*- coding: utf8 -*-
import requests
request_url = 'https://testerhome.com/topics/4637'
response = requests.get(request_url).text
print(response.encode("GBK",'ignore'))#result
报 ImportError: No module named 'urllib3.exceptions',求解