python读取html_从零开始的Python爬虫教程(一):获取HTML文档

前言:在上一节从零开始的Python爬虫教程(零):粗识HTML结构中,粗略给大家介绍了一下HTML文档,是为了在接下来的教程中让大家更容易理解和掌握。在接下来的教程中,需要大家提前安装python3.x版本,大家不必拘泥于具体的版本,不管安装的是3.0还是最新的3.7,都不影响接下来的操作。至于安装教程,这里就不过多赘述了,读者可自行搜索到详细的教程。

未安装requests库的需要大家安装一下requests库,可以用pip安装,在cmd中执行:

pip install requests

d833c895d143ad4b4e6b19cae7ca24aba50f06bb.jpeg?token=b3a83fd06de2f4bd68e3b725256bedf6&s=61D223645AE49F68566DF40F0000E0C3使用pip安装requests库

安装成功之后我们可以在Python自带的IDE中导入requests库测试一下是否可用:

77094b36acaf2edd9fe02588e9d87fed3801938e.jpeg?token=08f83e4d78e652163ff4c24f3c1d4106&s=57947F2A8DA45C0316F441DE0000C0B3可以正常导入

我们平时在浏览器中浏览网站时,实际上是浏览器向网站所在服务器发送HTTP请求下载HTML文档到本地,然后再经过浏览器的解释、渲染,形成了我们所见的精美的页面,而原始的HTML文档实际上是这样的:

eac4b74543a98226c7310a82ef4ac7054890ebeb.jpeg?token=e962aec48c97597569bc7ff192bafad8&s=D9DE8D1A17684109466458DA0200C0B1原始文档

而编写一个爬虫,首先最基本的便是向目标服务器发送HTTP请求下载HTML文档。那么,如何用Python下载到HTML文档呢?我们仍以上一节中的百度百科为例:

第一步:使用requests.get(url)向目标服务器发起GET请求以下载HTML文档

复制百科的网址填入

f7246b600c33874432c5941d34c7a7fdd62aa098.jpeg?token=e36b2f5fa559e7cc5d25b040a4f11657

回车后将会发起请求:结果如下

cc11728b4710b9128aa460b6a635820793452259.jpeg?token=c462e6b59f7c53c551256bf188a0fc13&s=FDE6AC1A190ECCCE10D495FC02005031requests库请求出错了

阅读报错信息,它告诉我们,是因为目标服务器做了过多的网页重定向,导致请求失败报错。这里我们暂时不谈何为重定向,只说如何解决当前的问题。而我猜测,是由于百度服务器的反爬策略。何为反爬呢?就是服务器检测到该请求不是来自正常的浏览器,而是来自机器人或其他,因此拒绝你的请求或作其他处理。而爬虫归根结底就是模拟浏览器发出请求,然后获取信息。

那么,如何解决当前的问题呢?在HTTP请求头中加一个“User-Agent”,如下:

headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'}

c83d70cf3bc79f3d238dd380dc69b315738b295a.jpeg?token=3b6bc095e69ee55ce2d995b7b1dffcd3&s=FFC6AC1A195E4CCC5A5494FC02005031未报错,请求成功

可以看到,这次没有再报错了。

这里,我们将requests.get(URL)的执行结果赋值给了response变量,而获取到的数据保存到了该结果的content属性中,我们可以通过输出content看一下获取到的HTML文档,执行如下代码:

print(response.content)

由于文档较大,执行该语句时,Python自带的IDE可能会卡死,所以我们就输出前200个字符看一下吧。

4e4a20a4462309f78d55a40a17c672f7d7cad638.jpeg?token=8bca39e2993249d1216c629fbb265178&s=C09AE83A995E57CC08C595DA000080B2输出结果

为了能够正常输出,我们使用专业的Python IDE测试一下:

18d8bc3eb13533fae994fbe9c11b831b40345b27.jpeg?token=d4e7c9d3875ecb1de58fc8a531cbf827&s=E0F2A36456F5A96E14CD850F0000E0C1代码和输出

d6ca7bcb0a46f21fb7753db691ec15640e33aeda.jpeg?token=1e9a6e3f655d5e4c016e169d4b7b7b2d&s=60F2A365DBA181724E55B40F000070C3输出结果

但是我们发现似乎获取到的HTML文档乱七八糟的,一个中文字符都没见到!别慌,这是因为还没有对文档进行解码,所以我们看不懂。

解码:print(response.content.decode('UTF8'))

f9dcd100baa1cd1112f13a5fd3dab6f8c2ce2d52.jpeg?token=566f7f3f3914b32e94c6182411ecf7dc&s=E8C2A3401EA8B76C4E45C40D0000A0C0输出解码后的结果

GOOD!可以看到我们已经能正常阅读HTML文档了!

本节就到这里啦,下节教大家如何从HTML文档中过滤筛选出我们需要的信息。

本节代码下载地址:github.com/TinyKoko/little-case/blob/master/从零开始的Python爬虫教程/chapter01.py

供大家下载测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值