python爬虫(1):requests
requests入门
request是一种将http协议封装的非常好的包,非常适合各种网络编程
requests中文文档
http协议
所谓HTTP协议,中文名是超文本传输协议。这是一种可靠的可以把各种各样格式的文件在互联网上传输的协议。事实上HTTP协议总共有七步,这次我们先讲一下主要的过程。HTTP协议的传输主要通过HTTP报文实现的:
1. 客户端(比如浏览器) :发送请求报文到服务器
2. 服务器:接收请求报文并处理
3. 服务器:发送响应报文给客户端
4. 客户端:处理接收到的内容。
网页请求方法
爬虫一般请求的网页方法有get和post方法,post方法需要传递参数
get与post方法的区别
- get方法通常用于访问
- post一般用于访问需验证信息和登陆的网页,方便传参数
- post比get方法更安全
### get一般用法
url = 'https://douban.zhihu.com'
#requests:
import requests
response=requests.get(url)
html=response.content
#session会话方式
session=requests.session()
response=session.get(url)
html=response.content
#urllib2:
#python2环境下运行
import urllib2
response = urllib2.urlopen(url)
content = response.read()
#Httplib2:
import httplib2
http = httplib2.Http()
response_headers, content = http.request(url, 'GET')
## post用法
import requests
### post参数
post_data={
'stock':'000001',
'searchkey':'',
'category':'category_ndbg_szsh;',
'pageNum':'1',
'pageSize':'',
'column':'szse_main',
'tabName':'fulltext',
'sortName':'',
'sortType':'',
'limit':'',
'seDate':''
}
r2 = requests.post('http://www.cninfo.com ,data=post_data)
requests返回的响应报文的状态
- 2开头的是正常
- 3开头的是重定向(重定向到另外一个URL)
- 4开头的是客户端异常,
- 5开头的是服务器异常。
响应内容
resp.text返回的是Unicode型的数据。
resp.content返回的是bytes型的数据.
resp.json()返回的是json格式数据.
也就是说,如果你想取文本,可以通过r.text。
如果想取图片,文件,则可以通过r.content。
小结:HTTP协议是一种在互联网上传输文件的协议,主要过程是客户端发送请求报文、服务器接收并发送响应报文、客户端接收;访问某个服务器资源需要知道它的URL;主要的HTTP请求方法有get(客户端不发数据)和post(客户端发数据)
import requests
r1 = requests.get('http://cn.bing.com/search?q=requests') #get方法
html1=r1.text #返回文本
html2=r1.content #文件全文
html3=r1.json() #返回JSON格式数据
#把请求回来的json数据转成Python字典并返回
r1.status_code #状态码,正常是200
r1.encoding #文件编码,比如'utf-8'
json介绍
json
伪造请求
HTTP headers讲解
伪装成浏览器
有些网页的服务器会验证请求的发送者是否是真实的浏览器客户端,这时候需要伪装成浏览器访问。一般用headers头伪装
headers=[{'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'},\
{'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},\
{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'}]
url='http//www.baidu.com'
html=requests.get(url,headers=headers)