当前位置:首页 > 数据库 > 正文

python爬虫成品代码(爬虫python软件)

python爬虫成品代码(爬虫python软件)

其实python爬虫成品代码的问题并不复杂,但是又很多的朋友都不太了解爬虫python软件,因此呢,今天小编就来为大家分享python爬虫成品代码的一些知识,希望可以帮...

其实python爬虫成品代码的问题并不复杂,但是又很多的朋友都不太了解爬虫python软件,因此呢,今天小编就来为大家分享python爬虫成品代码的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

零基础小白如何在最短的时间快速入门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个<td>的标签内容。

由于会跳过内容为空的标签的解析,就会打乱html的结构,由于数据的缺失返回的list长度不定,导致无法将list中每项内容与html中的内容对应起来。

(2)标签中包含子标签时,内容会被分割到不同的handle_data函数中,比如

由于handle_data是针对每个标签返回数据,以上的td里包含了一个span子标签,handle_data分为2次返回数据。即第一次调用handle_data返回状态:,第二次调用handle_data返回已拒绝。我们希望<td>标签中的内容作为整体返回,而现在被分割成了两块,同样会破坏结构。

解决以上两个问题的关键方法在于,使用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(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/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加载的结果

详细参考外部链接:https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/

这篇文章中的思路是,通过使用webkitlibrary建立本地的javascript执行环境,模拟浏览器对页面的加载渲染,从而抓取javascript处理后的页面内容。

这个例子中javascript所加载的结果,也是通过ajax重新向服务器发起请求返回的,直接发送ajax请求并抓取结果即可。在本地搭建javascript的执行环境有些画蛇添足,但也是一种可以参考的思路。

本文总结了使用python自带库完成爬虫的方法,并且列出了爬虫在实际中可能遇到的几个问题,比如爬虫被屏蔽、需要输入验证码进行登录等。实践中的难点在于分析和猜测服务器的登录逻辑,并且提取必需的参数完成登录鉴权。

你觉得可以用python爬虫做哪些有意思的事情

当然是批量下载B站视频啦,主要分为2步,首先爬取视频url地址,然后根据url地址下载视频,下面我简单介绍一下实现过程,实验环境win10+python3.6+pycharm5.0,主要内容如下:

这里为了更好的说明实验过程,以爬取B站的TED演讲为例,如下:

1.首先,爬取视频的url地址信息,B站视频的信息是动态加载的,存储在一个json文件中,所以需要进行抓包分析,按F12调出开发者,F5刷新页面,查看所有抓包信息,如下,可以看到json格式加载的视频信息:

2.接着就是获取上面的json文件,解析这个json文件,提取到我们所需要的视频信息,这里主要是获取到url地址信息,代码如下,主要用到requests和json这2个模块,其中requests用于获取json文件,json用于解析json文件:

运行程序,效果如下,已经成功获取到视频信息:

3.最后就是根据视频url地址批量下载视频了,这里主要用到you-get这个模块,安装的话,直接在cmd窗口输入命令“pipinstallyou-get”就行,基本使用方式“you-get视频URL地址-o视频存放目录”,这里我们直接使用os.system执行这个命令就行,主要代码如下,非常简单:

运行程序,截图如下,已经开始下载视频:

接着打开对应的视频存放目录,就可以看到正在下载的文件,如下:

至此,我们就完成了利用python爬取并批量下载B站视频。总的来说,整个过程非常简单,就是步骤有些繁琐,只要你有一定的python爬虫基础,熟悉一下上面代码,多调试几遍程序,很快就能掌握的,网上也有相关教程和资料,非常丰富详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

Python爬虫如何写

Python的爬虫库其实很多,像常见的urllib,requests,bs4,lxml等,初始入门爬虫的话,可以学习一下requests和bs4(BeautifulSoup)这2个库,比较简单,也易学习,requests用于请求页面,BeautifulSoup用于解析页面,下面我以这2个库为基础,简单介绍一下Python如何爬取网页静态数据和网页动态数据,实验环境win10+python3.6+pycharm5.0,主要内容如下:

Python爬取网页静态数据

这个就很简单,直接根据网址请求页面就行,这里以爬取糗事百科上的内容为例:

1.这里假设我们要爬取的文本内容如下,主要包括昵称、内容、好笑数和评论数这4个字段:

打开网页源码,对应网页结构如下,很简单,所有字段内容都可以直接找到:

2.针对以上网页结构,我们就可以编写相关代码来爬取网页数据了,很简单,先根据url地址,利用requests请求页面,然后再利用BeautifulSoup解析数据(根据标签和属性定位)就行,如下:

程序运行截图如下,已经成功爬取到数据:

Python爬取网页动态数据

很多种情况下,网页数据都是动态加载的,直接爬取网页是提取不到任何数据的,这时就需要抓包分析,找到动态加载的数据,一般情况下就是一个json文件(当然,也可能是其他类型的文件,像xml等),然后请求解析这个json文件,就能获取到我们需要的数据,这里以爬取人人贷上面的散标数据为例:

1.这里假设我们爬取的数据如下,主要包括年利率,借款标题,期限,金额,进度这5个字段:

2.按F12调出开发者工具,依次点击“Network”->“XHR”,F5刷新页面,就可以找到动态加载的json文件,具体信息如下:

3.接着,针对以上抓包分析,我们就可以编写相关代码来爬取数据了,基本思路和上面的静态网页差不多,先利用requests请求json,然后再利用python自带的json包解析数据就行,如下:

程序运行截图如下,已经成功获取到数据:

至此,我们就完成了利用python来爬取网页数据。总的来说,整个过程很简单,requests和BeautifulSoup对于初学者来说,非常容易学习,也易掌握,可以学习使用一下,后期熟悉后,可以学习一下scrapy爬虫框架,可以明显提高开发效率,非常不错,当然,网页中要是有加密、验证码等,这个就需要自己好好琢磨,研究对策了,网上也有相关教程和资料,感兴趣的话,可以搜一下,希望以上分享的内容能对你上有所帮助吧,也欢迎大家评论、留言。

python爬虫怎么采集抖音产品销量数据

回答如下:要采集抖音产品销量数据,需要进行以下步骤:

1.分析抖音产品页面的HTML结构,找到包含销量数据的元素。

2.使用Python的爬虫框架(如Scrapy、BeautifulSoup等)向抖音产品页面发送请求,获取页面HTML代码。

3.解析HTML代码,提取出销量数据。

4.将销量数据存储到数据库或CSV文件中。

需要注意的是,抖音是一个社交媒体平台,涉及到用户隐私和版权问题,因此在进行爬虫采集时需要遵守相关法律法规和抖音平台的规定,不得侵犯他人权益。

Python爬虫是如何获取JS、生成URL和网页内容的

chrome出了headless浏览器,无头就是没有界面,据说出了这东西后phantomjs都宣布停止更新了,不过phantomjs还是能用的,也是headless浏览器。要不直接上selenium+chrome也行

好了,关于python爬虫成品代码和爬虫python软件的问题到这里结束啦,希望可以解决您的问题哈!

最新文章