从Python的基础知识入门到进阶,最终到达全栈的全部文章会按照学习顺序陆续发表。如果发现有看不懂的地方,或发现有没见过的概念,请按照时间顺序,往前查找。
算法:堆排序:可以看做是完全二叉树,任意非叶子节点均不大于(或不小于)其左右孩子(若存在)结点的关键字。
过程分两块:
建堆:将给定列表变成堆。
将堆进行排序
将完成建堆的堆顶与最后一位调换,将不包含最后一位的调换后的二叉树从新建堆,这样循环就完成了堆排序。
希尔排序:选定一个增量,其实是更效率的分组插入排序。
希尔排序
模拟浏览器:我们正常浏览网页都是通过浏览器进行浏览的,因此爬虫程序在爬取数据时要模仿浏览器登录网站,否则遇到开启反爬虫的机制时,不能抓取到数据。
import urllib.request
import random
url = 'http://www.renren.com'
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (Khtml, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'Accept':'text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
}
有2种方式:
(1)
#设置请求头信息
rep = urllib.request.Request(url, headers=header)
#发送请求
resp = urllib.request.urlopen(rep)
data = resp.read().decode('UTF-8')
print(data)
(2)
rep = urllib.request.Request(url)
rep.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36')
resp = urllib.request.urlopen(rep)
data = resp.read().decode('UTF-8')
print(data)
反反爬虫:
agentList = [
'Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0)
Gecko/20100101 Firefox/34.0',
'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10)
Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10'
]
#随机取得请求头
agentStr = random.choice(agentList)
rep = urllib.request.Request(url)
rep.add_header('User-Agent',agentStr)
resp = urllib.request.urlopen(rep)
data = resp.read().decode('UTF-8')
print(data)
这是对浏览器进行校验时反反爬虫的一种小机制。
请求浏览器数据:
import urllib.request
#直接请求并保存数据到文件
urllib.request.urlretrieve('http://www.renren.com',filename='renren.html')
#urlretrieve在执行的时候会产生一些缓存
#清除缓存
urllib.request.urlcleanup()
捕获异常:
在昨天已经讲到如何捕获异常,这里再补充一点获取Http状态码。
for i in range(1,10):
....try:
#如果超过你的timeout时间没有响应,被捕获
........res = urllib.request.urlopen('http://www.renren.com',timeout=0.5)
........print(res.getcode())
....except:
........print('长时间没有响应')
HTTP请求:import urllib.request
import urllib.parse
import json
#请求当前url返回的数据是json字符串
url = 'http://wechattwo.new2life.cn?name=www'
res = urllib.request.urlopen(url)
data = res.read().decode('utf-8')
#数据先转成python支持的数据格式dict
dictL = json.loads(data)
json.dumps()
print(type(dictL))
#-----------------------------------------------
#get就是url可见参数, post就是不可见参数,但在请求头能够看见
#模拟post请求
url = 'http://wechattwo.new2life.cn'
data = {'user':'www','age':18}
#对请求的数据进行打包编码
postData = urllib.parse.urlencode(data).encode('utf-8')
#设置请求的数据
rep = urllib.request.Request(url,postData)
rep.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36')
result = urllib.request.urlopen(rep)
print(type(result.read().decode('utf-8')))
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved