爬虫:请求目标网站并获得数据的程序
爬虫的基本步骤:
使用python自带的urllib库请求百度:
import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
print(type(response))
#打印结果
<class 'http.client.HTTPResponse'>
可以从类型上看出来,response是一个HTTP响应
请求:
请求的方式以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
响应:
响应就是请求之后浏览器所呈现的东西,最重要的就是响应体,包含了网页的源文件
在代码的情况下查看响应状态:
import urllib.request
response = urllib.requset.urlopen('http://www.baidu.com')
print(response.getcode())
#返回200表示成功
解析方式:
当想要获得网页中某些元素应该怎样去解析?
解析的方式多种多样,目前还只是使用正则来做解析,听说xpath是最简单解析方式,不过我觉得每个库还是要使用一下试试的,看看哪个更适合你。
为什么有的网页请求源码和在浏览器中查看到的不一样?
这是因为动态网站使用了JS渲染,元素都是经过js动态加载出来的,所以想要获得源码还要去模拟浏览器的行为,像selenium驱动browser,PhantomJS等工具。