Python简单爬虫之模拟浏览器

Python简单爬虫之模拟浏览器

首页动作格斗爬虫模拟器更新时间:2024-05-10

从Python的基础知识入门到进阶,最终到达全栈的全部文章会按照学习顺序陆续发表。如果发现有看不懂的地方,或发现有没见过的概念,请按照时间顺序,往前查找。

算法:

堆排序:可以看做是完全二叉树,任意非叶子节点均不大于(或不小于)其左右孩子(若存在)结点的关键字。

过程分两块:

  1. 建堆:将给定列表变成堆。

  2. 将堆进行排序

将完成建堆的堆顶与最后一位调换,将不包含最后一位的调换后的二叉树从新建堆,这样循环就完成了堆排序。

希尔排序:选定一个增量,其实是更效率的分组插入排序。

希尔排序

模拟浏览器:

我们正常浏览网页都是通过浏览器进行浏览的,因此爬虫程序在爬取数据时要模仿浏览器登录网站,否则遇到开启反爬虫的机制时,不能抓取到数据。

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