一、URL的编码与解码  

  在python2中包含的urllib和urllib2,都是接受URL请求相关的模块。但是在python3中,却没有urllib2。实际上urllib2的功能在python3中可以用urllib来实现。

  通常编码工作,我们使用urllib.parse.urlencode()函数,帮我们将key:value(类似于python的字典)这样的键值对转换成"key=value"这样的字符串,解码工作则可以用unquote()函数来实现。

  一般的HTTP请求提交数据,需要编码成URL编码格式,然后作为URL的一部分,或者作为参数传到Request对象中。

二、写一个简单的爬虫程序

  首先我们在cmder中用vim新建一个python文件,我们得目标是下载上海链家的二手房页面。

  可以在浏览器中打开网站分析一下URL

  第一页网址是:https://sh.lianjia.com/ershoufang/

  第二页网址是:https://sh.lianjia.com/ershoufang/pg2/

  第三页网址是:https://sh.lianjia.com/ershoufang/pg3/

  ............

  当我们在https://sh.lianjia.com/ershoufang/后面加上"pg1/"时,发现也能得到第一页。可以根据这个规律来写这个爬虫。

 from urllib import request

 def HTMLspider(url,startPage,endPage):

     #作用:负责处理URL,分配每个URL去发送请求

     for page in range(startPage,endPage+1):
filename="第" + str(page) + "页.html" #组合为完整的url
fullurl=url + str(page) #调用loadPage()发送请求,获取HTML页面
html=loadPage(fullurl,filename) #将获取到的HTML页面写入本地磁盘文件
writePage(html,filename) def loadPage(fullurl,filename): response=request.urlopen(fullurl)
return response.read() def writePage(html,filename):
"""
将服务器的响应文件保存到本地磁盘
其中filename为本地磁盘文件名
"""
print("正在存储"+filename)
with open(filename,'wb') as f:
f.write(html) print("--"*30) if __name__=="__main__":
#输入需要下载的起始页和终止页,注意转换成int类型
startPage=int(input("请输入起始页:"))
endPage=int(input("请输入终止页:")) url="https://sh.lianjia.com/ershoufang/" HTMLspider(url,startPage,endPage) print("下载完成!")

  当然,这只是一个非常简单的下载页面的小爬虫。但是我们可以看到爬虫工作的基本过程。

三、关于GET请求和POST方法

  GET请求一般用于我们向服务器获取数据,假如我们用百度搜索一个关键词,我们可以看到在请求部分,http://www.baidu.com/?之后出现一个长长的字符串,这就是包含了我们要查询的关键词,于是我们可以用默认的GET方式来发送请求。GET方式是直接以链接的形式访问的,链接中包含了所有参数。

  而在发送POST请求时,需要特别注意headers的一些属性:content-length(表单数据长度),X-Requested-With:XMLHttpRequest(Ajax异步请求)等等。POST不会在网址上显示所有参数,服务器端用Requeste.Form获取提交的数据。

  “对于一个爬虫工程师,我们必须关注爬虫的来源”

  

python爬虫(2)——编写一个爬虫的更多相关文章

  1. python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。

    python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明. 重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则 ...

  2. python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数。如果其中没有奇数,就输出一个消息进行说明。

    python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数.如果其中没有奇数,就输出一个消息进行说明. 笔者是只使用条件语句实行的.(if-else) 重难点:先把三个数进行由小到大的 ...

  3. python练习:编写一个函数isIn,接受两个字符串作为参数,如果一个字符串是另一个字符串的一部分,返回True,否则返回False。

    python练习:编写一个函数isIn,接受两个字符串作为参数,如果一个字符串是另一个字符串的一部分,返回True,否则返回False. 重难点:定义函数的方法.使用str类型的find()函数,可以 ...

  4. python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输入一条消息进行说明。

    python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数.如果不存在这样一对整数,则输入一条消息 ...

  5. Python网络编程——编写一个简单的回显客户端/服务器应用

    今天将python中socket模块的基本API学习完后,照着书上的实例编写一个套接字服务器和客户端.采用python3.5版本,在注释中会标明python2和python3的不同之处. 1.代码 ( ...

  6. 从0开始的Python学习013编写一个Python脚本

    通过之前的学习我们已经了解了Python的很多基础运用了,现在我们尝试着做一个有使用价值的小脚本. 问题 需求: 我想要一个可以给我备份重要文件的程序. 需求分析: 首先文件是有存储路径,文件的路径和 ...

  7. python练习笔记——编写一个装饰器,模拟登录的简单验证

    编写一个装饰器,模拟登录的简单验证(至验证用户名和密码是否正确) 如果用户名为 root 密码为 123则正确,否则不正确.如果验证不通过则不执行被修饰函数 #编写一个装饰器,模拟登录的简单验证 #只 ...

  8. Python爬虫之编写一个可复用的下载模块

    看用python写网络爬虫第一课之编写可复用的下载模块的视频,发现和<用Python写网络爬虫>一书很像,写了点笔记: #-*-coding:utf-8-*- import urllib2 ...

  9. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

随机推荐

  1. in运算符(javascript)

    in的用法,如x in y: 1.如果第二个运算数为对象,则in运算符用来检测第一个运算数是否是第二个运算数的属性名.是,返回true,否则返回false. 例: var obj = {x:1,y:2 ...

  2. 使用bat将优盘中的dig加到系统环境变量

    第一次使用bat批处理,记录下,方便查阅. @echo off::当前盘符set curPath=%cd%set digPath ="%curPath%tool\dig"set P ...

  3. OpenCV3.0 HDR(高动态范围)示例代码以及用法

    OpenCV 3.0以及以后版本集成了HDR算法,样例代码的路径为: .\sources\samples\cpp\tutorial_code\photo\hdr_imaging.cpp. 实现算法的参 ...

  4. 【开发技术】java异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...

  5. 浅析RPC概念框架

    本文原封不动的来至于csdn MindWind,原文请见 RPC:RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一 ...

  6. mybatis_helloWorld_sequence图(3)

    摘录自:http://blog.csdn.net/y172158950/article/details/17006127 1. 依据resource获取Reader的sequence图 String  ...

  7. Schema与数据类型优化

    良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询数据来设计schema,这往往需要权衡各种因素. MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要. 更小的通 ...

  8. PID算法笔记2

    总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...

  9. Python 字符串大小写操作

    #coding=utf-8 #python中字符串的操作 # 字符串的大小写 s='hello_wOrld_oF_you' upper_str = s.upper() print('全部大写: ',u ...

  10. linkin大话数据结构--List

    List:Collection子接口 List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元 ...