python爬虫涉及知识,python爬虫基础知识

爬虫爬取策略

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 urllib2

response = urllib2.urlopen("http://www.baidu.com")

print response.read()

也可以换种写法:

import urllib2

request = urllib2.Request("http://www.baidu.com")

response = urllib2.urlopen(request)

print response.read()

这里的urlopen方法的参数可以传入一个request请求(其实就是一个Request类的实例),两种写法都可以

HTTP定义了与服务器交互的不同方式

-- GET 【获取/查询】: 直接以链接形式访问,链接中包括了所有的参数

-- POST【更新】:把提交的数据放置在是HTTP包的包体中

下面看个POST的例子:

import urllib

import urllib2

values = {"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_code

200

>>>response.headers['content-type']

'text/html; charset=utf-8'

>>>response.content

u'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.url

u'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_code

200 [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库

------未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值