URL
scheme:协议,http,https,ftp
host:服务器IP地址或者域名:192
port#:服务器端口号:默认值80
path:访问资源路径
query-string:参数,发送给http服务器的数据
anchor:锚,跳转到之前浏览的锚点位置
请求方式GET请求和POST请求
GET请求:是从服务器上获取数据
POST请求:是向服务器传送数据。请求参数在请求体中,在URL中看不到,通常向服务器提交大型数据或敏感数据。
浏览器开发者工具:F12-Network
请求头Headers:
Request URL: 请求地址
Request Method:请求方式GET POST
Cookie:加密保存用户名密码
User-Arent:浏览器
+响应信息Reponse:
#python自带模块
from urllib import request
url=r"http://www.baidu.com/" #r 取消转义字符
#发送请求
reponse=request.urlopen(url).read()
print(reponse)#接收到的reponse 类型为“bytes”二进制或者字节码形式。
中文处理
1.编码encode()
2.解码decode()
#python自带模块
from urllib import request
url=r"http://www.baidu.com/" #r 取消转义字符
#发送请求
reponse=request.urlopen(url).read().decode()
print(reponse)#类型为‘str’字符串
数据清洗-正则表达式
#python自带模块
from urllib import request
import re #正则表达式
url=r"http://www.baidu.com/" #r 取消转义字符
#发送请求,获取响应信息,request自动创建请求
reponse=request.urlopen(url).read().decode()
pat=r"<title>(.*?)</title>"
data=re.findall(pat,reponse)
print(data)
创建自定义请求对象
构造请求头信息
#import urllib.request #python自带模块
from urllib import request
import re
url=r"http://www.baidu.com/" #r 取消转义字符
#创建自定义请求对象,对抗反爬虫机制
#1.通过判断用户的浏览器名称,不同浏览器做请求头,服务器返回的数据是有差别的
#构造请求头信息
header={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
}
req=request.Request(url,headers=header)
#发送请求
reponse=request.urlopen(req).read().decode()
pat=r"<title>(.*?)</title>"
data=re.findall(pat,reponse)
print(data)
随机选择浏览器名称
反爬虫措施一
#import urllib.request #python自带模块
from urllib import request
import re
import random
url=r"http://www.baidu.com/" #r 取消转义字符
#创建自定义请求对象,对抗反爬虫机制
#1.通过判断用户的浏览器名称
agent1="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
agent2="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)"
agent3="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
agent4="Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999"
agent5="Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"
list1=[agent1,agent2,agent3,agent4,agent5]
agent=random.choice(list1)
print(agent)
#构造请求头信息
header={
"User-Agent": agent
}
req=request.Request(url,headers=header)
#发送请求
reponse=request.urlopen(req).read().decode()
pat=r"<title>(.*?)</title>"
data=re.findall(pat,reponse)
print(data)
创建自定义Opener
基本的urlopen方法不支持 代理(代理IP使服务器追踪不到你自己的IP)、cookie(网络上的痕迹),等其他HTTP(明文)/HTTPS(加密)高级功能。要支持这些功能通过request,build_opener()方法创建自定义opener对象。
from urllib import request
#构建处理器对象(处理http请求)
http_hander=request.HTTPHandler()
#创建自定义opener
opener=request.build_opener(http_hander)
#创建自定义请求对象
req=request.Request("http://www.baidu.com")
#提交请求,获取相应
#repons=opener.open(req).read()
#把自定义opener设定为全局,这样用urlopen发生的请求也会使用自定义的opener;
request.install_opener(opener)
repons=request.urlopen(req).read()
print(repons)
使用代理
反爬虫措施二
from urllib import request
import random
#反爬虫机制。2.使用代理IP
proxylist=[
{"http":"118.212.105.142:9999"},
]
proxy=random.choice(proxylist)
#构建代理处理器对象(处理代理请求)
proxyHandler=request.ProxyHandler(proxy)
#创建自定义open
opener=request.build_opener(proxyHandler)
#生产请求
req=request.Request("http://www.baidu.com")
#发送请求,接收响应
reponse=opener.open(req).read().decode()
print(reponse)
处理GET请求
处理get请求参数提交问题
url编码
1.编码encode()
2.解码decode()
处理POST请求
安装第三方功能包
第三方模块地址“D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\Lib\site-packages”
缺少模块的报警:No module name ‘PIL’
一、下载
网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
下载对应版本(python版本,64 or 32 系统)。在下载的 .whl 路径下打开cmd。输入 pip install (文件名.whl)等待安装成功。
二、PIP
打开 CMD 。python 一定要加入环境变量。
在python安装目录下按shift 右键 也可以打开cmd。
输入pip list 回车,显示已经安装的第三方库。
升级pip 工具输入:python -m pip install --upgrade pip 回车。一定要在网络好的环境下安装,否则会有各种失败。
下载想要的包:pip install requests(包名)。等待下载安装。成功提示“successfully installed 包名-版本”
卸载包:pip uninstall requests(包名)。提示确认y取消n,输入y,等待卸载。成功提示“successfully uninstalled 包名-版本”
爬一下众为兴视频
#第一页url
#http://www.adtechcn.com/video_complex.aspx?fid=n15:15:1
#第二页url
#http://www.adtechcn.com/video_complex.aspx?fid=n15:15:1&pageindex=2
#视频url:http://www.adtechcn.com/Private/Files/5948989a7a465627ae5e.mp4
#response:<a href='/Private/Files/5948989a7a465627ae5e.mp4 ' target="_blank">点击下载</a>
#链接: http://www.adtechcn.com + /Private/Files/5948989a7a465627ae5e.mp4
#名称:<img data-original='' alt='直线电机 皮带线' title='直线电机 皮带线' /></a>
import requests #
import time #时间sleep
import re #正则表达式
#创建容器
videoID=[]
videoName=[]
url='http://www.adtechcn.com/video_complex.aspx?fid=n15:15:1&pageindex=10'#
response=requests.get(url)#获得响应信息
strr=response.text
#正则表达式匹配出视频名称和视频编号
#<a href='/Private/Files/4704f9e566fee575f08d.mp4 ' target="_blank">点击下载</a>
#alt='KY钥匙机视频' title=
pat1=r"alt='(.*?)' title="#视频名
pat2=r"<a href='(.*?) ' target="#视频编号
idlist=re.findall(pat2,strr)#获得视频编号列表
namelist=re.findall(pat1,strr)#获得视频名列表
videoID.extend(idlist)
videoName.extend(namelist)
print(len(videoID))
print(len(videoName))
print(videoID)
print(videoName)
for i in range(0,len(videoID)):
videoUrl='http://www.adtechcn.com'+str(videoID[i]) #文件url
#videoUrl=str(videoID[i]) #文件url
#print(videoUrl)
videoname=videoName[i] #文件名
print("正在下载第",i+1,"个视频")
data=requests.get(videoUrl).content#接受二进制文件
with open("D:\\adtech\\{}.mp4".format(videoname),"wb") as f:#保存二进制文件
f.write(data)
time.sleep(1)