爬虫是一个获取网络资源的好方法,之前或多或少有些接触,但是没时间去实战,最近抽时间把python学习了一下,python的网络编程是出了名的方便,一些库也十分的方便。所以这次就尝试写了写。
爬虫本质上就是模拟浏览器去获取网站能够触及到的资源,这里就涉及到三个部分:
这三个部分构成了爬虫的主要技术基础,任何一个网页都脱离不了三个元素,html + css + javascript。html是显示内容的控制,不同的标签组成一个dom对象,各种编程语言也是通过dom解析去获取标签的内容。css是控制显示效果的文件,这个了解即可,javascript是脚本,控制页面上的简单交互,例如点击某个按钮就发送http请求。爬虫的重点在于解析html。html这种就是标签文件,没什么难的,但是就是要花时间去学习的,这里有我认为还不错的教程 html教程
网络http协议,也就是最广泛的协议,浏览器就是一个http的客户端,可以发送http请求,服务器处理完请求后返回html页面,浏览器能够解析html并加载css与javascript,可以通过抓包工具,谷歌浏览器内置抓包工具即可满足大部分的要求.
Network可以看到每次网络请求的详细信息。可以点开某个具体的信息。
然后就看到了http请求的主要组成部分,主要包括以下几个部分:
request basic information 请求基本信息 :
Request URL:http://www.zhipin.com/
Request Method:GET
Status Code:200 OK
Remote Address:60.205.129.48:80
Referrer Policy:no-referrer-when-downgrade
Response Headers 下面是响应头信息
Cache-Control:no-cache
Connection:keep-alive
Content-Encoding:gzip
Content-Language:zh-CN
Content-Type:text/html;charset=UTF-8
Date:Wed, 27 Dec 2017 14:11:10 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
Request Headers 下面是请求头基本信息
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__jsluid=305fc5ddb82198863097faff98191fd5; __c=1514292510; lastCity=101210100; sid=sem_pz_bdpc_index; __g=sem_pz_bdpc_index; toUrl=https%3A%2F%2Fwww.zhipin.com%2Fjob_detail%2F1416443478.html%3Fka%3Djob_list_1_blank; __l=r=http%3A%2F%2Fwww.zhipin.com%2F&l=%2Fjob_detail%2F%3Fquery%3D%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%26scity%3D101210100%26source%3D2&g=%2F%3Fsid%3Dsem_pz_bdpc_index; __a=67060313.1514292510..1514292510.4.1.4.2; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1514292691,1514297188; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1514375170
Host:www.zhipin.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
headers : 请求头,就是标记当前客户端的一些信息,例如浏览器的内核,能够接受的编码规则和语言等等信息,还有Cookie信息,这些很多并不是爬虫必须的,可以根据实际页面的访问查看对应的请求头,根据需要去设置,有个的cookie可能包含服务器的session标志,这样可能会被反爬虫策略给屏蔽掉,因此很多时候如果被封,第一个考虑就是清理cookies重新获取即可继续访问页面,当然反爬虫的策略是很多的,还包括ip的禁止,访问频率的控制等等。
请求参数:请求的方式由很多种,一般使用Get和Post两种方式,这个可以看网上的具体信息,Get是在url后面添加参数,Post是把参数放在请求体里
返回信息可能是json也可能是个页面,这个会由浏览器解析就成了我们所看到的页面,当然我们在代码里这个解析过程也是由库来完成。
我们只要学会了http协议的基础知识就可以开始写爬虫了,当然并不是说对于http的理解就到此结束,而是我们先写起来代码,首先对http有个大概的认识,后面由必要或则是会接触到http更高级的特性的时候再去深入学习,这对于深入认识爬虫是非常有意义的。关于http协议的教程很多http协议简介
上面一直在提浏览器获取服务器资源,我们可以用其他工具去模拟浏览器,例如postman :
可以设置http请求并能看到访问,我们在写爬虫的时候就可以把要请求的链接放到这里调试,还是很方便的。
最开始接触python爬虫是用的urllib库,并不是特别的方便,scarpy框架我看了对python3支持的并不是特别好,所以选择了requests 和 beautifulSoup,还是非常方便的,接下来我们就使用这两个库来完成http请求吧:
result = requests.get(url = 'http://www.baidu.com' , params = query_params, headers = headers, proxies = None)
就是这么简单,然后解析某个标签:
## 发送请求
result = requests.get('http://www.baidu.com')
## 获取dom对象
soup = BeautifulSoup(result.text.encode(result.encoding).decode('utf-8'), 'html.parser')
## 获取title标签
print(soup.title.text)
显示结果 ‘百度一下,你就知道’
就是这么简单。
发送请求 -> 解析html -> 后面对于数据的清洗和存储可以以各种形式进行,json文件,MySQL , redis , MongoDB。给数据分析做基础。