IDE:PyCharm 、 Visual Studio
编辑器:Vim 、Sublime Text等
抓包工具:fiddler
python需要导入各种各样强大的库
教程基于python2.7版本的
网络爬虫抓取过程可以理解为模拟浏览器操作的过程
。
浏览器的主要功能是向服务器发出请求,在浏览器窗口中展示您选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。请求和响应
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。
为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
Cookie:通过在 客户端 记录的信息确定用户的身份。
Session:通过在 服务器端 记录的信息确定用户的身份。
urlopen:打开网页,获取页面
urllib2.Request:能增加很多参数
也可以通过调用Request.add_header() 添加/修改一个特定的header,用来随机增加代理user agent
常用的User-Agent列表
urllib 仅可以接受URL,不能创建 设置了headers 的Request 类实例;
但是 urllib 提供
urlencode
方法用来GET查询字符串的产生,而 urllib2 则没有。(这是 urllib 和 urllib2 经常一起使用的主要原因)编码工作使用urllib的
urlencode()
函数,帮我们将key:value
这样的键值对转换成"key=value"
这样的字符串,解码工作可以使用urllib的unquote()
函数。(注意,不是urllib2.urlencode() )
所以,结合起来用,取长补短
通过urllib.urlencode()方法,将字典键值对按URL编码转换,从而能被web服务器接受。Request加参数,这个方法给是url加参数
get方式贴吧实战
注意:
request = urllib2.Request(url, headers = headers) #2headers
python with open as f写中文乱码 谁编码有问题就对谁编码
Python open() 函数
with open(unicode(filename), 'w') as f: #filename=哈哈.index
print filename
f.write(html)
print '-' * 35
main函数》爬取函数》页面保存
Request请求对象的里有data参数,它就是用在POST里的,我们要传送的数据就是这个参数data,data是一个字典,里面要匹配键值对。
json.dumps()和json.loads()
python字符串前面加u,r,b的含义
总结:post参数在urllib2.Request(url,data = data, headers = headers)里面,get参数在url里面
CA的作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改,以及对证书和密钥进行管理。我的理解是类似网络的权威中介吧!
基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能:
Handler处理器
来创建特定功能的处理器对象;urllib2.build_opener()
方法使用这些处理器对象,创建自定义opener对象;open()
方法发送请求。# 调用自定义opener对象的open()方法,发送request请求
response = opener.open(request)
这种方式发送请求得到的结果,和使用
urllib2.urlopen()
发送HTTP/HTTPS请求得到的结果是一样的。如果在 HTTPHandler()增加 debuglevel=1
参数,还会将 Debug Log 打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。
就是能看到请求数据,不用抓包,哈啊哈,强
免费代理ip寿命好短,卧槽
来源路劲
代理服务器的来源有很多,我这里列举一些,希望大家补充一下自己知道的
- 学校实验室学生搭建的代理服务器自己用的,但是学生嘛,经验不足,没有做好权限控制,于是就多出了一台公共代理服务器了。
- 政府、机关、企业,和上面原因类似,自己搭建自用的代理服务器,没做好权限控制。
- 某些机构的蜜罐,用来盗取信息
- 某些机构的统计需求。信息采集。
- 实验性质的流量分析,开台公共代理获取一些流量作实验用途
- 一些小众软件的设计失误开出来的开放代理端口。
HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括:
Cookie名字(Name)
Cookie的值(Value)
Cookie的过期时间(Expires/Max-Age)
Cookie作用路径(Path)
Cookie由变量名和值组成,根据 Netscape公司的规定,Cookie格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
把浏览器请求学到headers即可,不复杂,尽可能伪装浏览器
使用response.text 时,Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。
使用response.content 时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
response = requests.post("http://www.baidu.com/", data = data)
和原来urllib2比起来少了转码,方便,直接自己转码
总结:前面都是打基础,第10个最有用,哈哈哈