静态页面抓取
在网站设计中,纯粹HTML格式的网页通常被称为静态网页,早期的网站一般都是由静态网页制作的。在网络爬虫中,静态网页的数据比较容易获取,因为所有数据都呈现在网页的HTML代码中。相对而言,使用AJAX动态加载网页的数据不一定会出现在HTML代码中,这就给爬虫增加了困难。在静态网页抓取中,有一个强大的Requests库能够让你轻易地发送HTTP请求,这个库功能完善,而且操作非常简单。
Requests库能通过pip安装
pip install requests
1、获取响应消息
import requests
r = requests.get('http://www.santostang.com/')
print("文本编码",r.encoding)
print("响应状态码",r.status_code)
print("字符串方式的响应体",r.text)

2、定制 Requests
使用Requests库获取了网页数据,但是有些网页需要对Requests的参数进行设置才能获取需要的数据,这包括传递URL参数、定制请求头、发送POST请求、设置超时等。
2.1 传递URL参数
import requests
key_dirct = {'key1':'valuel1','key2':'valuel2'}
r = requests.get('http://httpbin.org/get',params=key_dirct)
print("URL已经正确编码:",r.url)
print("字符串方式的响应体: \n",r.text )

?+键值对
response1 = requests.get("http://httpbin.org/get?key1=value1")
print(response1.url)
#http://httpbin.org/get?key1=value1
requests提供了params关键字参数来传递参数
parameter = {
"key1":"value1",
"key2":"value2"
}
response2 = requests.get("http://httpbin.org/get",params = parameter)
print(response2.url)
# http://httpbin.org/get?key1=value1&key2=value2
还可以将一个列表作为值传入
parameter = {
"key1":"value1",
"key2":["value21","value22"]
}
response3 = requests.get("http://httpbin.org/get",params = parameter)
print(response3.url)
# http://httpbin.org/get?key1=value1&key2=value21&key2=value22
注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。
parameter = {
"key1":"value",
"key2":None
}
response4 = requests.get("http://httpbin.org/get",params = parameter)
print(response4.url) #http://httpbin.org/get?key1=value
2.2 定制请求头
请求头Headers提供了关于请求、响应或其他发送实体的信息。对于爬虫而言,请求头十分重要,如果没有指定请求头或请求的请求头和实际网页不一致,就可能无法返回正确的结果。Requests并不会基于定制的请求头Headers的具体情况改变自己的行为,只是在最后的请求中,所有的请求头信息都会被传递进去。
import requests
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0',
'Host':'www.santostang.com'}
r = requests.get('http://www.santostang.com',headers=headers)
print("响应状态码",r.status_code)

2.3 发送POST请求
import requests
key_dirct = {'key1':'valuel1','key2':'valuel2'}
r = requests.post('http://httpbin.org/post',data=key_dirct)
print(r.text )

2.4 超时
有时爬虫会遇到服务器长时间不返回,这时爬虫程序就会一直等待,造成爬虫程序没有顺利地执行。因此,可以用Requests在timeout参数设定的秒数结束之后停止等待响应。意思就是,如果服务器在timeout秒内没有应答,就返回异常。
import requests
link = 'http://www.santostang.com/'
r = requests.get(link, timeout= 0.01)
