HTTP请求与响应
http几个字从小见到大,但事实上相当长一段时间不知道这几个字母代表什么,后面得知这个叫超文本传输协议,具体怎么运作的不懂,大概就是用户用浏览器输入相应的网址后(请求),服务器会反馈给你网址里的内容(响应),返回来的东西是网站源码,即html,再靠一些翻译的工作把html变成各种网站美丽的样子。现在ctrl+u出来的即是你当前网站的html源码。
访问网址的方式一般有两种,即get和post,前者是获得数据,后者是创建数据,简单理解为在csdn看文章和在csdn创了个号。由于爬虫几乎是为了获取数据,所以一般用get。当然获取数据还有其他方法,根据需要自行改变。
完整的http请求有以下要素:
请求行:
get(请求方式) /xx/xx(请求路径)?xx&xx(?+查询参数,如第几页评论,&分割) HTTP/1.1(协议版本)
请求头:
Host:http://www.xx.com(完整的url)
User-agent:xx{表面用户是用浏览器或者命令行访问的,如:
curl/7.77.0
python-requests/2.25.1
Mozilla/5.0(Macintosh; Intel Mac OS X10_15_7)AppleWebKit/537.36(KHTML,like Gecko)Chome/108.0.0.0 Safari/53736}
Accept:x(表面用户接受什么类型的数据,常见的有:
all:*/*、HTML:text/html、json:application/json、如果两个都需要那么用“,"分隔
请求体:
{username:xx
e-mail:xx}
post有请求体,get一般空的
完整的http响应有以下要素:
状态行:
HTTP/1.1 200 OK (协议版本,状态码,状态信息)
响应头:
Date:xx(响应日期)
Content-type:text/html;charest=utf-8(返回数据类型,编码格式)
主体信息:
<!DOCTYPE html>
<主题>
</html>
关于各种状态码:https://developer.mozilla.org/zh-CN/docs/Web
一个简单的爬虫小程序
在python终端输入:
pip install requests
import requests
a=requests.get('https://www.douban.com/')
print(a)
会得到
<Response [418]>
Process finished with exit code 0
根据上面的网址一查,418表示豆瓣不想冲咖啡因为他是一个茶壶(真冷)
这与请求码中的user-agent有关,由于你正在用命令行访问,有些服务器就为了防爬,拒绝给你访问,那么如何绕过这个防线呢?很简单,即将你伪装成用浏览器访问的样子
如何查看浏览器的user-agent?
右键任意网页——检查——network——不要关刷新一下——点开任意一个响应的元素——找到你的user-agent
在python中输入:
import requests
headers={
'User-Agent': '你的user-agent'
}
a=requests.get('https://www.douban.com/',headers=headers)
print(a)
这样就可以得到200的正常访问了,把print(a)改成print(a.text)即能获得源码