html零基础入门教程(零基础小白如何在最短的时间快速入门python爬虫)

建站教程 2年前 (2023) admin
132 0

零基础小白如何在最短的时间快速入门python爬虫

答:本文邀请feifan来回答,他总结了使用python自带库完成爬虫的方法,并且列出了爬虫在实际中可能遇到的几个问题, 教会你零基础入门python爬虫~此处的爬虫并不是百度或者google这样需要沿着某条路径采集互联网上所有信息的机器人,而是针对某个特定的网页,从中提取出我们需要的信息。比如我们在中关村上查到了一台手机的详情页,想把其中的cpu信息、操作系统、分辨率等等字段提出出来。即此处的爬虫是指针对特定网页结构、规模很小、抓取路径收敛的情况而言。下文我们以一个实例,看看如何从头写一个python爬虫。抓取页面基本方法浏览器中看到的页面,实际上是通过一系列的http请求加载并渲染服务器的资源。同理只要我们能够用python发出http请求,通过get或post的方法获得服务器返回的html片段、html页面或json数据串,就可以从中抓取到想要的内容。python中对http请求的封装是在urllib和urllib2两个库里。urllib提供了一些工具方法,用于对发送请求时的字符串进行转义或编码。发送get/post请求则需要用到urllib2中提供的几个类在掌握了如何在python中构造http请求后,下一步需要做的就是结合具体的网页,分析出web页面的请求、参数传递和必要的header信息(如cookie等)。chrome控制台的network分析基本上可以满足需求,但一款抓包利器无疑可以提升我们的效率。推荐使用fiddler进行抓包和解包,可以更清晰第看到http中所用的不同请求。字符串查找、正则表达式、html解析http请求的response通常包含两种:json字符串,或html代码片段,信息的提取就转变成了字符串处理。此时无论是通过字符串查找、正则表达式匹配,只要能定位到目标字段即可。但更好的方法是对html的Dom树进行解析,尤其是存在多个目标字段需要抓取时,解析html的能够对特殊格式的字段信息进行批量解析。这里使用python自带的htmlparser进行解析,htmlparser对html片段进行深度优先的遍历,在遍历的过程中可以识别出开始标签、结束标签和标签中的内容,因此提供了一种基于标签tag的编程。看下面的例子需要提取手机的操作系统、核心数、cpu型号等信息,根据html的标签、属性名称,代码如下:针对中关村上的某个手机详细handle_data可以提取html标签中的数据,但handle_data存在两个问题。(1)当标签内容为空时,handle_data自动跳过该标签。这里的标签为空是指标签中不包含任意字符串内容、不包含其他的子标签。注意,当标签中含有&nb等空白字符串时,handle_data可以解析出其中的data。比如以下结构中,号码一列允许为空,通过html_parser解析后只得到4个的标签内容。由于会跳过内容为空的标签的解析,就会打乱html的结构,由于数据的缺失返回的list长度不定,导致无法将list中每项内容与html中的内容对应起来。(2)标签中包含子标签时,内容会被分割到不同的handle_data函数中,比如由于handle_data是针对每个标签返回数据,以上的td里包含了一个span子标签,handle_data分为2次返回数据。即第一次调用handle_data返回状态:,第二次调用handle_data返回已拒绝。我们希望标签中的内容作为整体返回,而现在被分割成了两块,同样会破坏结构。解决以上两个问题的关键方法在于,使用cache缓存字符串,把对数据的处理从handle_data推迟到handle_endtag。只有遇到end_tag时,才能确定标签闭合,使数据完整。爬虫被屏蔽后怎么办服务器会通过一些策略屏蔽恶意爬虫,以避免对服务器资源的消耗,如检查同一IP的访问频率、访问间隔等。所以我们也应该使用一些简单策略,使我们的爬虫看起来更像是人的行为,以绕开服务器的检测机制。常用的方法包括延长相邻请求的间隔,相邻间隔使用随机时长。在请求的header字段中包含了user-agent字段,服务器通过检测user-agent字段确定客户端的类型。如果不指定user-agent字段,请求时脚本会默认填充该字段,如下图# python中默认的user-agent字段网上有一些说法user-agent的值会影响爬虫是否能够抓取web内容,为了避免爬虫被屏蔽,将user-agent的值设为浏览器的类型:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36但在实际抓取的几个web站点中,user-agent的值对爬虫被屏蔽没有影响,在使用时不用刻意设置user-agent的值。以上的方法都是避免爬虫被屏蔽掉。但万一很不幸爬虫已经被屏蔽了,发出请求返回的结果是输入验证码的页面,此时该如何解决呢?对于支持https协议的站点,此时可以尝试的一种方案是:改用https协议。项目中遇到爬虫被百度屏蔽的现象,尝试了很多方法都无效。后来将原来链接中的http协议换成https爬虫又开始工作了。原理虽然不清楚,但简单可行。带验证码的登录很多web内容只有在登录后才有权限访问,服务器通过创建session并下发sessionid来维持与客户端的链接状态。客户端在每次发送请求时,都在cookie中携带sessionid等字段信息。sessionid是无法复用的,也即在浏览器中登录后所获得的sessionid直接拿到python脚本中使用,返回的结果仍然是跳转到登录页面的。因为通过http下发的sessionid是到端口号的,也就是与服务器维持通信的是客户端上的某个进程,把浏览器中的sessionid拿到python脚本中,由于更换了进程sessionid当然失效了。既然无法绕开登录,我们就在python脚本中完成登录的过程,拿到登录后返回的cookie、sessinoid等。这里有两个难点需要解决,1)服务器登录逻辑的分析与猜测;2)解决登录时存在的验证码识别问题。登录除了需要post提交用户名、密码和sessionid之外,通常也会隐式提交部分参数,可以用chrome浏览器的调试模式查看post提交的参数及对应的值,登录成功之后,我们就可以拿到返回的cookie值了。登录时的验证码可以通过OCR自动识别,尝试了google的tesseract-ocr准确率并不高。所以推荐手动输入验证码,帮助爬虫完成登录,毕竟授权只需要一次输入。手动输入验证码的思路如下,在请求sessionid的同时保存验证码的图片,人工读取验证码的内容,与username和password一起提交。示例代码如下:需要抓取javascript加载的结果详细参考外部链接:-guide-for-scraping-javascript-rendered-web-pages/这篇文章中的思路是,通过使用web kit library建立本地的javascript执行环境,模拟浏览器对页面的加载渲染,从而抓取javascript处理后的页面内容。这个例子中javascript所加载的结果,也是通过ajax重新向服务器发起请求返回的,直接发送ajax请求并抓取结果即可。在本地搭建javascript的执行环境有些画蛇添足,但也是一种可以参考的思路。本文总结了使用python自带库完成爬虫的方法,并且列出了爬虫在实际中可能遇到的几个问题,比如爬虫被屏蔽、需要输入验证码进行登录等。实践中的难点在于分析和猜测服务器的登录逻辑,并且提取必需的参数完成登录鉴权。

新手零基础如何买基金

请问新手零基础如何买基金?

零基础入门学电脑,电脑打字符号怎么输入

零基础学习电脑打字符号输入,可以从最基本的按键原理开始学习,比如先学习标准键盘的组成,像字母键、数字键、方向键、功能键、空格键等,然后学习如何把这些键结合起来输入不同的字符号,一般情况下,大多数字符号都是Shift、Ctrl、Alt键组合使用,比如@符号,就是 Shift + 2 ,另外,特殊的字符号如#、$、&等,就需要在按键上加上Alt键,比如#符号,就是 Alt + 3 。另外,在输入字符号的时候,还需要注意不同的输入法和输入语言,比如英文输入法和拼音输入法,输入的字符号也可能不一样。

零基础接触互联网好入门吗

还算是比较好入门的,不过学习方向要正确,比如你可以学习网页开发、网站建设、小程序开发这种偏应用型的就比较简单。比较推荐学的编程语言有JavaScript、PHP、Python,集中两天的时间来学就可以大致了解,集中时间学十天就能做出一些东西来。

初学javascript如何用好prototype

首先,确认对JS对象和类的概念有足够的理解。给出任何一个类图,能自己写出对象,及其属性与方法。其次,理解继承和原型链。多着手一些最佳实践模式,参考:-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_c-object-creation-patterns-and-best-practices-558.html尽量不要改动原生JS的原型链。

相关文章