python爬虫基本原理及入门

爬虫:请求目标网站并获得数据的程序

爬虫的基本步骤:

python爬虫基本原理及入门

使用python自带的urllib库请求百度:

import urllib.request

response = urllib.request.urlopen('http://www.baidu.com')
print(type(response))

#打印结果
<class 'http.client.HTTPResponse'>

可以从类型上看出来,response是一个HTTP响应

 

 

请求:

python爬虫基本原理及入门

请求的方式以GET和POST最为常用,一般的GET方法将请求参数放在URL中。如在百度中搜索一个关键词,这就形成了以GET在URL中更改参数的方法。

而POST将参数放在表单内进行请求。如请求登陆百度,需要向百度服务器发送你的账号密码这些东西。

 

请求头是一个很重要的请求内容,在一般的浏览器请求中,网站会返回一个你的浏览器信息,如果在代码不伪装程浏览器的情况下,你的IP地址会迅速的被网站封掉,每个爬虫库的伪装方式都是不同的,如urllib库

import urllib.request

heads = {}
    heads['User-Agent'] = 'Mozilla/5.0 ' \
                          '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \
                          '(KHTML, like Gecko) Version/5.1 Safari/534.50'


req = urllib.request.Request(url=url, data=data, method='POST', headers=heads)

response = urllib.request.urlopen(req)
print(response.getheaders()) #getheaders()方法将会返回给你一些请求信息,如时间,服务器信息等,包含user-agent

 

 响应:

python爬虫基本原理及入门

响应就是请求之后浏览器所呈现的东西,最重要的就是响应体,包含了网页的源文件

在代码的情况下查看响应状态:

import urllib.request

response = urllib.requset.urlopen('http://www.baidu.com')

print(response.getcode())

#返回200表示成功

 

解析方式:

当想要获得网页中某些元素应该怎样去解析?

python爬虫基本原理及入门

解析的方式多种多样,目前还只是使用正则来做解析,听说xpath是最简单解析方式,不过我觉得每个库还是要使用一下试试的,看看哪个更适合你。

为什么有的网页请求源码和在浏览器中查看到的不一样?

这是因为动态网站使用了JS渲染,元素都是经过js动态加载出来的,所以想要获得源码还要去模拟浏览器的行为,像selenium驱动browser,PhantomJS等工具。