Python-爬虫开发01

爬虫基本概念爬虫的定义
网络爬虫(被称为 网页蜘蛛,网络机器人 ),就是 模拟客户端发送网络请求 ,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序一般来说,只要浏览器上能做的事情,爬虫都可以做**爬虫的分类
**
通用爬虫 :通常指搜索引擎的爬虫聚集爬虫 :针对特定网站或某些特定网页的爬虫robots协议
robots协议: 也叫robots.txt(统一小写)是一种存放于网站根目录下的ascii编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的如果将网站视为酒店里的一个房间,robots.txt就是主人在房间门口悬挂的“请勿打扰”或“欢迎打扫”的提示牌。这个文件告诉来访的搜索引擎哪些房间可以进入和参观,哪些房间因为存放贵重物品,或可能涉及住户及访客的隐私而不对搜索引擎开放。但robots.txt不是命令,也不是防火墙,如同守门人无法阻止窃贼等恶意闯入者
举例:
访问淘宝网的robots文件: https://www.taobao.com/robots.txt
* 很显然淘宝不允许百度的机器人访问其网站下其所有的目录
如果允许所有的链接访问应该是:allow: /
http和https的概念
http
超文本传输协议默认端口号:80https
http+ssl(安全套接字层)默认端口号:443**https比http更安全,但是性能更低
**
url的形式
sheme://host[:port#]/path/.../[?query-string][#anchor]scheme:协议(例如:http、https、ftp)host:服务器ip地址/域名port:服务器端口号path:访问资源的路径query-string:请求的参数anchor:锚(跳转到网页的指定锚点位置)例:http://item.jd.com/100008959687.html#product-detailhttp常见请求头
host (主机和端口号)connection(链接类型)upgrade-insecure-requests(升级为https请求)user-agent(浏览器名称)accept(传输文件类型)referer(页面跳转处)accept-encoding(文件编解码格式)cookiex-requested-with:xmlhttprequest(是ajax异步请求)
http常见响应码
200:成功302:临时性重定向到新的url404:请求的路径找不到500:服务器内部错误rquests模块requests的官网
https://docs.python-requests.org/zh_cn/latest/index.html
**示例:下载官网上的图片
**
import requestsurl=https://docs.python-requests.org/zh_cn/latest/_static/requests-sidebar.pngresponse=requests.get(url)# 响应状态码为200,表示请求成功if response.status_code==200: # 生成图片 with open(aa.png,wb) as f: f.write(response.content)response.text 和 response.content 的区别
response.text类型:str解码类型:根据http头部对响应的编码作出有根据的推测,推测的文本编码修改编码的方法:response.encoding='gbk'response.content类型:bytes解码类型:没有指定修改编码的方法:response.content.decode('utf-8')**requests请求带header
**
主要是模拟浏览器,欺骗服务器,获取和浏览器一致的内容header的数据结构是 字典示例
import requestsrespons=requests.get(http://www.baidu.com)print(respons.request.headers)# 设置header 模拟谷歌浏览器headers={ user-agent:mozilla/5.0 (windows nt 6.1; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/86.0.4240.111 safari/537.36}respons2=requests.get(http://www.baidu.com,headers=headers)print(respons2.request.headers)
获取user-agent的值
带参数的requests请求
import requestsurl=http://www.baidu.com/s?# 添加参数params={ wd:hello}# 方式一respons=requests.get(url,params=params)# 方式二respons2=requests.get(http://www.baidu.com/s?wd={}.format(hello))print(respons.status_code)print(respons.request.url)print(respons2.status_code)print(respons2.request.url)
requests发送post请求
语法response=requests.post(http://www.baidu.com/,data=data,headers=headers)data的数据结构是 字典示例import requestsurl=https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=lst___t=1617719326771headers={ user-agent:mozilla/5.0 (windows nt 6.1; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/86.0.4240.111 safari/537.36}params={ curr_iss_amt: 20}respons=requests.post(url,data=params,headers=headers)print(respons.content.decode())requests使用代理方式
使用代理的原因让服务器以为不是同一个客户端请求防止我们的真实地址被泄露,防止被追究语法requetst.get(http://www.baidu.com,proxies=proxies)proxies的数据结构 字典proxies={ http:http://12.33.34.54:8374,https:https://12.33.34.54:8374 }示例import requestsurl=http://www.baidu.comheaders={ user-agent:mozilla/5.0 (windows nt 6.1; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/86.0.4240.111 safari/537.36}proxies={ http: 175.42.158.211:9999}respons=requests.post(url,proxies=proxies)print(respons.status_code)**cookie和session的区别
**
cookie数据存放在客户的浏览器上,session数据放在服务器上cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗session会在一定时间内保存在服务器上。当访问增多会比较占用服务器性能单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie爬虫处理cookie和session
带上cookie、session的好处能够请求到登录之后的页面带上cookie、session的坏处一套cookie和session往往和一个用户对应,请求太快,请求次数太多,容易被服务器识别为爬虫如果不需要cookie的时候尽量不去使用cookie**requests 处理cookies、session请求
**
reqeusts 提供了一个session类,来实现客户端和服务端的会话保持使用方法实例化一个session对象让session发送get或者post请求语法session=requests.session()response=session.get(url,headers)示例import requestsheaders={ user-agent:mozilla/5.0 (windows nt 6.1; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/86.0.4240.111 safari/537.36}data={ email:用户名, password:密码}session=requests.session()# session发送post请求,cookie保存在其中session.post(http://www.renren.com/plogin.do,data=data,headers=headers)# 使用session请求登录后才能访问的页面r=session.get(http://www.renren.com/976564425,headers=headers)print(r.content.decode())

我国工业机器人领域也有望率先在控制器这一关键零部件上取得重要突破
马化腾在南方日报撰文:聚焦新基建,抢占大湾区数字经济发展先机
新能源线束合理化设计与布置方案
荣耀智慧屏PRO搭载鸿鹄818智慧芯片屏占比为94%
解读TI 70W BLDC电机驱动器:小尺寸、低噪声是如何实现的?
Python-爬虫开发01
夏普手机将会在春分回归?今后将独占IGZO屏幕
人工智能与文艺的新形态是怎样的
回流焊设备常见故障及排除方法
如何用立式分布光度计来做配光曲线测试
手术机器人在国内的发展趋势
Banana Pi BPI-R3 Mini 介绍:一款小巧而强大的嵌入式路由器板
给大家介绍一种信号波峰波谷的检测方法
从本地部署到 AI 赋能,微软揭开产品现代化秘诀
双十二来临,你不可错过的华为最美手机
LED发光手写笔DIY自制
一种具有高度柔性与可塑性的超香肠覆盖式神经元模型
粉碎机的常见机械故障及排除-风电大部件故障诊断
解析三种嵌入式系统控制电路设计
TC3xx芯片时钟系统的时钟源详解