python爬虫基础知识
来源:互联网 发布:网易股票分时数据 编辑:程序博客网 时间:2024/05/01 09:41
爬虫爬取策略
1.广度优先:在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。
2.最佳优先:只访问经过网页分析算法预测为“有用”的网页
3.深度优先:可能会陷入trapped问题
DOM(Document Object Model)
中文名文档主题模型,DOM将HTML文档表达为树结构,定义了访问和操作HTML文档的标准
Cookie
由服务器端生成,发送给User-Agent(一般为浏览器),之后浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次访问同一网站时就发送该Cookie给服务器(当然,前提是浏览器设置为启用Cookie)
Urllib2库的一些常用函数
urlopen(url,data,timeout)
--第一个参数url为URL
--第二个参数data是访问URL时要传送的数据
--第三个参数timeout是设置超时时间,也就是设置一个阈值,当超过该阈值时,不继续访问该网址
read()
--可以返回获取到的网页内容
下面我们看个例子:
import urllib2response = urllib2.urlopen("http://www.baidu.com")print response.read()
也可以换种写法:
import urllib2request = urllib2.Request("http://www.baidu.com")response = urllib2.urlopen(request)print response.read()
这里的urlopen方法的参数可以传入一个request请求(其实就是一个Request类的实例),两种写法都可以
HTTP定义了与服务器交互的不同方式
-- GET 【获取/查询】: 直接以链接形式访问,链接中包括了所有的参数
-- POST【更新】:把提交的数据放置在是HTTP包的包体中
下面看个POST的例子:
import urllibimport urllib2values = {"username": "zhangsan@qq.com","password": "xxx"}data = urllib.urlencode(values)url = "https://passport.csdn.net/account/login?xxx = yyyy"request = urllib2.Request(url,data)response = urllib2.urlopen(request)print response.read()
Headers设置
-- User-Agent:部分服务器或Proxy会通过该值来判断是否是浏览器发出的请求
-- Content-Type:在使用REST接口时,服务器会检查该值,用来确定HTTP Body中的内容该怎么解析
-- application/xml:在XML RPC,如RESTful/SOAP调用时使用
-- application/x-www.form-urlencoded:浏览器提交Web表单时使用
Urllib与Urllib2之间的区别
-- urllib2可以接受一个Request类的实例来设置URL请求的headers, urllib只可以接受URL,这样的话,就不可以伪装自己的User Agent字符串等
-- urllib提供urlencode方法来GET查询字符串的产生,而urllib2没有,这就是为什么urllib经常和urllib2一起使用的原因(urlencode方法,可以把key-value这样的键值对转化成我们想要的格式,返回的是
a=1&b=2这样的字符串
下面看一个例子:
import urllib import urllib2 url = 'http://www.zhihu.com/login' user_agent = 'Mozila/5.0(compatible;MSIE 5.5;WindowsNT)' values = {'username' :'Lee','password':'XXXX'} headers = {'User-Agent':user-agent} data = urllib.rulencode(values) request = urllib2.Request(url,data,headers) response = urllib2.urlopen(request) page = response.read()
requests库
-- requests库用起来更加便捷,下面看一个例子:
>>> import requests>>> url = 'http://example/com/'>>> response = requests.get(url)>>> response.status_code200>>>response.headers['content-type']'text/html; charset=utf-8'>>>response.contentu'Hello,world!'
发送请求
-- r = requests.get('https://github.com/timeline.json') 【GET】
-- r = requests.post("http://httpbin.org/post") 【POST】
为URL传递参数
>>>payload = {'key1':'value1','key2':'value2'}>>>r = requests.get("http://httpbin.org/get",params=payload)>>>print r.urlu'http://httpbin.org/get?key2=value2&key1=value1'
响应内容
>>>r = requests.get('https://github.com/timeline.json')>>>print r.text'[{"repository":{"open_issues":0,"url":"https://github.com/...
响应状态码
>>>r = requests.get('http://httpbin.org/get')>>>print r.status_code200 [OK] OR 403 [禁止访问]
响应头
>>>print r.headers>>>print r.headers['Content-Type'] 'application/json;charset=utf-8'
cookies
>>>print r.cookies['example_cookie_name']
超时
>>requests.get('http://github.com',timeout=0.001)
错误与异常
-- Requests异常一般都继承于requests.exceptions.RequestException
--遇到网络问题(DNS查询失败,拒绝连接等)时,Requests会抛出一个ConnectionError异常
-- 若请求超时,则抛出一个Timeout异常
-- 遇到罕见的无效HTTP响应时,Requests则会抛出一个HTTPError异常
--若请求超过了舍得的最大重定向次数,则会抛出一个TooManyRedirects异常
正则表达式(regular expression)
-- 描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符合某个条件的子串等
Lxml
-- 是一个强大的处理HTML与XML的python库
------未完待续
- python爬虫基础知识
- python爬虫基础知识
- python爬虫基础知识整理
- Python网络爬虫基础知识学习
- python爬虫基础知识之选择器
- python爬虫scrapy框架基础知识
- Python基础知识——爬虫入门
- Python爬虫学习笔记之基础知识
- python爬虫基础知识(一)--Urllib.request
- python爬虫基础知识(二)--正则表达式
- 爬虫基础知识
- 爬虫基础知识
- 七月算法课程《python爬虫》第三课: 爬虫基础知识与简易爬虫实现
- Python零基础入门十九之爬虫基础知识
- python爬虫入门(1) 基础知识 ; 正则表达式 Re 模块
- Python爬虫----基础知识(简单爬虫架构、URL管理器和实现方法)
- Python爬虫----基础知识(简单爬虫架构、URL管理器和实现方法)
- python 爬虫入门(2) 爬虫基础知识 ; urllib 模块 ;urllib2 模块
- 算法补习-第五天-查找(中)
- 很实用的VC打印代码
- 1087. All Roads Lead to Rome (30)<最短路径,在最短路径上操作>
- PyQt 5 入门指导教程
- CDN内容发布网络
- python爬虫基础知识
- Linux NFS服务器的安装与配置
- 软件开发大图景:两个维度,四个象限
- php中接口 强大之处 php_curl
- MFC对MYSQL数据库操作
- 88. Merge Sorted Array
- 简明 Vim 练级攻略
- JSP基础
- eclipse+ADT下android开发AVD若干问题