Python-爬虫

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)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值