提示:百度谷歌尽量不要爬虫
提示:这里可以添加本文要记录的大概内容:
首先他是个第三方库,应用非常广泛
采用Apache2Licensed开源的HTTP协议
在urllib库基础上使用Python编写的爬虫库
提示:以下是本篇文章正文内容,下面案例可供参考


下面代码操作我尽量用曾经写的一个程序来操作(运行代码前需要运行此项目)

具体代码如下:
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta content="webkit|ie-comp|ie-stand" name="renderer" />
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />
<meta content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport" />
<meta content="no-siteapp" http-equiv="Cache-Control" />
<link rel="stylesheet" type="text/css" href="/h-ui/css/H-ui.min.css" />
<link rel="stylesheet" type="text/css" href="/h-ui.admin/css/H-ui.admin.css" />
<link rel="stylesheet" type="text/css" href="/lib/Hui-iconfont/1.0.8/iconfont.css" />
<link id="skin" rel="stylesheet" type="text/css" href="/h-ui.admin/skin/default/skin.css" />
<link rel="stylesheet" type="text/css" href="/h-ui.admin/css/style.css" />
<title>车库停车管理系统v1.0</title>
</head>
<body>
<header class="navbar-wrapper">
<div class="navbar navbar-fixed-top">
<div class="container-fluid cl"> <a class="logo navbar-logo f-l mr-10 hidden-xs" href="/aboutHui.shtml">车库停车管理系统</a>
<span class="logo navbar-slogan f-l mr-10 hidden-xs">v1.0</span>
<a aria-hidden="false" class="nav-toggle Hui-iconfont visible-xs" href="javascript:;"></a>
<nav class="nav navbar-nav navbar-userbar hidden-xs" id="Hui-userbar">
<ul class="cl">
<li> <font color="white"><span id="dt"></span> </font></li>
<li class="dropDown dropDown_hover">
<a class="dropDown_A" href="#">
<input id="adminId" type="hidden" value="1" />
<span>admin</span> <i class="Hui-iconfont"></i></a>
<ul class="dropDown-menu menu radius box-shadow">
<li><a href="javascript:;" onClick="change_password('修改信息','/admin/change-info','600','270')">修改信息</a></li>
<li><a href="/admin/logout">退出</a></li>
</ul>
</li>
<li class="dropDown right dropDown_hover" id="Hui-skin"> <a class="dropDown_A" href="javascript:;" title="换肤"><i class="Hui-iconfont" style="font-size:18px"></i></a>
<ul class="dropDown-menu menu radius box-shadow">
<li><a data-val="default" href="javascript:;" title="默认(黑色)">默认(黑色)</a></li>
<li><a data-val="blue" href="javascript:;" title="蓝色">蓝色</a></li>
<li><a data-val="green" href="javascript:;" title="绿色">绿色</a></li>
<li><a data-val="red" href="javascript:;" title="红色">红色</a></li>
<li><a data-val="yellow" href="javascript:;" title="黄色">黄色</a></li>
<li><a data-val="orange" href="javascript:;" title="橙色">橙色</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</header>
<aside class="Hui-aside">
<div class="menu_dropdown bk_2">
<dl id="menu-notice">
<dt><i class="Hui-iconfont"></i> 信息发布管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="/admin/notice-list" data-title="公告管理" href="javascript:;">公告管理</a></li>
</ul>
</dd>
</dl>
<dl id="menu-car">
<dt><i class="Hui-iconfont"></i> 车位管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="/admin/car-list" data-title="车位列表" href="javascript:;">车位列表</a></li>
</ul>
</dd>
</dl>
<dl id="menu-order">
<dt><i class="Hui-iconfont"></i> 订单管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="/admin/order-list" data-title="订单列表" href="javascript:;">订单列表</a></li>
</ul>
</dd>
</dl>
<dl id="menu-order">
<dt><i class="Hui-iconfont"></i> 积分管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="/admin/point-list" data-title="积分排行" href="javascript:;">积分排行</a></li>
</ul>
</dd>
</dl>
<dl id="menu-message">
<dt><i class="Hui-iconfont"></i> 投诉建议管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="/admin/message-list" data-title="留言列表" href="javascript:;">留言列表</a></li>
</ul>
</dd>
</dl>
<dl id="menu-admin">
<dt><i class="Hui-iconfont"></i> 系统管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="/admin/admin-list" data-title="管理员管理" href="javascript:void(0)">管理员列表</a></li>
<li><a data-href="/admin/user-list" data-title="用户管理" href="javascript:void(0)">用户列表</a></li>
</ul>
</dd>
</dl>
</div>
</aside>
<div class="dislpayArrow hidden-xs"><a class="pngfix" href="javascript:void(0);" onClick="displaynavbar(this)"></a></div>
<section class="Hui-article-box">
<div class="Hui-tabNav hidden-xs" id="Hui-tabNav">
<div class="Hui-tabNav-wp">
<ul class="acrossTab cl" id="min_title_list">
<li class="active">
<span data-href="/welcome" title="我的桌面">我的桌面</span>
<em></em></li>
</ul>
</div>
<div class="Hui-tabNav-more btn-group"><a class="btn radius btn-default size-S" href="javascript:;" id="js-tabNav-prev"><i class="Hui-iconfont"></i></a><a class="btn radius btn-default size-S" href="javascript:;" id="js-tabNav-next"><i class="Hui-iconfont"></i></a></div>
</div>
<div class="Hui-article" id="iframe_box">
<div class="show_iframe">
<div class="loading" style="display:none"></div>
<iframe frameborder="0" scrolling="yes" src="/welcome"></iframe>
</div>
</div>
</section>
<div class="contextMenu" id="Huiadminmenu">
<ul>
<li id="closethis">关闭当前 </li>
<li id="closeall">关闭全部 </li>
</ul>
</div>
<!-- 引入公共js -->
<span>
<script type="text/javascript" src="/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="/lib/layer/2.4/layer.js"></script>
<script type="text/javascript" src="/lib/laypage/1.2/laypage.js"></script>
<script type="text/javascript" src="/h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="/h-ui.admin/js/H-ui.admin.js"></script>
<script type="text/javascript" src="/lib/jquery.contextmenu/jquery.contextmenu.r2.js"></script>
</span>
<!--请在下方写此页面业务相关的脚本-->
<script>
var currentDate = new Date();
function run() {
currentDate.setSeconds(currentDate.getSeconds() + 1);
document.getElementById("dt").innerHTML = currentDate.toLocaleString();
}
window.setInterval("run();", 1000);
/*密码-修改*/
function change_password(title,url,w,h){
var adminId = $("#adminId").val();
var urlTmp = url+"?adminId="+adminId;
layer_show(title,urlTmp,w,h);
}
</script>
</body></html>
【例】测试网站:车库停车管理系统后台登录页面(运行代码前需要运行此项目)
http://localhost:8080/admin/login

代码如下(示例):
import requests
r = requests.get("http://localhost:8080/index.html")
demo = r.text
print(demo)
这行代码把页面所有代码全部输出了

| 方法 | 说明 | HTTP协议 |
|---|---|---|
| requests.request() | 构造一个请求 | HTTP |
| requests.get() | 获取HTML网页的主要方法 | GET |
| requests.head() | 获取HTML网页头的信息方法 | HEAD |
| requests.post() | 向HTML网页提交POST请求方法 | POST |
| requests.put() | 向HTML网页提交PUT请求的方法 | PUT |
| requests.patch() | 向HTML网页提交局部修改请求 | PATCH |
| requests.delete() | 向HTML页面提交删除请求 | DELETE |
【例1】http://www.baidu.com/s?wd=keyword
import requests
kv={'wd':'Python'}
r = requests.get("http://www.baidu.com/s",
params=kv)
demo=r.text
print(r.request.url)
print(len(demo))

【例2】http://localhost:8080/index.html
import requests
r=requests.get("http://localhost:8080/index.html")
print(r.status_code)
print(type(r))

requests.request(method,url,**kwargs)
参数说明:
method:请求方式
url:页面url链接
**kwargs:控制访问参数,共13个
(1)params:字典或字节序列,作为参数增加到url中
requests.request(method,url,**kwargs)
**kwargs:控制访问参数,共13个
(2) data:字典:
字节序列或文件对象,Request内容
r=requests.get(url)
url:页面url链接
从服务器获取请求资源
生成Response对象(服务器返回的资源)
requests.get(url, params,**kwargs)
参数说明:
url:页面url链接
params:字典或字节序列
**kwargs:控制访问参数,共12个
| 属性 | 说明 |
|---|---|
| r.status_code | 返回状态码 |
| r.text | 响应内容的字符串形式 |
| r.encoding | 网页的编码方式 |
| r.apparent_encoding | 分析得到的编码方式 |
| r.content | 响应内容的二进制方式 |
requests.head (url,**kwargs)
参数说明:
URL:页面URL链接
**kwargs:控制访问参数,共12个
【例】http://localhost:8080/index.html
【# 井号后的注释与运行后对应的东西一致】
import requests
r=requests.head("http://localhost:8080/index.html")
print(r.headers) # r.headers(代表着那几行数据)
print(r.text)

【同上一例】
import requests
r=requests.head("http://localhost:8080/index.html")
print(r.headers)
print(r.text) # r.text(代表空行)

requests.post(URL,data,json,**kwargs
参数说明:
URL:页面URL链接
data:字典或字节序列
json:JSON格式的数据
**kwargs:控制访问参数,共11个
【例】
import requests
base_url="http://httpbin.org"
form_data={"user":"python39","pwd":'2022'}
#将参数存在字典里
r=requests.post(base_url+'/post',data=form_data)
print(r.url) #打印URL
print(r.status_code)
print(r.json())
print(r.text) #此处代码对应红框以外的数据

【例】http://localhost:8080/index.html
import requests
datas={
'login_name':'jn',
'login_psd':'123456',
}
r=requests.post("http://localhost:8080/index.html",data=datas)
demo=r.text
print(demo)

上面的账号密码是【jn与123456】,如果改了呢?
import requests
datas={
'login_name':'jn1',
'login_psd':'123456',
}
r=requests.post("http://localhost:8080/index.html",data=datas)
demo=r.text
print(demo)

再登入网址可以看到账号或密码错误

进入开发者模式后选择保留日志

每刷新一次页面会发现右边会出现一些数据

在左边页面选择登入页面账号密码
登录成功后可以看到有个login是post请求

requests.put(URL,data,**kwargs)
URL:页面URL链接
data:字典或字节序列
**kwargs:控制访问参数,共12个
【例】
import requests
r = requests.get("http://www.baidu.com" )
print(r.status_code)
print(r.encoding)
print(r.apparent_encoding)
r.encoding = r.apparent_encoding
print(r.text)

【例】
import requests
r =requests.get( "http://www.baidu.com")
print(r.status_code)
print(r.encoding)
print(r.apparent_encoding)
r.encoding = r.apparent_encoding
print(r.headers) #输出红框部分

非正常用户——容易被封禁
如何逃过网站的法眼?如何骗过网站?
把自己伪装成一个正常的浏览器
隐藏自己的爬虫程序的身份
把自己伪装成一个正常的浏览器
1、 向访问网站提供使用的浏览器类型及版本、操作系统及版本、浏览器内核、
等信息的标识。
2、 用户所访问的网站可以显示不同的排版
3.、为用户提供更好的体验或者进行信息统计
4.、用手机访问网站和电脑访问不一样,网站根据访问者的UA来判断的。
5、UA可以进行伪装。
import requests
kv = { 'user-agent':"Mozilla/4.0 (compatible;MSIE 6.0;windows NT 5.1)"}
r = requests.get("https://www.amazon.cn/gp/product/B01M8L5Z3Y" ,headers=kv)
r.encoding = r.apparent_encoding
print(r.request.headers)

1、一个爬虫程序在网站爬取东西,一个固定IP的访问
2.、人操作不可能如此频繁
3、网站设置一个IP访问频率的阈值,超过这个阈值,说明是爬虫程序。
伪装IP!!!当然伪装IP商业版是收费的
【例】
import requests
kv = { 'user-agent':"Mozilla/4.0 (compatible; MSIE 6.0;windows NT 5.1)"}
proxies={ "http" : "http://125.120.11.219∶6666"}
r = requests.get( "https://www.amazon.cn/gp/product/BO1M8L5Z3Y" ,headers=kv , proxies=proxies)
r.encoding = r.apparent_encoding
print(r.request.headers)
