【python项目开发】爬虫基础知识


爬虫,早有耳闻。整个世界就像一张巨大的蜘蛛网,而爬虫就是在描述这种千丝万缕的关系。持续更新,梳理。

越伟大,越有独创精神的人越喜欢孤独。(赫胥黎)


爬虫

爬虫就是模拟客户端(浏览器)发送网络请求,获取响应,按照规则提取数据的程序。对于爬取到的数据可以呈现在网页或APP上,也可以对其进行数据分析寻找规律。


(一)URL

浏览器的请求

比如在浏览器随意做个搜索,这里搜索“爬虫”,空白处右键->审查元素->Network->F5->左侧Name栏选择一项,观察右侧Headers->General->Request URL,即为请求的URL(对应一个网址)。
在这里插入图片描述
在这里插入图片描述“?”后面的就是参数,参数之间以”&”隔开。

浏览器请求URL地址对应的响应

在下图Elements里的元素就是浏览器得到的响应。
在这里插入图片描述

浏览器请求URL地址过程:当服务器响应之后(network下找到对应的地址->response),这些字符串被渲染显示到屏幕上,但是浏览器会发现响应字符串中有很多URL地址,紧接着又会请求,于是就会显示很多Elements。 但是爬虫的话不会得到这么多Elements,只会得到一个服务器返回的响应。
总结如下:浏览器请求url地址,得到elements下面的内容(当前url地址对应的响应 + 图片 + css + js)。 爬虫请求url地址,得到当前url地址对应的响应(network–>reponse或者查看网页源码的内容)

HTTP与HTTPS

HTTP:超文本传输协议。明文传输的(数据不加密直接传输)
HTTPS:HTTP+SSL(安全套接字层)。以密文传输的,传输的数据是经过加密的,接收方需经过解密之后才能得到加密前的数据。
因此HTTP的效率要高于HTTPS,但是不安全。

请求行
在这里插入图片描述
请求行就是General中的内容
在这里插入图片描述

Request URL:请求的url。
Request Method:请求的方式。 get或者post方式
Status Code:状态码。返回200表示正确
Referrer Policy:表示你是哪里进入这个页面的

请求头
在这里插入图片描述
点击view source
在这里插入图片描述

主要参数:
GET:表示是get方式请求的,后面的值是路径和参数 。
connection:keep-alive。 表示可以建立常链接 。
Cache-Control:缓存控制。max-age=0 表示不缓存任何东西 。
User-Agent(重要):用户代理。服务器得知是谁在请求它,什么平台下的什么版本浏览器,或者程序 。
Cookie(重要):用来存储用户信息,每次请求都会发送给对方浏览器。 访问需要登录的页面时,对方会根据Cookie来判断是不是爬虫。

请求体

请求体是携带数据的,get请求没有请求体,post请求有请求体。get请求的携带的数据直接通过参数给出了。 post请求常用于登陆注册 ;post请求携带的数据量比get请求大与多,常用于传输大文本的时候。

响应头
在这里插入图片描述

主要看Set-Cookie字段:对方服务器通过该字段设置cookie到本地。

抓包

指在network里面查找需要的东西的过程。


(二)requests库

Python中的一个HTTP网络请求库,用来简化网络请求!

常见reponse方法:
response.text:打印返回的数据
response.content:打印返回的数据
response.status_code:返回状态码
response.request,headers:返回请求头
response.headers:返回响应头

#1 爬取第一个网页
import requests
url = "http://www.baidu.com"
response = requests.get(url) # get请求(数据从服务器发到客户端)
response.encoding = "utf-8" # 修改编码格式
print(response.status_code) #状态码(200表示一切正常)
assert response.status_code == 200
print(response.request.url) # 请求url
# print(response.url) # 响应url(结果同上)
print(response.request.headers) #请求头1
print(response.headers) #请求头2
print(response.text)  #返回的数据

headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
response = requests.get("http://www.baidu.com", headers=headers) # 加入请求头
print(response.content.decode()) # 响应内容(内容更完整,结果未贴)  

200
http://www.baidu.com/
{'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'Keep-Alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sun, 18 Aug 2019 14:02:14 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:28:12 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
# 2 发送带参数的请求
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
p={"wd":"传智播客"}
url_temp="http://www.baidu.com/s"
# url="http://www.baidu.com/s?wd={}".format("传智播客") # 可代替(即合并搜索参数)
# r=url.get(url, headers = headers) # 可代替
r=requests.get(url_temp, headers = headers, params=p)
print(r.status_code)
print(r.request.url) #地址被url编码

http://www.baidu.com/s?wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2
传智播客(URL解码结果)

附作者:Python爬虫获取豆瓣网评分Top200的电影——亲测可用,网址
https://download.csdn.net/download/qq_35778860/56379309


说明:本文是从《python项目案例开发从入门到实战》书中总结而来,如有疑问,还望各位同仁与前辈指正。

附作者相关研究:
Python:
Python实现线性回归、逻辑回归、KNN、SVM、朴素贝叶斯、决策树、K-Means7种机器学习算法的经典案例——亲测可用,链接
https://download.csdn.net/download/qq_35778860/20715889
Python实现飞机大战的完整代码——亲测可用,链接
https://download.csdn.net/download/qq_35778860/57165535
Python爬虫获取豆瓣网评分Top200的电影——亲测可用,链接
https://download.csdn.net/download/qq_35778860/56379309
Python根据下拉选项绘制雷达图和柱形图(异常预控平台)——亲测可用,链接
https://download.csdn.net/download/qq_35778860/20715210
Python根据下拉选项绘制雷达图和柱形图(异常预控平台)——亲测可用,链接
https://download.csdn.net/download/qq_35778860/20715210
python实现雷达图——亲测可用,链接
https://download.csdn.net/download/qq_35778860/20695215
基于python的北京房屋出租数据可视化分析与3D展示——亲测可用,链接
https://download.csdn.net/download/qq_35778860/20675051
基于Python设计的web接口聊天机器人
https://download.csdn.net/download/qq_35778860/66662593
用Python进行自然语言处理(中文).rar
https://download.csdn.net/download/qq_35778860/63652414
《机器学习实战》全书python代码——很全很完整
https://download.csdn.net/download/qq_35778860/62203534
Python3实现十大排序算法
https://download.csdn.net/download/qq_35778860/61630851
C#
成绩管理系统(C/S结构的应用系统,含access数据库)——C#实现
https://download.csdn.net/download/qq_35778860/66967387
C#实现学生信息管理系统(包括增删改查功能)——亲测可用
https://download.csdn.net/download/qq_35778860/61620149
Matlab
极限学习机ELM+OSELM+KELM+半监督SSELM+USELM的matlab程序(附完整代码)
https://download.csdn.net/download/qq_35778860/56378533
P+近邻KNN+LS最小二乘算法的matlab代码——亲测可用(含实例)
https://download.csdn.net/download/qq_35778860/56378309
基于matlab的卷积神经网络实现手写数字识别
https://download.csdn.net/download/qq_35778860/66667747
基于MATLAB的人工蜂群算法
https://download.csdn.net/download/qq_35778860/66665944
利用MATLABsilulink搭建有源电力滤波器仿真.zip
https://download.csdn.net/download/qq_35778860/63659150
动态规划MATLAB程序.zip
https://download.csdn.net/download/qq_35778860/63658838
基于matlab的模式识别基础实例源代码.zip
https://download.csdn.net/download/qq_35778860/63658486
Matlab_动态窗口法实现机器人在障碍环境下的模拟避碰仿真.zip
https://download.csdn.net/download/qq_35778860/63658232
bp神经网络整定pid参数matlab应用程序.rar
https://download.csdn.net/download/qq_35778860/63656174
利用深度学习的matlab程序编码仿真实现图像分割.zip
https://download.csdn.net/download/qq_35778860/63655267
Java
基于java的信息管理系统
https://download.csdn.net/download/qq_35778860/66658535
Java swing学生成绩系统(源码+数据库脚本).rar
https://download.csdn.net/download/qq_35778860/63653951
Jsp
jsp学生信息管理系统(源码+数据库脚本).zip
https://download.csdn.net/download/qq_35778860/63653655
SCN
随机配置网络SCN实现的matlab代码——亲测可用
https://download.csdn.net/download/qq_35778860/61636684
BLS
宽度学习BLS的matlab代码+Mnist数据集
https://download.csdn.net/download/qq_35778860/61635045
Mysql
Mysql增删改查代码操作,很全很完整——亲测可用
https://download.csdn.net/download/qq_35778860/61626574
C
基于单片机的交通灯控制系统设计(含代码,原理图)——C语言实现
https://download.csdn.net/download/qq_35778860/60383113
基于单片机的温度控制系统设计代码(含代码,原理图)——C语言实现
https://download.csdn.net/download/qq_35778860/60379923
郭天祥51单片机书中400例程——亲测可用
https://download.csdn.net/download/qq_35778860/58014293
其他
微信转盘抽奖小程序源码.rar
https://download.csdn.net/download/qq_35778860/63652890

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youthlost

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值