其他测试框架 Python 网络爬虫 (一)

刘津嘉 · 2016年04月13日 · 最后由 MagicCube 回复于 2018年02月01日 · 5467 次阅读

title: Python 网络爬虫 (一)
date: 2016-04-13 12:47:44

tags: Python

< Hi , 大家好,我是 Raymond 。 由于最近一段时间比较忙,换了新的工作环境,很久没有来分享技术文章 , 不知道大家有没有捉急 >

今天给大家带来的,是 Python 的网络爬虫实现 (不包含开源框架,自己造轮子系列)

好了 首先,我们先来了解一下, 什么是爬虫

什么是网络爬虫?

网络爬虫(又被称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

传送门 :网络爬虫

网络爬虫能给我们在日常生活带来什么?

  • 搜索引擎的基础应用
  • 抓取大数据的一种手段
  • 网页下载器
  • 网店秒杀

看来爬虫能给我们带来大量的有效数据及和用途呢 , 当大家都在拿着手机、对着电脑,等着整点秒杀的时候,你却躺在床上,看着电视喝着咖啡等着你的爬虫帮你抢回秒杀的产品,是不是想想都很开心呢?那么,快点开始吧,来实现我们的第一个基于 Python 实现的爬虫

用 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 的相关文章
  • 尝试获取任意一篇知乎的文章

如果遇到问题,可以在 TesterHome 的官方测试群@BJ-行者

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 44 条回复 时间 点赞

是准备用 urllib 还是直接用 scrapy 啊

#1 楼 @jphtmt 不用框架, 自己写轮子,后续讲分布式,这部分其实主要的用意是让大家写出 pythinic 的代码 , 熟悉并习惯 python 的代码形式

#2 楼 @raymond 那解析呢,用 bs4?这些天一直在尝试写一个爬虫,卡在验证码了

#3 楼 @jphtmt 验证码部分现在通常的做法是将验证码拉回本地,手动输入,如果你想程序自动识别图像,这个太困难了

#4 楼 @raymond 我就是拉回本地的, 但是手动输入后就出了问题

#5 楼 @jphtmt 可否发给我看一下

#6 楼 @raymond 代码还在远程服务器上,得回去找找,希望能写个处理验证码的例子,嘿嘿

#7 楼 @jphtmt 下一章会放两部分的爬虫内容, 一个是 html 的简单解析,第二部分,是应用的模拟登录, 你说的内容, 可能会在第三章中放出来, 结合第二章的内容, 用 python 实现登陆 TesterHome

#8 楼 @raymond 好,我之前尝试的是豆瓣,我找时间尝试下登录 testerhome 试试

感谢楼主的技术分享,小白第一步就卡住了,py2.7 并不包含这些模块,可否另开一个传送门引导?

#9 楼 @jphtmt TesterHome 的登陆, 有_xsrf 验证 包含了 bs4 的解析模块还有你提到的验证码

#12 楼 @raymond 嗯, 我看到了,知乎也采用了_xsrf 验证,每次抓取_xsrf 值就好了吧

#10 楼 @jamesparagon requests 需要安装,pip 一下吧

#13 楼 @jphtmt 对 每次登陆获取一次就好了。前两天我还在群里说。。TesterHome 的登陆验证方式,和知乎很相似啊

成功了,不过小白作死尝试了一下 www.baidu.com 电脑直接蓝屏了

给煎饼怂恿下这么快就出来了,把一系列的都写出来吧,看样子不错

#17 楼 @darker50 哈哈, 好的, 得向煎饼多学习 , 这套系列 预计是分 5 章写完, 初级的 python 爬虫造轮子系列

你这文章这么短, 差评啊.

#20 楼 @seveniruby 不短点留点神秘,怎么拉起人的好奇心呢

#21 楼 @raymond 作业已完成 期待老师的新课

#17 楼 @darker50 哈哈,幸福

坐等连载~

#24 楼 @jianjianjianbing 嘿嘿。这部分还是比较简单的,后面如果大家都感兴趣,再开一片多线程消息队列的

#23 楼 @jianjianjianbing 下次看你分享,你懂的好像更多。

已关注大神,默默等待更新

期待更新,一直想尝试爬虫

慕课网有 nodejs 写的爬虫

期待后续内容

可以多个合在一起

#31 楼 @monkey 太长了。5-5 章节

不错,可以试试!

—— 来自 TesterHome 官方 安卓客户端

这个可以在 python3 下运行吗

#34 楼 @m58944869 是的呢, 这是 python3

感觉刚开始接触用 urllib2 跟 py2 比较好

#36 楼 @fing520 urllib 有好有坏吧, 好的地方是对爬虫及 http 原理解释的足够详细, 不好的地方是太唠叨了。。。

下一篇什么时候出?坐等

最后输出,报这样的错:File "", line 1, in <mo
UnicodeEncodeError: 'gbk' codec
5: illegal multibyte sequence

刘津嘉 [该话题已被删除] 中提及了此贴 10月08日 16:37

#36 楼 @fing520 requests 模块非常简单易用,想快速出东西就用它

给楼主赞一个

刘津嘉 Python 网络爬虫 (二) 中提及了此贴 04月11日 08:15
Huhy_test 回复

我也报这样的错了,但是文件开头有写

# -*- coding: utf8 -*-

现在你解决了吗?

Huhy_test 回复

我已经解决了。网上找的问题链接
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',求解

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册