http协议请求主要分为6种类型,各类型的主要作用如下:1)get请求:get请求会通过url网址传递信息,可以直接在url中写上要传递的信息,也可以由表单进行传递。如果使用表单进行传递,这表单中的信息会自动转为url地址中的数据,通过url地址传递。
2)post请求:可以向服务器提交数据,是一种比较主流也比较安全的数据传递方式,比如在登录时,经常使用post请求发送资源。
3)put请求:请求服务器存储一个资源,通常要指定存储的位置。
4)delete请求:请求服务器删除一个资源。
5)head请求:请求获取对应的http报头信息。
6)options请求:可以获得当前url所支持的请求类型。
这六种类型比较常用。不常用的还有
7)trace请求:主要用于测试或诊断。
8)connect请求
最常用的还是get请求跟post请求。
get请求:网址的格式是:“http://www.baidu.com/s?wd=关键词”
例子:要实现爬虫自动地在百度上查询关键词为hello的结果
代码如下:
import urllib.request
keyword="hello"
url="http://www.baidu.com/s?wd="+keyword
req=urllib.request.Request(url)
data=urllib.request.urlopen(req).read()
fhandle=open("E:/untitled1/.idea/4.html","wb")
print(fhandle.write(data))#写入对应数据data
fhandle.close()#关闭文件
但是如果当keyword是中文的时候,此段代码就会出现错误
那么应该如何修改呢?
代码如下:
import urllib.request
url="http://www.baidu.com/s?wd="
keyword="杨强"
key_code=urllib.request.quote(keyword)#quote编码 unquote解码
url_all=url+key_code
req=urllib.request.Request(url_all)
data=urllib.request.urlopen(req).read()
fhandle=open("E:/untitled1/.idea/5.html","wb")
print(fhandle.write(data))#写入对应数据data
fhandle.close()#关闭文件
通过以上实例,如果要使用get请求,思路如下:
1)构建对应的url地址,该url地址包含get请求的字段名和字段内容等信息,并且url地址满足get请求的格式,
即“http://网址?字段名1=字段内容1&字段名2=字段内容2”
2)以对于的url为参数,构造request对象
3)通过urlopen()打开构建的request对象
4)按需求进行后续的处理操作,比如读取网页的内容,将内容写入文件等。
post请求:进行注册登录等操作时都会遇到post请求
登录的时候我们需要用到cookie的知识。
测试使用的网址:http://www.iqianyue.com/mypost/
![]()
此时要实现爬虫,就需要用到post请求。实现的思路如下:
1)设置好url网址
2)构建表单数据,并使用urllib.parse.urlencode对数据进行编码处理
3)创建request对象,参数包括url地址和要传递的数据
4)使用add_header()添加头信息,模拟浏览器进行爬取
5)使用urllib.request.urlopen()打开对应的request对象,完成信息的传递
6)后续处理,比如读取网页内容,将内容写入文件等。
代码如下:import urllib.request
import urllib.parse
url="http://www.iqianyue.com/mypost/"
postdata=urllib.parse.urlencode({"name":"python@iqianyue.com","pass":"qwe123456"}).encode("utf-8")
req=urllib.request.Request(url,postdata)
req.add_header("User-Agent","User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
data=urllib.request.urlopen(req).read()
fhandle=open("E:/untitled1/.idea/5.html","wb")
print(fhandle.write(data))#写入对应数据data
fhandle.close()#关闭文件
---------来着《精通python网络爬虫》第四章的读书笔记