爬虫,即网络爬虫,像是在网络上爬行的一直蜘蛛,在互联网这张大网上不同的节点爬,如果它遇到符合条件的资源,它就会把内容抓取下来。
换句话说,爬虫程序我们可以理解为,如何控制程序定位到相应的资源,并把它抓取下来。
就如我们所知道的那样,爬虫通常是网页内容,因而这个过程中爬虫是如何获取网页信息,是通过URL(统一资源定位符)来定位对象。
然后通过解析相应资源信息,并最终获取到我们想要的图片、文字等信息。
首先,我们要了解URL通常包括什么内容。
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
- 传送协议。(例如:http、https、ftp等)
- 服务器。(通常为域名,有时为IP地址)
- 端口号。(以数字方式表示,若为HTTP的预设值“:80”可省略)
- 路径。(以“/”字元区别路径中的每一个目录名称)
- 查询。(GET模式的表单参数,以“?”字元为起点,每个参数以“&”隔开,再以“=”分开参数名称与资料,通常以UTF8的URL编码,避开字元冲突的问题)
接下来就是爬虫中的主体也是最基本的内容,即定位资源并爬取内容。
在python中,需要用到一个模块urllib
下面来看个具体的例子:
import urllib.request #载入模块
respone=urllib.request.urlopen('http://www.baidu.com') #定位打开目标网页
html=respone.read(1000) #读取爬虫获取网页内容的前1000个字符
print (html) #打印抓取内容
下面是打印的内容
b'<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="xe7x99xbexe5xbaxa6xe6x90x9cxe7xb4xa2" /><link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg"><link rel="dns-prefetch" href="//s1.bdstatic.com"/><link rel="dns-prefetch" href="//t1.baidu.com"/><link rel="dns-prefetch" href="//t2.baidu.com"/><link rel="dns-prefetch" href="//t3.baidu.com"/><link rel="dns-prefetch" href="//t10.baidu.com"/><link rel="dns-prefetch" href="//t11.baidu.com"/><link rel="dns-prefetch" href="//t12.baidu.com"/><link rel="dns-prefetch" href="//b1.bdstatic.com"/><title>xe7x99xbexe5xbaxa6xe4xb8x80xe4xb8x8bxefxbcx8cxe4xbdxa0xe5xb0xb1xe7x9fxa5xe9x81x93</title> <style index="index" id="css_index">html,body{height:100%}html{ove'
这里虽然实现了爬虫的功能,但这些都是解码后的网页内容,通常情况下我们需要进一步对获取的内容进行处理才能得到我们我需要的内容。
这个放在后面再写。
现在我们来看下,上面用到的urlopen()以及read()这个两个函数
urlopen(url,data,timeout)
第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT
第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。
read(size)
只有一个参数size,表示读取的字节数。
借由以上的两个方法,即可完成一个最基本的爬虫程序了。