1. HTTP简介
1.1 HTTP请求格式
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信 息,HTTP请求信息由3部分组成:
- 请求方法 URI 协议/版本
- 请求头(Request Header):http://www.atool.org/httptest.php
- 请求正文
1.2 HTTP请求方式
- 常见的http请求方式有get和post
- Get是比较简单的http请求,直接会将发送给web服务器的数据放在请求地址的后面, 即在请求地址后面使用?key1=value1&key2=value2形式传递数据,只适合于数据量 少,且没有安全性要求的请求
- Post是将需要发送给web服务器的数据经过编码放到请求体中,可以传递大量数据, 并且有一定的安全性,常用于表单提交
1.3 浏览器开发者工具使用
右击鼠标选择检查
1.4 HTTP GET请求查看
1.5 HTTP POST请求查看
2. urllib和urllib2模块使用
2.1 模块介绍及两模块异同
- urllib和urllib2,是功能强大的网络编程函数库,通过它们在网络上访问文件就像 访问本地电脑上的文件一样。通过一个简单的函数调用,几乎可以把任何url所指 向的东西用做程序的输入
- urllib和urllib2与re模块(正则表达式)结合,可以下载web页面,提取页面上的数 据信息,以及自动生成报告
- urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可 以接受URL。这意味着,你不可以通过urllib模块伪装你的User Agent字符串等 (伪装浏览器)。
- urllib2模块比较优势的地方是urllib2.urlopen可以接受Request对象作为参数, 从而可以控制HTTP Request的header部。
- 但是urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有 被加入urllib2中,因此有时也需要urllib的辅助
3. Requests模块使用
3.1 Requests模块介绍
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。
- 安装:
conda install requests
或者
pip install requests
3.2 Requests模块常见API使用
- 使用dir+help探索Requests模块
import requests
help(requests)
dir{requests}
help{requests.get}
help{requests.post}
- 使用Requests发送http get请求
import requests
r = requesta.get('http://*******')
print r
print r.status_code
print r.reason
print r.cookies
print r。headers
print r.encoding
r.encoding = 'gb2312'#出现乱码则将encoding改为页面真正的字符编码集
print r.text
- 使用Requests模块实现http post请求
import request
payload = {'key1':'value1','key2','value2'}
r = requests.post(http://httpbin.org/post',data=payload)
print r
print r.text
3.3 设置请求头信息模拟浏览器访问
import requests
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101 Firefox/50"}
html = requests.get("http://www.tmall.com",headers=headers)
html.status_code
html.content
html.text
3.4 使用代理IP
import requests
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
proxies = {'http':'122.72.32.73:80','https':'58.67.159.50:80'}
#requests模拟浏览器
response = requests.get("http://www.tmall.com",headers=headers,proxies=proxies)
print(response.status_code)
print(response.content)
4. Python三种网页内容抓取方法
4.1 介绍
- 正则表达式:使用re模块,用正则表达式去匹配想要抓取的网页内容,性能比较 好,但是要求正则表达式掌握程序高
- BeautifulSoup模块:纯Python编写,可以解析网页,并且提供定位内容的便捷 接口,性能不是很好,但是使用简单
- lxml模块:C语言实现,性能较好,使用简单,但安装比较困难
4.2 BeautifulSoup4
from bs4 import BeautifulSoup as bs
html = '''
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>html标签简介</title>
<meta charset="utf-8" />
</head>
<div class="mydiv">
<h1>网页标题</h1>
</div>
</html>
'''
#解析数据
#find 获取匹配的第一个元素
soup = bs(html,'lxml')
print soup.prettify
div = soup('div',class_='inner-left f1')
print div.find('h1').text