爬虫 404 try_Python爬虫MOOC笔记

写在前面的小于碎碎念

最近在学习Python爬虫内容,其实很多知识在网上搜索一下都能查到,但是作为自己的一种学习记录,也是回顾与复习呀。

这种东西真的变化超级快,以前可以直接爬取的内容,现在很多网站都增加了反爬机制,报错家常便饭TAT,常常觉得自己是bug生产机,不过毕竟前人栽树后人乘凉,大多数问题都可以通过检索得到解决,能成功解决问题也是成就感的来源之一呢~

总结来说爬虫是从网络获取信息、解析信息并最终输出为需要格式的过程。

说起来也挺有意思的,用公众号顺带掌握了一波公共号排版和插入代码的小技巧哈哈。好啦,那我们一起开始叭!

以下内容主要来源于中国大学MOOC--Python网络爬虫与信息提取--北京理工大学。仅供个人学习使用。(代码部分可右滑阅读全部内容)

需要有Python基础知识才能看懂哦~不然就跟第一次接触的我一样,全程听天书QAQ

思维导图

5827298a7e0aaeacf2c338c1f9d91585.png

第一周 网络爬虫规则

1.1Request库入门

Request库的安装

需要安装request库,判断安装情况:code返回200说明成功

 import requests
r = requests.get("https://www.baidu.com")
print(r.status_code)
r.encoding = 'utf-8'
print(r.text)
request库7个主要方法
方法说明
requests.request()构造一个请求,支撑以下个方法的基础方法
requests.get()获取HTML网页的主要方法,对应于HTTP的GET
requests.head()获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete()向HTML网页提交局部删除请求,对应于HTTP的PDELETE

Request库的get()方法

r = request.get(url) 通过get(url)构造一个向服务器请求资源的Request对象 request.get是返回一个包含服务器资源的Response对象

完整形式

 r = request.get(url,params=None,**kwargs) 

url:拟获取页面的url链接 

(个人理解url是网页访问地址https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_URL)

params:url中的额外参数,字典或字节流格式,可选

**kwargs:12个控制访问的参数

response对象的属性
属性说明
r.status_codeHTTP请求的返回状态,200表示连接成功,404失败
r.textHTTP相应内容的字符串形式,即url对应的页面内容
r.encoding从HTTP header中猜测的响应内容编码方式
r.apparent_encoding从内容中分析的响应内容编码方式(备选编码方式)
r.contentHTTP响应内容的二进制方式

r.status_code(200)→r.encoding/r.apparent_encoding/r.content

r.encoding: 若header中不存在charset,则认为编码为ISO-8859-1

个人理解,encoding是从head中charset部分提取得到的编码方式,而apparent_encoding是根据整体内容分析得到的编码方式,因此更为准确,但同时速度可能慢一些

爬取网页的通用代码框架

request库异常
异常说明
requests.ConnectionError网络连接错误异常,如DNS查询失败、拒绝连接等(仅限连接时的异常)
requests.HTTPErrorHTTP错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects超过最大重定向次数,产生重定向异常
requests.ConnectTimeout连接远程服务器超时异常
requests.Timeout请求URL超时,产生超时异常(整个过程)

 r.raise_for_status() 判断返回的类型是否是200,是的话说明返回内容正常,否则产生异常requests.HTTPError

通用代码框架:

import requests
def getHTMLTEXT(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
url = "https://www.baidu.com"
print(getHTMLTEXT(url))

使得爬取网页更加稳定、有效、可靠

HTTP协议及Request库方法

HTTP,Hypertext Transfer Protocol,超文本传输协议。

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议。用户发起请求,服务器做出响应。无状态指不同次数之间的访问没有相互关联。HTTP协议采用URL作为定位网络资源的标识。

URL格式:http://host[:port][path]

host:合法的Internet主机域名或IP地址

port:端口号,默认端口为80

path:内部路径

url是通过HTTP协议存取资源的一个路径(类似电脑中对应的文件夹路径,但此路径再Internet上),每一个url对应一个数据资源

(URL定义参考                    https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL)

方法说明
GET请求获取URL位置的资源
HEAD请求获取URL位置资源的头部信息
POST请求向URL位置的资源后附加新的数据
PUT请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE请求删除URL位置存储的资源

云端上的所有资源通过URL进行标识,通过GET\HEAD获得资源,通过PUT\POST\PATCH\DELETE对云端资源进行修改(每一次操作独立无状态的)

PATCH\PUT区别:

 用PATCH只需要改变一个地方的内容,PUT要将改变的内容及其他未改变内容一并提交。PATCH优点是节省网络带宽。HTTP协议与request库方法是一致的。

POST方法 提交列表,会默认进入form中;提交字符串,默认编码为data PUT类似

request库主要方法解析

向URL POST一个字典,自动编码为表单(form),POST一个字符串,自动编码为data

requests.request(method,url,**kwargs)

method:请求方式,对应get等7种

url:拟获取页面的URL链接

**kwargs:控制访问的参数,共13个

可选参数:
  • params:字典或字节序列,作为参数增加到url中 相当于筛选资源

  • data:字典、字节序列或文件对象,作为request的内容 理解是把内容存储到对应的url中

  • json:JSON格式的数据,作为内容部分可以向服务器提交

  • headers:字典,HTTP定制头 访问时的头字段 可以模拟浏览器向服务器中发起访问

  • cookies:字典或CookieJar,request中的cookie

  • auth:元组,支持HTTP认证功能

  • files:字典类型,传输文件 向链接提交文件

  • timeout:设定超时时间,以秒为单位

  • proxies:字典类型,设定访问相关的代理服务器,可以增加登录认证 例如访问百度时可以采用代理服务器的地址,隐藏源地址(感觉有点像VPN的道理)

  • allow_redirects:True/False,默认为T,重定向开关 是否允许重定向

  • stream:True/False,默认为T,获取内容立即下载开关

  • verify:True/False,默认为T,认证SSL证书开关

  • cert:保存本地SSL证书路径的字段(不详细介绍)

小结:对网络爬取,主要关注get和head即可。

课后练习1:成功爬取网页100次并测试时间

import requests as rq
import time
def gethtml(url):
    try:
        r = rq.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r
    except:
        return '爬取失败'
if __name__ == '__main__': # 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。
    start = time.perf_counter()
    url = 'http://baidu.com'
    for i in range(100):
        gethtml(url)
        end = time.perf_counter()
    print('一百次爬取时间为{:.2f}秒'.format(end-start)) #保留两位小数

time.perf_counter() # 调用一次 perf_counter(),从计算机系统里随机选一个时间点A,

计算其距离当前时间点B1有多少秒。当第二次调用该函数时,默认从第一次调用的时间点A算起,

课后练习2:获得GitHub的小图标

import requests as rq
r= rq.get("https://github.com/favicon.ico")
with open('favicon.ico','wb') as f: #favicon.ico,文件名称 wb 读写方式
    f.write(r.content)
wb以二进制格式打开一个文件只用于写入。open函数介绍https://www.runoob.com/python/python-func-open.html

用Session可以模拟同一个对话而维持cookies,常用于模拟登陆成功后的下一步操作。对显示证书错误的页面,可以通过设置verify参数为false,并用disable_warnings等方法屏蔽证书错误警告。可用proxies参数设置代理。

参考资料

作业代码参考https://developer.aliyun.com/article/637534

对time.perf_counter()理解https://www.runoob.com/note/35499

对if __name__ == '__main__'理解https://blog.konghy.cn/2017/04/24/python-entry-program/?spm=a2c6h.12873639.0.0.7928184dD8jlCj

对format函数的理解https://www.runoob.com/python/att-string-format.html

排版 135编辑器

代码在线编辑网站:http://md.aclickall.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调用c++_python高性能编程之Cython篇 第一章

第一节 cython的潜能•Cython是一种编程语言,它将Python与C和C 的静态类型系统相结合。•Cython是一个将Cython源代码转换为高效的C或C 源代码的编译器。然后可以将此源代码编译为Python扩展模块或独立可执行文件。Cython的强大功能来自它结合了Python和C的方式&…

oracle获取序列并赋值,Oracle中序列的使用

数据库设计的三大范式第一条就是独立的表结构中必须有唯一主键来标识表中数据.在以往微软的SQL Server(duo版本)平台上.手动编码实现表中主键.并设定为自增列是极其简单.编码如下:typeidintnotnullprimarykeyidentity(1,1),在Oracle 10G中关于序列(Sequence)的使用.(A)Sequence…

oracle序时账是什么,序时账和明细账区别是什么

序时账和明细账区别:一、定义不同:1、明细账也称明细分类账,是根据总账科目所属的明细科目设置的,,用于分类登记某一类经济业务事项,提供有关明细核算资料。2、而序时账了,也称日记账,是指按照经济业务发生…

ui li 菜单 点击添加下级_【Qt开发】实现系统托盘,托盘菜单,托盘消息

概述系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。演示Demo实现功能:1.应用启动后,任…

5g通用模组是什么_中国移动联合芯讯通发布5G终端、芯片及测试产业报告

11月19日,2020中国移动全球合作伙伴大会以“5G融入百业 数智引领未来”为主题在广州召开,从多个维度展现了中国移动运用5G技术驱动各行业转型升级的强大实力。并于21日在展会现场发布了《5G终端、芯片及测试产业报告》。5G终端、芯片及测试产业报告发布现…

dell网卡linux驱动,DELL R710 服务器 Linux 系统网卡驱动安装

DELL R710在装完AS4U7版本的Linux后发现,网卡没有识别出来。怀疑是网卡驱动没有装上,打电话给DELL的工程师,得到的答复是装系统前必须用随机带的引导盘来安装才能将网卡驱动装上。现在系统已经装完了,总不能重装一遍吧&#xff0c…

博客网站源代码_详解SEO布词以及网站排名优化技巧

首先,谈谈新手以及老手在认知上容易出现的SEO误区,我认为有以下几点因素,不容忽视。1、SEO优化就是为了排名、就是发外链不少人认为做SEO就是为了排名,完全不考虑网站文章的质量、可读性以及用户体验,甚至不惜使用一些…

惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开

2020年,可以说是英特尔最难受的一年,多年来的挤牙膏大法也不灵了,面对AMD更先进的7mm制程以及更多的线程数,加上本身更合理的售价,说实话就连一向占据处理器半壁江山的英特尔也感受到了很高的威胁。AMD撕裂者系列发布以…

linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...

压测工具其它有用工具在这里,我们会讨论主要的压力测试工具,选择合适的压测工具,才能准确衡量系统性能。好的压测工具有很多,可能的功能如下:发起压力监控性能监控系统使用率生成报告基准测试无非就是看系统能力是否达…

斐讯n1刷linux服务器,斐讯N1刷机Linux(Armbian)

一、降级N1打开ADB链接开始降级。降级后版本号不变二、第三方固件依然是上面的链接(官改v2.2)USB双头线链接HDMI借口最近的USB和电脑的USB进入线刷模式(电视不会显示任何东西,但是电脑会显示设备已连接)。打开上面的刷机工具刷入官改v2.2。理论刷完后重启即可进入安…

在linux cuda安装教程,Ubuntu20.04安装cuda10.1的步骤(图文教程)

安装前准备cuda的主要用途是深度学习,而目前主流的深度学习框架tensorflow2最高支持cuda 10.1,因此本文讲解在ubuntu 20.04系统上安装cuda 10.1的主要过程。首先要查看你的nvidia显卡驱动是否支持cuda10.1版本。在终端执行以下命令:nvidia-sm…

代码重构的方法和经验_关于烂代码优化重构的几点经验

是否已经读过前面两篇关于烂代码和好代码的文章?这些让人抓狂的烂代码,你碰到几种?什么才是好代码、高质量代码?工作中,总会不可避免的接触到烂代码,就像之前说的,几乎没有程序员可以完全避免写…

moodle环境安装linux,在Ubuntu 18.04/Debian 9上安装Moodle的步骤

本文介绍在Ubuntu 18.04/Debian 9系统上安装Moodle的的详细步骤,需要准备PHP、Apache/Nginx Web服务器及MySQL/MariaDB数据库。简介Moodle是一个免费的开源学习管理系统,用PHP编写,并在GNU通用公共许可证下发布。从Moodle创建学习课程&#x…

linux跨版本升级,深度Deepin系统支持跨版本升级

很多以前安装有深度Deepin系统的用户提问,我使用的是Deepin 15.4或者是15.5、15.6版本能不能升级到Deepin 15.8,答案是能。深度Deepin系统是支持跨版本升级的,而不限于从Deepin 15.7升级到Deepin 15.8。在控制中心的更新选项中如果有新系统版…

正态分布概率表_三、统计概率思维

一、误差思维(只要有估计,就会有误差)1.误差永远存在,并且不可避免。2.多次测量用平均值的统计方式取得结果,尽量避免偶然因素的影响。二、置信区间(误差范围)1.统计学最核心思想:用…

高等数学同济第七版上册电子版_高等数学同济第七版(上册)第一章答案

第一章答案(猴博土高数不挂科视频可以联系公众号获取关于本书:《高等数学(第七版)》是同济大学数学系在第六版的基础上修订的。第七版修订遵循“坚持改革、不断锤炼、打造精品”的要求,对第六版中个别概念的定义,少量定理、公式的证明及定理的…

linux性能记录,Linux性能记录

说到一台Linux服务器的性能,大部分人关注的指标如下:CPU利用率,CPU LOAD,内存利用率,磁盘I/O等待率,网络带宽使用率。Jmeter作为性能测试的强大工具,在其插件JMeterPlugins-Standard和JMeterPlu…

linux gpu 电脑推荐,System76推出具有RTX GPU更大显示器的Oryx Pro Linux笔记本电脑

美国计算机制造商System76今天推出了更新版的Oryx Pro旗舰Linux笔记本电脑,采用了英特尔和Nvidia的最新技术,以及更大的显示器。Oryx Pro笔记本电脑已经更新了更新的图形和升级组件。继最近更新的System64的“Darter Pro”和“Serval WS”Linux笔记本电脑…

linux 管道 top,linux IPC总结——管道

管道管道是unix ipc的最古老形式,是一种在内存中的特殊文件,只能在具有公共祖先的进程之间使用(即父子进程,兄弟进程)。管道由pipe函数创建#include int pipe(int fd[2])fd[1]写,fd[0]读。单个进程的管道几乎没有任何用处&#xf…

p图软件pⅰc_惊爆软件:王者荣耀P图大神,助力少年国服梦

每天为大家推荐精品软件,实用网站,玩机技巧等。如果出现资源失效或者其他问题可以加官方群聊反馈。喜欢记得点赞关注转发支持下,每天为大家推荐不同的神器!01惊爆软件:王者荣耀P图大神,助力少年国服梦【软件名称】王者荣耀P图大神…