- HTTP与HTTPS:互联网上应用最为广泛的一种网络协议。目前所有网站开发都基于该协议,也是网站的实现原理。
- 请求头:基于HTTP与HTTPS协议实现,其作用是在通信之间实现信息传递。熟知各种请求类型,对爬虫中编写请求头有指导性作用。
- cookies:存储用户主机浏览器中的文本文件,主要让服务器识别各个用户身份信息。
- HTML:服务器返回的网页内容,一般由服务器后台生成。网站大部分数据来源于此,熟悉HTML布局和各个标签的作用,有利于数据抓取和清洗。
- Javascript:主要实现网页的动态功能及用户交互。要懂得分析Javascript代码、尤其思数据加密处理。
- JSON:表示一个Javascript对象的信息,本质是一个特殊的字符串。
- Ajax:主要是前段数据加载和渲染技术,其影响内容大部分以JSON格式为主。
简单总结储分析网站的步骤如下:
- 找出数据来源,大部分数据来源于Doc、XHR和JS标签。
- 找到数据所在的请求,分析其请求链接、请求方式和请求参数,
- 查找并确定请求参数来源。有时候某些请求参数是通过另外的请求生成的,比如请求A的参数ID是通过请求B所生成的,那么要请求A的数据,就要先获取请求B的数据作为A的请求参数。
爬虫库Urllib
爬虫库Urllib是Python自带,用于爬虫开发。
- 复杂的请求
urllib.request.Request 的语法如下:
urllib.request.Request(url,data = None,headers{},method = None)
import urllib url = 'https://www.youku.com/' # 自定义请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 'Referer': 'https://www.youku.com/', 'Connection': 'keep-alive'} # 设置request的请求头 rep = urllib.request.Request(url, headers = headers) # 使用urlopen打开rep html = urllib.request.urlopen(rep).read().decode('utf-8') # 写入文件 f = open('html1.txt','w', encoding = 'utf8') f.write(html) f.close()
- 代理IP
代理IP的原理:以本机先访问代理IP,再通过代理IP地址访问互联网,这样网站(服务器)接收到的访问IP就是代理IP地址。(下面代理IP有问题)
import urllib.request url = 'https://www.youku.com/' # 设置代理IP proxy_handler = urllib.request.ProxyHandler({ 'http': '218.56.132.158:8080', 'https': '183.30.197.29: 9797'}) # 必须使用build_opener()函数来创建带有代理IP功能的opener对象 opener = urllib.request.build_opener(proxy_handler) response = opener.open(url) html = response.read().decode('utf-8') f = open('html2.txt','w', encoding = 'utf-8') f.write(html) f.close()
- 使用cookies
cookie主要用于获取用户登录信息,比如,通过提交数据实现用户登录之后,会生成带有登录状态的cookies,这时可以将cookies保存在本地文件中,下次程序运行的时候,可以直接读取cookies文件来实现用户登录。
import urllib.request from http import cookiejar filename = 'cookie.txt' # MozillacookieJar保存cookie cookie = cookiejar.MozillacookieJar(filename) # HTTPcookieProcessoe创建cookie处理器 handler = urllib.request.HTTPcookieProcessor(cookie) # 创建自定义opener opener = urllib.request.build_opener(handler) # open方法代开网页 response = opener.open('https://www.youku.com/') # 保存cookie文件 cookie.save()
# 读取cookies import urllib.request from http import cookiejar filename = 'cookie.txt' # 创建MozillacookieJar对象 cookie = cookiejar.MozillacookieJar() # 读取cookie内容到变量 cookie.load(filename) # HTTPcookieProcessor创建cookie处理器 handler = urllib.request.HTTPcookieProcessor(cookie) # 创建opener opener = urllib.request.build_opener(handler) # opener打开网页 response = opener.open('https://www.youku.com/') # 输出结果 print(cookie)
注意,为了方便测试,上述代码中使用的cookie.save()和cookie.load(filename)将cookies内容显示在文本文档中。在实际开发中,为了提供安全性,可以在保存和读取cookies时设置参数,使cookie信息隐藏在文件中。方法如下:
cookie.save(ignore_discard = True,ignore_expires = True) cookie.load(filename,ignore_discard = True, ignore_expires = True)
- 证书验证不作说明
- 数据处理
import urllib.request import urllib.parse url = 'https://17roco.qq.com/' data = { 'value': 'true', } # 数据处理 data = urllib.parse.urlencode(data).encode('utf-8') req = urllib.request.urlopen(url,data = data)
代码中urllib,parse.urlencode(data)将数据转换成字节的数据类型,而encode('utf-8')设置字节的编码格式。这里需要注意的是编码格式。这里需要注意的是,编码格式主要是根据网站的编码格式来决定。urlencode()的作用只是对请求参数做数据格式转化处理。
除此之外,urllib还提供quote()和unquote()对URL编码处理,使用方法如下:
import urllib.parse url = '%2523%25E7%25BC%2596%25E7%25A8%258B%2523' # 第一次解码 first = urllib.parse.unquote(url) print(first) # 第二次解码 second = urllib.parse.unquote(first) print(second)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)