python爬⾍⼊门教程(⼆):开始⼀个简单的爬⾍
上⼀篇讲了开始爬⾍前的准备⼯作。当我们完成开发环境的安装、IDE的配置之后,就可以开始开发爬⾍了。 这⼀篇,我们开始写⼀个超级简单的爬⾍。
1.爬⾍的过程分析
当⼈类去访问⼀个⽹页时,是如何进⾏的?
①打开浏览器,输⼊要访问的⽹址,发起请求。
②等待服务器返回数据,通过浏览器加载⽹页。
③从⽹页中到⾃⼰需要的数据(⽂本、图⽚、⽂件等等)。
④保存⾃⼰需要的数据。
对于爬⾍,也是类似的。它模仿⼈类请求⽹页的过程,但是⼜稍有不同。
⾸先,对应于上⾯的①和②步骤,我们要利⽤python实现请求⼀个⽹页的功能。
其次,对应于上⾯的③步骤,我们要利⽤python实现解析请求到的⽹页的功能。
最后,对于上⾯的④步骤,我们要利⽤python实现保存数据的功能。
因为是讲⼀个简单的爬⾍嘛,所以⼀些其他的复杂操作这⾥就不说了。下⾯,针对上⾯⼏个功能,逐⼀进⾏分析。
2.如何⽤python请求⼀个⽹页
作为⼀门拥有丰富类库的编程语⾔,利⽤python请求⽹页完全不在话下。这⾥推荐⼀个⾮常好⽤的第三⽅类库requests。
2.1 requests
2.1.1 安装⽅式
打开终端或者cmd,在⾥⾯输⼊以下指令并回车
pip3 install requests
⼀般不会出什么问题,如果下载太慢,是因为pip使⽤的源服务器在国外,可以设置pip使⽤国内镜像源,设置⽅法可以参考PyPI使⽤国内源。
2.1.2 测试是否安装成功
在命令⾏中输⼊python,敲击回车,进⼊python交互环境。在⾥⾯输⼊以下代码并回车:
import requests
如果不报错,就安装成功了,如下图:
2.2 使⽤requests请求⽹页
打开pycharm,创建⼀个项⽬,嗯,随便取个名字吧。
创建成功后,再创建⼀个py⽂件,⽤来写代码。嗯,再随便取个名字= =教程(⼆)的2.2,那就spider_2_2_2吧。
在⾥⾯输⼊以下代码:
b的ascii码怎么算#coding=utf-8
import requests
3.如何⽤python解析⽹页源码
python入门教程(非常详细)书⽹页源码我们拿到了,接下来就是要解析了。python解析⽹页源码有很多种⽅法,⽐如BeautifulSoup、正则、pyquery、xpath等。这⾥我简单介绍⼀下。
3.1 ⽹页源码解析器
3.1.1 BeautifulSoup
这是我⽐较推荐的⼀款解析器,简单易⽤,容易理解。
但是使⽤bs4还需要安装另⼀个类库lxml,⽤来代替bs4默认的解析器。之所以这样做,是因为默认的那个实在太慢了,换⽤了lxml 后,可以⼤幅度提升解析速度。
3.1.1.1 安装
命令⾏中输⼊以下指令并回车,安s4:
pip3 install beautifulsoup4
使⽤pip直接安装lxml会出错,所以要⽤些特别的⽅法。Windows⽤户的话,去百度搜⼀下lxml在Windows环境下的安装⽅法,⽹上有很多,我就不多说了(主要是嫌⿇烦= =)。Ubuntu⽤户就很⽅便了,在终端⾥⾯输⼊以下指令并回车就⾏了:
apt-get install python-lxml
3.1.1.2 测试是否安装成功
进⼊python交互环境,引⽤bs4和lxml类库,不报错即安装成功。
import bs4
import lxml
3.1.2 正则
这个不⽤安装,标准库⾥带的就有。
正则的优点:①速度快 ②能够提取有些解析器提取不到的数据
正则的缺点:①不够直观,很难从⾯向对象的⾓度来考虑数据的提取 ②你得会写正则表达式
教程就不放了,善⽤百度嘛。正则⼀般⽤来满⾜特殊需求、以及提取其他解析器提取不到的数据,正常情况下我会⽤bs4,bs4⽆法满⾜就⽤正则。union怎么用
当然了,如果你喜欢,全部⽤正则解析也是没问题的,你喜欢就好= =。ecologist
3.1.3 pyquery
这个解析器的语法和jQuery很相似,所以写过jQuery的同学⽤起来可能⽐较容易上⼿。国内有个dalao写的爬⾍框架pyspider⽤的就是这个解析器。
如果没⽤过jQuery,那就在bs4和pyquery两个⾥⾯选⼀个学吧,⼀般情况下会⼀个就够了。
3.1.3.1 安装
pip3 install pyquery
3.1.3.2 测试
import pyquery
1男子煮羊肉爆炸高压锅击穿屋顶
3.2 使⽤BeautifulSoup+lxml解析⽹页源码
接着上⾯的代码来,我们使⽤BeautifulSoup+lxml解析请求到的⽹页源码。
从百度的⾸页,可以通过点击跳转到很多其他页⾯,⽐如说下⾯圈起来的,点击都会跳转到新的页⾯:
现在,我们想要⽤python获得从百度能够跳转到的页⾯的链接,该怎么做?
代码很简单,接着上⾯的写:
#coding=utf-8
import requests
from bs4 import BeautifulSoup
append在java中什么意思('www.baidu') #请求百度⾸页
print(resp) #打印请求结果的状态码
t) #打印请求到的⽹页源码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论