python抓取动态网页

python抓取动态网页

最专业的python入门学习课程抓取动态网页+数据可视化

网站优化优采云 发表了文章 • 0 个评论 • 29 次浏览 • 2022-09-11 19:01 • 来自相关话题

  最专业的python入门学习课程抓取动态网页+数据可视化
  
  python抓取动态网页+数据可视化,效果如下:python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程更多爬虫的学习资料,可以看看我之前的回答。我们学习爬虫,要掌握怎样的技能,才可以在众多同行竞争者中脱颖而出。
  
  从公开课中获取?可以从公开课中获取到比较好的资源呢?学习方法和学习方法,将会直接决定你是否能够持续地高效地学习。python网站爬虫,做爬虫,可以先从零基础学起,使用爬虫框架,activate等。这一步只是基础,通过后续的学习,将会达到高效的爬取效果。推荐书籍《python爬虫开发实战》,在一些爬虫的学习论坛也有相关分享,比如方凌老师。祝题主学习愉快~。
  爬虫简历很多,你说的这种是高级爬虫,一般有特定工作经验的会熟练使用爬虫框架gooseeker,不然看的话都是初级爬虫。uniqjs,web爬虫基础架构,flask,django都有案例爬虫代码。可以学着学着爬爬试试,这种案例很多,要么学得不知道咋写。从网站爬数据的话,用scrapy爬虫框架,可以学着看看实现一个独立的爬虫小项目。这种案例比较少。上边两本书推荐看scrapy官方文档,功能都列得很清楚。 查看全部

  最专业的python入门学习课程抓取动态网页+数据可视化
  
  python抓取动态网页+数据可视化,效果如下:python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程更多爬虫的学习资料,可以看看我之前的回答。我们学习爬虫,要掌握怎样的技能,才可以在众多同行竞争者中脱颖而出。
  
  从公开课中获取?可以从公开课中获取到比较好的资源呢?学习方法和学习方法,将会直接决定你是否能够持续地高效地学习。python网站爬虫,做爬虫,可以先从零基础学起,使用爬虫框架,activate等。这一步只是基础,通过后续的学习,将会达到高效的爬取效果。推荐书籍《python爬虫开发实战》,在一些爬虫的学习论坛也有相关分享,比如方凌老师。祝题主学习愉快~。
  爬虫简历很多,你说的这种是高级爬虫,一般有特定工作经验的会熟练使用爬虫框架gooseeker,不然看的话都是初级爬虫。uniqjs,web爬虫基础架构,flask,django都有案例爬虫代码。可以学着学着爬爬试试,这种案例很多,要么学得不知道咋写。从网站爬数据的话,用scrapy爬虫框架,可以学着看看实现一个独立的爬虫小项目。这种案例比较少。上边两本书推荐看scrapy官方文档,功能都列得很清楚。

python抓取动态网页视频-javascript和python视频视频教程(一)

网站优化优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-09-09 13:22 • 来自相关话题

  python抓取动态网页视频-javascript和python视频视频教程(一)
  python抓取动态网页视频,从本期教程开始,会对python自带的一些调用接口实现对动态网页的抓取。接下来的第一期,python和python抓取视频教程将会是对javascript简单入门。javascript入门本篇主要介绍ie浏览器的抓取过程。常用session、cookie的使用不做赘述,网上相关文章很多。
  
  接下来则会从页面路径的获取和抓取过程展开,最后介绍如何显示网页。(一)页面路径的获取传统的抓取办法大致分为以下几类:读取一个文件的dom,然后逐个selectdom来读取内容写入一个文件,然后逐个selectdom来读取内容读取页面的javascript代码,然后写入页面。读取页面javascript代码读取页面的javascript代码读取页面javascript代码varresult=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text);javascript.setattribute('text','h1""");javascript.setattribute('text','javascript:""");javascript.setattribute('text','h1""");然后,通过设置javascript标签的属性,再找到对应的方法,然后写入网页。
  
  varresult1=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text"""');javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','"h1""");(二)javascript抓取整个网页浏览器本身是无法抓取整个页面的,只能抓取局部。
  所以通过对某一网页上的javascript代码进行批量抓取以实现抓取整个网页。这里介绍一种通过定制javascript模块的方式实现对整个页面的抓取。首先,写一个工具类:executionchannel,代码如下:importurlfrom'executionchannel';importrequestfrom'request';importjqueryfrom'jquery';importxhrfrom'xhr';importrefrom'request/request';importxmlhttprequestfrom'xmlhttprequest';importcookiefrom'cookie';importproxyfrom'proxy';importp。 查看全部

  python抓取动态网页视频-javascript和python视频视频教程(一)
  python抓取动态网页视频,从本期教程开始,会对python自带的一些调用接口实现对动态网页的抓取。接下来的第一期,python和python抓取视频教程将会是对javascript简单入门。javascript入门本篇主要介绍ie浏览器的抓取过程。常用session、cookie的使用不做赘述,网上相关文章很多。
  
  接下来则会从页面路径的获取和抓取过程展开,最后介绍如何显示网页。(一)页面路径的获取传统的抓取办法大致分为以下几类:读取一个文件的dom,然后逐个selectdom来读取内容写入一个文件,然后逐个selectdom来读取内容读取页面的javascript代码,然后写入页面。读取页面javascript代码读取页面的javascript代码读取页面javascript代码varresult=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text);javascript.setattribute('text','h1""");javascript.setattribute('text','javascript:""");javascript.setattribute('text','h1""");然后,通过设置javascript标签的属性,再找到对应的方法,然后写入网页。
  
  varresult1=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text"""');javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','"h1""");(二)javascript抓取整个网页浏览器本身是无法抓取整个页面的,只能抓取局部。
  所以通过对某一网页上的javascript代码进行批量抓取以实现抓取整个网页。这里介绍一种通过定制javascript模块的方式实现对整个页面的抓取。首先,写一个工具类:executionchannel,代码如下:importurlfrom'executionchannel';importrequestfrom'request';importjqueryfrom'jquery';importxhrfrom'xhr';importrefrom'request/request';importxmlhttprequestfrom'xmlhttprequest';importcookiefrom'cookie';importproxyfrom'proxy';importp。

【自学Python】书笔记 26Python动态Web开发基础

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2022-08-26 05:32 • 来自相关话题

  【自学Python】书笔记 26Python动态Web开发基础
  一、Python动态Web开发基础
  从软件的应用领域划分,通常将软件分为桌面软件、Web软件和移动软件三大类。
  在计算机软件开发应用中,Web软件开发是最常见的一种典型应用,特别是随着动态网站的不断发展,Web编程已经成为程序设计中的最重要应用领域之一。
  在当今Web开发技术条件下,最主流的Web编程技术主要有ASP.NET、PHP、Java等。
  作为一门功能强大的面向对象编程语言,Python语言也可以像其他经典开发语言一样用来开发Web应用程序。
  二、Python CGI编程
  CGI是Common Gateway Interface的缩写,表示通用网关接口。
  CGI是一段运行在服务器上的程序,例如运行在HTTP服务器上提供同客户端HRML页面的接口。
  三、CGI介绍
  CGI是WWW技术中最重要的技术之一,有着不可替代的重要地位。
  CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
  CGI规范允许Web服务器执行外部程序,并将它们的输出发生给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  处理过程的第一步是Web服务器从客户端接到了请求(即GET或者POST),并调用相应的应用程序。
  然后它等待HTML页面,与此同时,客户端也在等待。
  一旦应用程序处理完成,它会将生成的动态HTML页面返回服务器端。
  接下来,服务器端再将这个最终结果返回给用户。
  对于表单处理过程,服务器与外部应用程序交互,受到并将生成的HTML页面通过CGI返回客户端。
  (感觉就是“电话通讯”的原理,这边发生数据到服务器,而服务器作为“中介传话筒”,或者说是单纯的“人机对话”?总之,在打通“连接”后,剩下的依旧是类似本地的数据操作了。)
  由此可见,CGI在Web服务器和应用之间充当了交互作用,这样才能够处理用户表单,生成并返回最终的动态HTML页。
  四、搭建CGI服务器
  要像使用Python语言进行CGI开发,首先需要安装一个Web服务器,并将其配置成可以处理Python CGI请求,然后让Web服务器访问CGI脚本。
  当然,其中有些操作也许需要获得系统管理员的帮助。
  下面介绍在Windows系统中搭建CGI服务器的过程。
  在IDLE编辑器中,输入如下命令可以获取Python自带的服务器的地址。
  from http.server import CGIHTTPRequestHandler,test;test(CGIHTTPRequestHandler)
  在CMD控制台界面中,通过输入Python命令也可以获取Python自带服务器的地址。
  
  例如:
  python python的安装根路径\Python39_64\Lib\http\server.py
  其实找到该文件,双击运行也可以。
  不过还是建议安装一个真正的Web服务器,如Apache、ligHTTPD或thttpd。
  其中在Apache中有许多插件或模块可以处理PythonCGI,使用Apache服务器访问CGI的流程如下:
  1)自行安装好Apache(httpd)环境,确保Apache在系统中已经能成功运行并可以访问。
  网站:
  (下载的是本地压缩包,解压后选择一个地方存放。我这里为D:\Apache24)
  2)打开D:\Apache24\conf里面的httpd.conf文件。(以txt格式打开)
  使用Ctrl+F查找下面的内容。
  (1)找到
  Define SRVROOT "C:/Apache24"
  修改为:(这是Apache24文件位置)
  Define SRVROOT "D:/Apache24"
  (2)找到
  ScriptAlias /cgi-bin/ “${SRVROOT}/cgi-bin/”
  修改为:(这里应该是要调用的py文件根目录)
  ScriptAlias /cgi-bin/ "D:/c/cgi-bin"
  (3)找到
  Listen 80
  修改为:(这里是端口号,自定义)
  Listen 8080
  (4)找到
  
   AllowOverride None Options None Require all granted
  改成如下:(这是.py文件路径地址)
   AllowOverride None Options Indexes FollowSymLinks ExecCGI Require all granted Require host ip
  (5)找到下面的内容。
  添加.py 后缀:在 AddHandler 中添加 .py 后缀,这样就可以访问 .py 结尾的 python 脚本文件
  #AddHandler cgi-script .cgi
  去掉此行的“#”注释(如果有),在后面可以追加后缀“.py”,这是可选的。如果不加,也可以使用“.cgi”后缀。
  修改成:
  AddHandler cgi-script .cgi .pl .py
  (6)开启cgi_module modules/mod_cgi.so模块(即去掉模块前的注释#):
  LoadModule cgi_module modules/mod_cgi.so
  (7)在D:\Apache24\bin目录下,使用“httpd -k install”安装Apache主服务,然后输入“httpd –k start”开启Apache服务(管理员身份运行DOS)
  (因为我已经安装过了。)
  (8)双击ApacheMonitor.exe文件。
  (9)屏幕左下角会弹出图标,点击“start”进行启动。
  (10)输入localhost:8080后。
  (11)然而输入其具体文件却无法显示。
  翻译结果:
  被禁止的
  您没有访问此资源的权限。
  (可惜没找到解决办法。)
  具体请参考: 查看全部

  【自学Python】书笔记 26Python动态Web开发基础
  一、Python动态Web开发基础
  从软件的应用领域划分,通常将软件分为桌面软件、Web软件和移动软件三大类。
  在计算机软件开发应用中,Web软件开发是最常见的一种典型应用,特别是随着动态网站的不断发展,Web编程已经成为程序设计中的最重要应用领域之一。
  在当今Web开发技术条件下,最主流的Web编程技术主要有ASP.NET、PHP、Java等。
  作为一门功能强大的面向对象编程语言,Python语言也可以像其他经典开发语言一样用来开发Web应用程序。
  二、Python CGI编程
  CGI是Common Gateway Interface的缩写,表示通用网关接口。
  CGI是一段运行在服务器上的程序,例如运行在HTTP服务器上提供同客户端HRML页面的接口。
  三、CGI介绍
  CGI是WWW技术中最重要的技术之一,有着不可替代的重要地位。
  CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
  CGI规范允许Web服务器执行外部程序,并将它们的输出发生给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  处理过程的第一步是Web服务器从客户端接到了请求(即GET或者POST),并调用相应的应用程序。
  然后它等待HTML页面,与此同时,客户端也在等待。
  一旦应用程序处理完成,它会将生成的动态HTML页面返回服务器端。
  接下来,服务器端再将这个最终结果返回给用户。
  对于表单处理过程,服务器与外部应用程序交互,受到并将生成的HTML页面通过CGI返回客户端。
  (感觉就是“电话通讯”的原理,这边发生数据到服务器,而服务器作为“中介传话筒”,或者说是单纯的“人机对话”?总之,在打通“连接”后,剩下的依旧是类似本地的数据操作了。)
  由此可见,CGI在Web服务器和应用之间充当了交互作用,这样才能够处理用户表单,生成并返回最终的动态HTML页。
  四、搭建CGI服务器
  要像使用Python语言进行CGI开发,首先需要安装一个Web服务器,并将其配置成可以处理Python CGI请求,然后让Web服务器访问CGI脚本。
  当然,其中有些操作也许需要获得系统管理员的帮助。
  下面介绍在Windows系统中搭建CGI服务器的过程。
  在IDLE编辑器中,输入如下命令可以获取Python自带的服务器的地址。
  from http.server import CGIHTTPRequestHandler,test;test(CGIHTTPRequestHandler)
  在CMD控制台界面中,通过输入Python命令也可以获取Python自带服务器的地址。
  
  例如:
  python python的安装根路径\Python39_64\Lib\http\server.py
  其实找到该文件,双击运行也可以。
  不过还是建议安装一个真正的Web服务器,如Apache、ligHTTPD或thttpd。
  其中在Apache中有许多插件或模块可以处理PythonCGI,使用Apache服务器访问CGI的流程如下:
  1)自行安装好Apache(httpd)环境,确保Apache在系统中已经能成功运行并可以访问。
  网站:
  (下载的是本地压缩包,解压后选择一个地方存放。我这里为D:\Apache24)
  2)打开D:\Apache24\conf里面的httpd.conf文件。(以txt格式打开)
  使用Ctrl+F查找下面的内容。
  (1)找到
  Define SRVROOT "C:/Apache24"
  修改为:(这是Apache24文件位置)
  Define SRVROOT "D:/Apache24"
  (2)找到
  ScriptAlias /cgi-bin/ “${SRVROOT}/cgi-bin/”
  修改为:(这里应该是要调用的py文件根目录)
  ScriptAlias /cgi-bin/ "D:/c/cgi-bin"
  (3)找到
  Listen 80
  修改为:(这里是端口号,自定义)
  Listen 8080
  (4)找到
  
   AllowOverride None Options None Require all granted
  改成如下:(这是.py文件路径地址)
   AllowOverride None Options Indexes FollowSymLinks ExecCGI Require all granted Require host ip
  (5)找到下面的内容。
  添加.py 后缀:在 AddHandler 中添加 .py 后缀,这样就可以访问 .py 结尾的 python 脚本文件
  #AddHandler cgi-script .cgi
  去掉此行的“#”注释(如果有),在后面可以追加后缀“.py”,这是可选的。如果不加,也可以使用“.cgi”后缀。
  修改成:
  AddHandler cgi-script .cgi .pl .py
  (6)开启cgi_module modules/mod_cgi.so模块(即去掉模块前的注释#):
  LoadModule cgi_module modules/mod_cgi.so
  (7)在D:\Apache24\bin目录下,使用“httpd -k install”安装Apache主服务,然后输入“httpd –k start”开启Apache服务(管理员身份运行DOS)
  (因为我已经安装过了。)
  (8)双击ApacheMonitor.exe文件。
  (9)屏幕左下角会弹出图标,点击“start”进行启动。
  (10)输入localhost:8080后。
  (11)然而输入其具体文件却无法显示。
  翻译结果:
  被禁止的
  您没有访问此资源的权限。
  (可惜没找到解决办法。)
  具体请参考:

python抓取动态网页教程动态(实战_小白入门教程)

网站优化优采云 发表了文章 • 0 个评论 • 24 次浏览 • 2022-08-22 11:01 • 来自相关话题

  python抓取动态网页教程动态(实战_小白入门教程)
  python抓取动态网页教程python动态网页实战_小白入门教程python抓取动态网页教程,不过我觉得用java做的话完全可以抓取,可以拿java做数据分析,python做动态网页抓取就很容易,当然这是个人观点,
  
  爬去github的动态,基本上github是挂着的,只要想看,肯定有你想要的数据。什么微博微信淘宝知乎,肯定都是好使的。
  问题是只要能让前端实现。每天一个网页不算多,看看url地址抓数据就好了,再看看怎么解析重定向加载也不算很难。前端如果不是用python肯定也是可以顺手弄的,只要有对应的数据库罢了,就是麻烦点,不过如果想稍微完善点的话。
  
  可以有下面几种方法:用python来实现,比如selenium+phantomjs,直接给他发一个请求,然后他自己就会跳转到你想要爬取的页面了。当然,这样的话一个页面能爬取到的数据只有一部分。我个人不是特别推荐这种方法,毕竟要会用和懂思路,如果你有精力和时间的话,当然没问题了。用python或java来实现,这两种语言的库可以让你自己实现解析,这样页面获取的数据量就会少很多。
  还可以写一个爬虫来抓你爬取到的数据,不过这个需要你对数据分析,这个我没有尝试过,不过看官方的爬虫文档应该可以找到解决方案。看你的爬虫需求,如果只要完成爬取工作,解析也基本上是按照要求自己实现就好了。具体爬虫要怎么设计,这个要看具体情况了。反正解析这些页面你是可以写插件用来抓取页面。对于使用googleapi来爬取数据,这个需要你一定的英文知识和编程能力。
  爬取github上的全世界的css或者js文件,对于你这种对css和js有一定了解的人来说一点也不难,因为抓取规则都不难写。你的情况建议你用python解析js,并得到json文件,存入数据库,再用js来模拟点击的。最后上面两种方法我都不是特别推荐,数据量太大的话,爬虫编程并不简单,而且github上的数据量也不是特别大,一般都在千万级别。你可以考虑试试第三种方法,去他们开源的库里面抓取数据。 查看全部

  python抓取动态网页教程动态(实战_小白入门教程)
  python抓取动态网页教程python动态网页实战_小白入门教程python抓取动态网页教程,不过我觉得用java做的话完全可以抓取,可以拿java做数据分析,python做动态网页抓取就很容易,当然这是个人观点,
  
  爬去github的动态,基本上github是挂着的,只要想看,肯定有你想要的数据。什么微博微信淘宝知乎,肯定都是好使的。
  问题是只要能让前端实现。每天一个网页不算多,看看url地址抓数据就好了,再看看怎么解析重定向加载也不算很难。前端如果不是用python肯定也是可以顺手弄的,只要有对应的数据库罢了,就是麻烦点,不过如果想稍微完善点的话。
  
  可以有下面几种方法:用python来实现,比如selenium+phantomjs,直接给他发一个请求,然后他自己就会跳转到你想要爬取的页面了。当然,这样的话一个页面能爬取到的数据只有一部分。我个人不是特别推荐这种方法,毕竟要会用和懂思路,如果你有精力和时间的话,当然没问题了。用python或java来实现,这两种语言的库可以让你自己实现解析,这样页面获取的数据量就会少很多。
  还可以写一个爬虫来抓你爬取到的数据,不过这个需要你对数据分析,这个我没有尝试过,不过看官方的爬虫文档应该可以找到解决方案。看你的爬虫需求,如果只要完成爬取工作,解析也基本上是按照要求自己实现就好了。具体爬虫要怎么设计,这个要看具体情况了。反正解析这些页面你是可以写插件用来抓取页面。对于使用googleapi来爬取数据,这个需要你一定的英文知识和编程能力。
  爬取github上的全世界的css或者js文件,对于你这种对css和js有一定了解的人来说一点也不难,因为抓取规则都不难写。你的情况建议你用python解析js,并得到json文件,存入数据库,再用js来模拟点击的。最后上面两种方法我都不是特别推荐,数据量太大的话,爬虫编程并不简单,而且github上的数据量也不是特别大,一般都在千万级别。你可以考虑试试第三种方法,去他们开源的库里面抓取数据。

《零基础轻松入门python爬虫》之python抓取动态网页源码

网站优化优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-08-21 22:05 • 来自相关话题

  《零基础轻松入门python爬虫》之python抓取动态网页源码
  python抓取动态网页源码,实时监控并反馈到redis或者mongodb中。分页效果下面是爬取的几个例子关于python动态网页抓取,本小节重点讲解反爬虫的实现,内容比较多,要深入的请耐心阅读哦。———动态网页抓取之前要搞清楚请求的两种形式,requests和get(post)请求只是一种请求形式(post请求),但本节教程是讲解爬虫的实现。
  
  为什么要有get请求,这个跟第一节会讲的http协议有关。get请求可以返回抓取时发出的响应。http会发送4个部分组成的响应:请求参数(如json格式)、头部报文、requestheaders、http状态码。1,请求参数httpheaders可以看成是http报文的附加参数,用来封装好http报文里面数据的格式和字段名。
  1.1http的dom上的图示是httpheaders最基本的部分解析结构其中:content-type是响应的类型,其实就是content-length,accept是http通信的条件状态码,timeout是超时,主要是为了和服务器交互设定的。httpmethod是响应具体哪种方式,比如请求get或者post。
  
  httpreferer是域名,对方能在当前浏览器搜索到,那就是referer参数,当然如果不存在可以设置。这些dom上的东西要记牢,因为各种形式的http请求在响应中会返回不同的内容。比如get请求一般返回页面地址,post请求可能返回空的源码或者json数据。1.2浏览器对响应的解析结构上图是请求响应最基本的解析结构其中headers是无用的,即使有,也是不会有内容,那么需要记住,使用requests,get,post请求时,需要将其拆分看待,我的python学习笔记《零基础轻松入门python爬虫之——web》整理好的文章:用python3抓取淘宝网大数据,3分钟搞定动态网页实时抓取。
  (持续更新中)如何用python抓取电影天眼网图片?-章壹的回答用python爬取天眼网,免费领取大数据必备工具及书籍。用python爬取电影天眼网图片的具体操作。 查看全部

  《零基础轻松入门python爬虫》之python抓取动态网页源码
  python抓取动态网页源码,实时监控并反馈到redis或者mongodb中。分页效果下面是爬取的几个例子关于python动态网页抓取,本小节重点讲解反爬虫的实现,内容比较多,要深入的请耐心阅读哦。———动态网页抓取之前要搞清楚请求的两种形式,requests和get(post)请求只是一种请求形式(post请求),但本节教程是讲解爬虫的实现。
  
  为什么要有get请求,这个跟第一节会讲的http协议有关。get请求可以返回抓取时发出的响应。http会发送4个部分组成的响应:请求参数(如json格式)、头部报文、requestheaders、http状态码。1,请求参数httpheaders可以看成是http报文的附加参数,用来封装好http报文里面数据的格式和字段名。
  1.1http的dom上的图示是httpheaders最基本的部分解析结构其中:content-type是响应的类型,其实就是content-length,accept是http通信的条件状态码,timeout是超时,主要是为了和服务器交互设定的。httpmethod是响应具体哪种方式,比如请求get或者post。
  
  httpreferer是域名,对方能在当前浏览器搜索到,那就是referer参数,当然如果不存在可以设置。这些dom上的东西要记牢,因为各种形式的http请求在响应中会返回不同的内容。比如get请求一般返回页面地址,post请求可能返回空的源码或者json数据。1.2浏览器对响应的解析结构上图是请求响应最基本的解析结构其中headers是无用的,即使有,也是不会有内容,那么需要记住,使用requests,get,post请求时,需要将其拆分看待,我的python学习笔记《零基础轻松入门python爬虫之——web》整理好的文章:用python3抓取淘宝网大数据,3分钟搞定动态网页实时抓取。
  (持续更新中)如何用python抓取电影天眼网图片?-章壹的回答用python爬取天眼网,免费领取大数据必备工具及书籍。用python爬取电影天眼网图片的具体操作。

python抓取动态网页目前还不太可行。(图)

网站优化优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-07-29 14:04 • 来自相关话题

  python抓取动态网页目前还不太可行。(图)
  
  python抓取动态网页目前还不太可行。动态网页的动态对于同一个网站来说可能是同一个域名下的所有不同网页(图片、视频等等),如果需要抓取的网页多达100+甚至几千,那真是要抓狂了。不如手动切换url,抓取特定网页,然后对url进行解析,来实现对分页内容的爬取。比如你要抓取知乎,那么把知乎网页上所有设置评论的url输入抓取服务器,在本地用python解析,然后去知乎网页里得到结果即可。
  
  又找到一个方法,写爬虫,去一个网站找它有过什么活动。然后去爬。网页就又是动态的了,开始很难抓。因为每个登录的都抓。但是当你发现一个网站某个板块有活动你就可以换一个url去抓了。例如淘宝某个店铺的页面,一大堆商品堆起来这就是它的活动列表了。差不多就这意思。
  关于这个问题。你要知道,我们用浏览器打开一个页面是你的浏览器去主动给页面上的东西进行下载,而这样的一个过程,服务器一定是收到信息的。有的浏览器收到信息,你才能打开。如果这个页面是你从互联网上找到的,而当前浏览器不在线,你只能把服务器的信息丢弃掉。但是,即使当前服务器不在线,你在手机或电脑等地方刷新网页,浏览器响应就会更新,因为在某些情况下(例如网页需要重新加载),一个网页,可能会放到某些网站去,而你只是暂时跳转一下。所以,你关注到的动态网页的话,其实是服务器收到了你的主动刷新的网页,服务器响应给你的东西。 查看全部

  python抓取动态网页目前还不太可行。(图)
  
  python抓取动态网页目前还不太可行。动态网页的动态对于同一个网站来说可能是同一个域名下的所有不同网页(图片、视频等等),如果需要抓取的网页多达100+甚至几千,那真是要抓狂了。不如手动切换url,抓取特定网页,然后对url进行解析,来实现对分页内容的爬取。比如你要抓取知乎,那么把知乎网页上所有设置评论的url输入抓取服务器,在本地用python解析,然后去知乎网页里得到结果即可。
  
  又找到一个方法,写爬虫,去一个网站找它有过什么活动。然后去爬。网页就又是动态的了,开始很难抓。因为每个登录的都抓。但是当你发现一个网站某个板块有活动你就可以换一个url去抓了。例如淘宝某个店铺的页面,一大堆商品堆起来这就是它的活动列表了。差不多就这意思。
  关于这个问题。你要知道,我们用浏览器打开一个页面是你的浏览器去主动给页面上的东西进行下载,而这样的一个过程,服务器一定是收到信息的。有的浏览器收到信息,你才能打开。如果这个页面是你从互联网上找到的,而当前浏览器不在线,你只能把服务器的信息丢弃掉。但是,即使当前服务器不在线,你在手机或电脑等地方刷新网页,浏览器响应就会更新,因为在某些情况下(例如网页需要重新加载),一个网页,可能会放到某些网站去,而你只是暂时跳转一下。所以,你关注到的动态网页的话,其实是服务器收到了你的主动刷新的网页,服务器响应给你的东西。

python爬虫第三篇如何通过动态网页获取手机号号

网站优化优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2022-07-12 08:02 • 来自相关话题

  python爬虫第三篇如何通过动态网页获取手机号号
  python抓取动态网页教程。其实python爬虫一直都很火热,在企业里有广泛的应用,
  
  一、教程项目1.实验原理首先是会把网页的一些数据进行预处理,看会不会丢失数据。在使用urllib包中的request时获取服务器返回的请求头。之后将这些数据和数据库中对应的url地址对比,从而知道哪个服务器返回的数据是我们想要的数据。进而用urllib.request库抓取网页内容。最后用urllib库存储数据库中的数据即可。
  二、相关概念urllib库是python中经常使用的库,其中urllib.request是第一个由python发明的模块,它的request传递了哪些信息。urllib.parse是一个用于从资源文件中取出数据的模块。python的资源文件是字符串或者一个json对象,如果使用http包中的request库来获取数据,则需要将其转换为字符串传递给urllib包中的request来取数据。
  
  request中还包含了下载、抓取页面、分析html等操作方法。urllib.error是一个有关url关键字(request中的request对象及request传递给它的信息)错误的库,它包含从url处获取错误信息的方法。urllib.parse是一个用于从http服务器取数据的模块,request处取数据的方法主要通过parse方法而不是parse方法。
  parse方法,一般而言是接受一个参数out来接受响应html文件,比如用java就是out.post或者out.get。urllib.parse.error处理异常,不能响应错误信息,而是直接返回错误信息的文本内容,通常和一个带badbundle的对象一起使用。
  三、python爬虫第三篇如何通过动态网页获取手机号 查看全部

  python爬虫第三篇如何通过动态网页获取手机号号
  python抓取动态网页教程。其实python爬虫一直都很火热,在企业里有广泛的应用,
  
  一、教程项目1.实验原理首先是会把网页的一些数据进行预处理,看会不会丢失数据。在使用urllib包中的request时获取服务器返回的请求头。之后将这些数据和数据库中对应的url地址对比,从而知道哪个服务器返回的数据是我们想要的数据。进而用urllib.request库抓取网页内容。最后用urllib库存储数据库中的数据即可。
  二、相关概念urllib库是python中经常使用的库,其中urllib.request是第一个由python发明的模块,它的request传递了哪些信息。urllib.parse是一个用于从资源文件中取出数据的模块。python的资源文件是字符串或者一个json对象,如果使用http包中的request库来获取数据,则需要将其转换为字符串传递给urllib包中的request来取数据。
  
  request中还包含了下载、抓取页面、分析html等操作方法。urllib.error是一个有关url关键字(request中的request对象及request传递给它的信息)错误的库,它包含从url处获取错误信息的方法。urllib.parse是一个用于从http服务器取数据的模块,request处取数据的方法主要通过parse方法而不是parse方法。
  parse方法,一般而言是接受一个参数out来接受响应html文件,比如用java就是out.post或者out.get。urllib.parse.error处理异常,不能响应错误信息,而是直接返回错误信息的文本内容,通常和一个带badbundle的对象一起使用。
  三、python爬虫第三篇如何通过动态网页获取手机号

Java新手入门教程之scrapyweb呗用java的话和方法

网站优化优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-07-08 13:00 • 来自相关话题

  Java新手入门教程之scrapyweb呗用java的话和方法
  python抓取动态网页信息这个答案算是一个完整的python抓取网页示例了。同时它也可以作为一篇新手入门教程使用。
  scrapyweb框架+pandas,python2.7的版本都可以。网上现在有些教程使用java,但我个人觉得难度和难度,可能和java没有亲密的程度,两者合用的用力再狠一点。我是java转python的,算比较早入行了。不知道现在国内有哪些教程。
  
  统计数据的话,爬虫也可以用python,
  java读不动那就javascript呗
  
  用java的话,多采用bootstrap,bootstrap5已经出来了。这个是比较标准的框架了,也可以说是模块化框架,有xml/html/json、css、图片加载、javascript等模块。vs或者vscode这样的编辑器可以利用react来做快速的部署,svn可以加速。如果java语言不好,可以采用bottle和bootstrap1,主要看你想抓什么。
  我比较熟悉python,javascrapy我也用过,感觉scrapy的库比较多,尤其是numpy和pandas的包之类的可以方便很多,我自己也正在找工作,
  python可以用scrapy框架,解决自然语言处理等的一些问题,也可以用pandas库进行矩阵处理等。 查看全部

  Java新手入门教程之scrapyweb呗用java的话和方法
  python抓取动态网页信息这个答案算是一个完整的python抓取网页示例了。同时它也可以作为一篇新手入门教程使用。
  scrapyweb框架+pandas,python2.7的版本都可以。网上现在有些教程使用java,但我个人觉得难度和难度,可能和java没有亲密的程度,两者合用的用力再狠一点。我是java转python的,算比较早入行了。不知道现在国内有哪些教程。
  
  统计数据的话,爬虫也可以用python,
  java读不动那就javascript呗
  
  用java的话,多采用bootstrap,bootstrap5已经出来了。这个是比较标准的框架了,也可以说是模块化框架,有xml/html/json、css、图片加载、javascript等模块。vs或者vscode这样的编辑器可以利用react来做快速的部署,svn可以加速。如果java语言不好,可以采用bottle和bootstrap1,主要看你想抓什么。
  我比较熟悉python,javascrapy我也用过,感觉scrapy的库比较多,尤其是numpy和pandas的包之类的可以方便很多,我自己也正在找工作,
  python可以用scrapy框架,解决自然语言处理等的一些问题,也可以用pandas库进行矩阵处理等。

Python反爬虫(9) | 大型网站最常见的反爬-文字反扒

网站优化优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-06-24 09:28 • 来自相关话题

  Python反爬虫(9) | 大型网站最常见的反爬-文字反扒
  回顾:
  随着互联网的发展,Python的崛起,很多网站经常被外面的爬虫程序骚扰,有什么方法可以阻止爬虫吗?
  阻止爬虫也就称之为反爬虫,反爬虫涉及到的技术比较综合,说简单也简单,说复杂也复杂,看具体要做到哪种保护程度了。
  
  针对于不同的网站,它的反爬措施不一样,常见的反爬有User-Agent、ip代理、cookie认证,js加密等等,与之对应所保护的数据也不一样。比如某宝某猫等电商网站,那么店铺信息用户信息就比较重要了,像是某眼电影网站,它对于电影评分,票房等信息做了反爬处理。
  我们今天的采集目标网站是某论坛,当对其文章的文本数据进行采集时,但是发现有字体反爬措施,就是有的文本数据被替换了。
  一、需求分析
  我们是需要爬取论坛文本数据,如下图所示:
  
  部分网页源码展示:
  
  我们发现文本数据是在网页源码里面的。
  二、发起请求
  import requests<br />url = "https://club.autohome.com.cn/b ... %3Bbr />header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}<br />r = requests.get(url, headers=header)<br />html = etree.HTML(r.text)  <br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br />print(content)<br />
  然后得到如下数据(部分数据截图):
  
  虽然在网页源码里面存在目标数据,但是通过requests简单请求之后发现有的文字被特殊字符替换掉了,此时再次查看Elenments对应的标签里的数据,如下图所示:
  
  由图可以发现有的字被替换掉了,所以我们需要找到汉字被替换的方式,然后替换回去。
  三、字体替换
  我们知道系统字体一般都是xxxx.ttf的文件形式,如下图所示:
  
  通过检查发现该网站中使用的字体对应的是myfont,这个很明显是网站为了反爬设置的自定义的字体:
  
  了解css的伙计应该知道,网页的字体样式放在了style标签里面,如下图所示:
  然后拿到url对应属性(xxx57..ttf),
  ///g1/M02/D0/99/wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf
  查看后发现是一个字体文件:
  然后打开字体查看文件,把字体文件拖拽进去,如下图所示:(使用软件为FontCreator,可以查看字体的软件)
  如果不想使用软件,可以打开百度字体平台网站,对应页面和软件打开是一样的
  
  粗略一看其实发现不了什么,所以我们需要使用fontTools第三方库查看字体文件:
  from fontTools.ttLib import TTFont<br />font = TTFont('./wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />print(font.getGlyphOrder())<br />
  结果如下图所示:
  
  然后我们发现比如在先前的特殊字符表中,
  
  这三个字应该分别对应于,大 、的、一,首先大对应的后缀为edb8,在字体文件的输出的列表中中有一个uniEDB8,对应于第六个,然后再FontCreator软件中刚好对应第六个汉字大,如下图所示:
  
  所以规律就是这样的。
  四、数据抓取
  1、先把对应的汉字打出来储存在一个列表中;
  word_list = ['很', '五', '多', '远', '大', '十', '更', '了', '的', '矮', '不', '少', '九', '三', '八', '一', '右', '坏', '近', '着', '呢','左', '是', '长', '六', '上', '短', '七', '高', '二', '得', '好', '下', '和', '四', '地', '小', '低']<br />
  2、把字体文件对应的特殊字符保存到另一个列表中,边进行处理;
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />unilist = font.getGlyphOrder()<br />uni_list = []<br />for i in unilist[1:]:<br />    s = r'\u' + i[3:]<br />    uni_list.append(s)<br />print(uni_list)<br />
  但是问题出现了,结果如下:
  
  我们发现出现了两个反斜线,所以需要使用eval函数简单修改:
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br /><br />unilist = font.getGlyphOrder()<br /># print(unilist)<br /><br />uni_list = []<br />for i in unilist[1:]:<br />    # print(i)<br />    s = eval(r"'\u" + i[3:] + "'")<br />    # print(s)<br />    uni_list.append(s)<br />
  3、由于之前得到的不完整的文章数据是以一个列表的形式,所以需要把他拼接为字符串,然后使用replace(old,new),进行替换:
  # ....前面代码省略<br />html = etree.HTML(result)  # result为请求网页源码<br /><br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br /><br />contents = ''.join(content)<br />
  4、最后进行替换:
  for i in range(len(uni_list)):<br />    contents = contents.replace(uni_list[i], word_list[i])<br /><br />print(contents)<br />
  结果如下,文字替换成功:
  
  五、小结
  通常在爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用 Python 爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码。这种一般是网站设置了字体反爬。
  字体反爬是一种比较常见的反爬方式,因为很多网站的文字信息是比较重要的,像是前面提到的猫眼电影电影票房评分等数据,非常重要,网站维护者当然会把这种数据进行反爬处理,只要好好分析,还是能够抓取到目标数据。
  回顾: 查看全部

  Python反爬虫(9) | 大型网站最常见的反爬-文字反扒
  回顾:
  随着互联网的发展,Python的崛起,很多网站经常被外面的爬虫程序骚扰,有什么方法可以阻止爬虫吗?
  阻止爬虫也就称之为反爬虫,反爬虫涉及到的技术比较综合,说简单也简单,说复杂也复杂,看具体要做到哪种保护程度了。
  
  针对于不同的网站,它的反爬措施不一样,常见的反爬有User-Agent、ip代理、cookie认证,js加密等等,与之对应所保护的数据也不一样。比如某宝某猫等电商网站,那么店铺信息用户信息就比较重要了,像是某眼电影网站,它对于电影评分,票房等信息做了反爬处理。
  我们今天的采集目标网站是某论坛,当对其文章的文本数据进行采集时,但是发现有字体反爬措施,就是有的文本数据被替换了。
  一、需求分析
  我们是需要爬取论坛文本数据,如下图所示:
  
  部分网页源码展示:
  
  我们发现文本数据是在网页源码里面的。
  二、发起请求
  import requests<br />url = "https://club.autohome.com.cn/b ... %3Bbr />header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}<br />r = requests.get(url, headers=header)<br />html = etree.HTML(r.text)  <br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br />print(content)<br />
  然后得到如下数据(部分数据截图):
  
  虽然在网页源码里面存在目标数据,但是通过requests简单请求之后发现有的文字被特殊字符替换掉了,此时再次查看Elenments对应的标签里的数据,如下图所示:
  
  由图可以发现有的字被替换掉了,所以我们需要找到汉字被替换的方式,然后替换回去。
  三、字体替换
  我们知道系统字体一般都是xxxx.ttf的文件形式,如下图所示:
  
  通过检查发现该网站中使用的字体对应的是myfont,这个很明显是网站为了反爬设置的自定义的字体:
  
  了解css的伙计应该知道,网页的字体样式放在了style标签里面,如下图所示:
  然后拿到url对应属性(xxx57..ttf),
  ///g1/M02/D0/99/wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf
  查看后发现是一个字体文件:
  然后打开字体查看文件,把字体文件拖拽进去,如下图所示:(使用软件为FontCreator,可以查看字体的软件)
  如果不想使用软件,可以打开百度字体平台网站,对应页面和软件打开是一样的
  
  粗略一看其实发现不了什么,所以我们需要使用fontTools第三方库查看字体文件:
  from fontTools.ttLib import TTFont<br />font = TTFont('./wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />print(font.getGlyphOrder())<br />
  结果如下图所示:
  
  然后我们发现比如在先前的特殊字符表中,
  
  这三个字应该分别对应于,大 、的、一,首先大对应的后缀为edb8,在字体文件的输出的列表中中有一个uniEDB8,对应于第六个,然后再FontCreator软件中刚好对应第六个汉字大,如下图所示:
  
  所以规律就是这样的。
  四、数据抓取
  1、先把对应的汉字打出来储存在一个列表中;
  word_list = ['很', '五', '多', '远', '大', '十', '更', '了', '的', '矮', '不', '少', '九', '三', '八', '一', '右', '坏', '近', '着', '呢','左', '是', '长', '六', '上', '短', '七', '高', '二', '得', '好', '下', '和', '四', '地', '小', '低']<br />
  2、把字体文件对应的特殊字符保存到另一个列表中,边进行处理;
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />unilist = font.getGlyphOrder()<br />uni_list = []<br />for i in unilist[1:]:<br />    s = r'\u' + i[3:]<br />    uni_list.append(s)<br />print(uni_list)<br />
  但是问题出现了,结果如下:
  
  我们发现出现了两个反斜线,所以需要使用eval函数简单修改:
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br /><br />unilist = font.getGlyphOrder()<br /># print(unilist)<br /><br />uni_list = []<br />for i in unilist[1:]:<br />    # print(i)<br />    s = eval(r"'\u" + i[3:] + "'")<br />    # print(s)<br />    uni_list.append(s)<br />
  3、由于之前得到的不完整的文章数据是以一个列表的形式,所以需要把他拼接为字符串,然后使用replace(old,new),进行替换:
  # ....前面代码省略<br />html = etree.HTML(result)  # result为请求网页源码<br /><br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br /><br />contents = ''.join(content)<br />
  4、最后进行替换:
  for i in range(len(uni_list)):<br />    contents = contents.replace(uni_list[i], word_list[i])<br /><br />print(contents)<br />
  结果如下,文字替换成功:
  
  五、小结
  通常在爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用 Python 爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码。这种一般是网站设置了字体反爬。
  字体反爬是一种比较常见的反爬方式,因为很多网站的文字信息是比较重要的,像是前面提到的猫眼电影电影票房评分等数据,非常重要,网站维护者当然会把这种数据进行反爬处理,只要好好分析,还是能够抓取到目标数据。
  回顾:

Python动态网页爬虫技术

网站优化优采云 发表了文章 • 0 个评论 • 42 次浏览 • 2022-06-23 09:32 • 来自相关话题

  Python动态网页爬虫技术
  知乎专栏:经管人学数据分析
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import requests<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import jsonfor i in range(5):
   page_start = str(i * 20)  # 注释1
   url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start  # 注释2
   headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
   }
   response = requests.get(url=url, headers=headers, verify=False)
   content = response.content.decode()
   content_list = json.loads(content)['subjects']  # 注释3
   for item in content_list:  # 注释4
       title = item['title']  #注释5
       rate = item['rate']  # 注释6
       link = item['url']  # 注释7
       print(title, rate, link)</p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:\Program Files (x86)\Google\Chrome\Application,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from selenium import webdriver
driver = webdriver.Chrome()  # 注释1<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.maximize_window()  # 注释2<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.get(url)  # 注释3<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />dl_list = driver.find_elements_by_class_name('item')  # 注释4<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />for dl in dl_list:
   name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text  # 注释5
   price = dl.find_element_by_class_name('cprice-area').text  # 注释6
   sale = dl.find_element_by_class_name('sale-area').text  # 注释7
   comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text  # 注释8
   print(name, price, sale, comment)
driver.close()  # 注释9</p>
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  课后作业
  这里给大家留两个小作业,感兴趣的可以自行测试。
  请大家使用API请求法自行在QQ音乐上找一首收费下载的歌曲,在不登录账号的情况下对这首歌曲进行下载操作。
  请大家使用selenium爬取知乎首页的热门话题或话题回答100条。
  关于作者
  作者是一名即将毕业的大四学生,自学爬虫并作为数个爬虫项目的主要开发者,对各种爬虫有一定的了解和项目经验,目前正在自学分布式爬虫的内容,也将在后面陆续为大家更新。同时作者也是一个狂热的信息安全爱好者。感谢大家的支持。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程: 查看全部

  Python动态网页爬虫技术
  知乎专栏:经管人学数据分析
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import requests<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import jsonfor i in range(5):
   page_start = str(i * 20)  # 注释1
   url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start  # 注释2
   headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
   }
   response = requests.get(url=url, headers=headers, verify=False)
   content = response.content.decode()
   content_list = json.loads(content)['subjects']  # 注释3
   for item in content_list:  # 注释4
       title = item['title']  #注释5
       rate = item['rate']  # 注释6
       link = item['url']  # 注释7
       print(title, rate, link)</p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:\Program Files (x86)\Google\Chrome\Application,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from selenium import webdriver
driver = webdriver.Chrome()  # 注释1<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.maximize_window()  # 注释2<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.get(url)  # 注释3<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />dl_list = driver.find_elements_by_class_name('item')  # 注释4<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />for dl in dl_list:
   name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text  # 注释5
   price = dl.find_element_by_class_name('cprice-area').text  # 注释6
   sale = dl.find_element_by_class_name('sale-area').text  # 注释7
   comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text  # 注释8
   print(name, price, sale, comment)
driver.close()  # 注释9</p>
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  课后作业
  这里给大家留两个小作业,感兴趣的可以自行测试。
  请大家使用API请求法自行在QQ音乐上找一首收费下载的歌曲,在不登录账号的情况下对这首歌曲进行下载操作。
  请大家使用selenium爬取知乎首页的热门话题或话题回答100条。
  关于作者
  作者是一名即将毕业的大四学生,自学爬虫并作为数个爬虫项目的主要开发者,对各种爬虫有一定的了解和项目经验,目前正在自学分布式爬虫的内容,也将在后面陆续为大家更新。同时作者也是一个狂热的信息安全爱好者。感谢大家的支持。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

网络爬虫:Python动态网页爬虫2种技术方式及示例

网站优化优采云 发表了文章 • 0 个评论 • 40 次浏览 • 2022-06-20 00:30 • 来自相关话题

  网络爬虫:Python动态网页爬虫2种技术方式及示例
  点击上方“安全优佳” 可以订阅哦!
  
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import requests<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import jsonfor i in range(5):<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> page_start = str(i * 20) # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> }<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> response = requests.get(url=url, headers=headers, verify=False)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content = response.content.decode()<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content_list = json.loads(content)['subjects'] # 注释3for item in content_list: # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> title = item['title'] #注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> rate = item['rate'] # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> link = item['url'] # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(title, rate, link)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:Program Files (x86)GoogleChromeApplication,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />from selenium import webdriver<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver = webdriver.Chrome() # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.maximize_window() # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.get(url) # 注释3<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />dl_list = driver.find_elements_by_class_name('item') # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />for dl in dl_list:<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text # 注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> price = dl.find_element_by_class_name('cprice-area').text # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> sale = dl.find_element_by_class_name('sale-area').text # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text # 注释8<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(name, price, sale, comment)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.close() # 注释9<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  
  XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。(解释来自:百度百科 - “XPath”,若链接失效请访问:)
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  安全优佳 查看全部

  网络爬虫:Python动态网页爬虫2种技术方式及示例
  点击上方“安全优佳” 可以订阅哦!
  
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import requests<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import jsonfor i in range(5):<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> page_start = str(i * 20) # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> }<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> response = requests.get(url=url, headers=headers, verify=False)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content = response.content.decode()<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content_list = json.loads(content)['subjects'] # 注释3for item in content_list: # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> title = item['title'] #注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> rate = item['rate'] # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> link = item['url'] # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(title, rate, link)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:Program Files (x86)GoogleChromeApplication,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />from selenium import webdriver<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver = webdriver.Chrome() # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.maximize_window() # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.get(url) # 注释3<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />dl_list = driver.find_elements_by_class_name('item') # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />for dl in dl_list:<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text # 注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> price = dl.find_element_by_class_name('cprice-area').text # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> sale = dl.find_element_by_class_name('sale-area').text # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text # 注释8<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(name, price, sale, comment)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.close() # 注释9<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  
  XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。(解释来自:百度百科 - “XPath”,若链接失效请访问:)
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  安全优佳

Python 爬虫进阶必备 | 某体育网站登录令牌加密分析(再送两本!!)

网站优化优采云 发表了文章 • 0 个评论 • 35 次浏览 • 2022-06-18 08:35 • 来自相关话题

  Python 爬虫进阶必备 | 某体育网站登录令牌加密分析(再送两本!!)
  某体育网站登录令牌加密分析
  aHR0cHMlM0EvL3d3dy55YWJvMjU5LmNvbS9sb2dpbg==
  这个网站需要分析的是登录时候的 sign令牌
  抓包与加密定位
  老规矩先用开发者工具抓包
  这里一般定位就是搜参数和xhr断点会比较方便,但是使用这两种都有他不方便的地方
  搜参数这个方法直接搜加密的参数名会出现很多的结果,需要一个一个去分析,同样也有局限性,比如参数是混淆的就搜不到了。
  xhr断点这个方法需要这个请求是xhr请求才行,而且断上之后还需要一步步调试堆栈才能找到加密的位置,如果不小心漏了需要耐心重新分析。
  这里重提下在前面的文章,我提过一个思路,就是不要直接搜索加密的参数,可以搜索同一个请求提交的其他参数,一般参数提交的地方都是在一块的
  这里实操一下,搜索nonce_str就只有一个结果,直接跟进即可
  在定位出来的文件位置中再次检索,直接就定位到加密的位置了
  
  接下来打上断点验证看我们的分析是否准确
  成功断上,说明确实定位到了
  分析加密
  可以看到这里的 sign 是由 d赋值的,而 d = o.a.hmac(t,u)
  这里需要知道的参数就是o 、t、u这三个
  我们继续分析这三个参数是怎么出现的
  s 的值是一串字符串
  appKey=c97823e281c071c39e&domain=www.yabo259.com&name=xianyuplus&nonce_str=eovdlwvy4z&password=11111111111&timestamp=1596710251&uuid=web-Windows-45671c25c33d9e3ad2217c645cb1a48f&appSecurit=d77f7fcff637bc61bfb82fcbcd767bfa<br />
  这里的参数都是请求提交上来的,之后做了一个 base64 的编码
  
  后面的t 也是传入的d77f7fcff637bc61bfb82fcbcd767bfa
  这里就只剩一个o跟进去看就很明显是一个hmacsha256
  
  为了沿着我们可以网上找一个加密站测试下。
  这是测试网站的加密结果
  
  这是加密网站的加密结果
  
  完全一样,说明我们分析是没有错的,接下来直接使用 Python 复写出来即可。
  
  加密代码:
  import hmac<br />import hashlib<br /><br />API_SECRET = 'd77f7fcff637bc61bfb82fcbcd767bfa'<br />message = 'YXBwS2V5PWM5NzgyM2UyODFjMDcxYzM5ZSZkb21haW49d3d3LnlhYm8yNTkuY29tJm5hbWU9eGlhbnl1cGx1cyZub25jZV9zdHI9aWpveHk0bjZ3OWMmcGFzc3dvcmQ9MTExMTExMTExMTEmdGltZXN0YW1wPTE1OTY3MTA5ODAmdXVpZD13ZWItV2luZG93cy00NTY3MWMyNWMzM2Q5ZTNhZDIyMTdjNjQ1Y2IxYTQ4ZiZhcHBTZWN1cml0PWQ3N2Y3ZmNmZjYzN2JjNjFiZmI4MmZjYmNkNzY3YmZh'<br /><br />signature = hmac.new(bytes(API_SECRET, 'latin-1'), msg=bytes(message, 'latin-1'), digestmod=hashlib.sha256).hexdigest()<br />print(signature)<br />-----------------------------------<br />结果:d9106f11a865d57e31ae4a2250fc2bdc34bd4aea814585e0705f645c32be2e56<br />
  赠书
  周一的赠书很多朋友说没有抽中,所以这次又准备了两本 Python 书籍,希望大家能够喜欢。
  现在可以参加京东活动,每满 100 减 50
  
  《Python 3.x网络爬虫从零基础到项目实战》介绍了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介、发送请求、提取数据、使用多个线程和进程进行并发抓取、抓取动态页面中的内容、与表单进行交互、处理页面中的验证码问题及使用Scrapy和分布式进行数据抓取,并在最后介绍了使用本书讲解的数据抓取技术对几个真实的网站进行抓取的实例,旨在帮助读者活学活用书中介绍的技术。本书提供了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。本书适合任何想学习Python爬虫的读者,无论您是否从事计算机相关专业,是否接触过Python,均可以通过学习本书快速掌握Python爬虫的开发方法和技巧。
  
  《Python自动化测试实战》本书的写作初衷是为了帮助更多功能测试人员转型自动化测试方向。在转型过程中,主流自动化测试技术和应用场景的结合是非常重要的一环。本书从自动化测试理论入手,全面地阐述自动化测试的意义及实施过程。全文以Python语言驱动,结合真实案例分别对主流自动化测试工具Selenium、Robot Framework、Postman、Python+Requests、Appium等进行系统讲解。通过学习本书,读者可以快速掌握主流自动化测试技术,并帮助读者丰富测试思维,提高Python编码能力。
  本书实用性强,不仅是转型自动化测试方向的一本案头书,也是一本特别好用、实用的操练手册。
  感谢赞助方:北京大学出版社
  参与赠书:
  好了,今天的内容到这里就结束了,咱们下次再会~
  Love & Share
  
  [ 完 ] 查看全部

  Python 爬虫进阶必备 | 某体育网站登录令牌加密分析(再送两本!!)
  某体育网站登录令牌加密分析
  aHR0cHMlM0EvL3d3dy55YWJvMjU5LmNvbS9sb2dpbg==
  这个网站需要分析的是登录时候的 sign令牌
  抓包与加密定位
  老规矩先用开发者工具抓包
  这里一般定位就是搜参数和xhr断点会比较方便,但是使用这两种都有他不方便的地方
  搜参数这个方法直接搜加密的参数名会出现很多的结果,需要一个一个去分析,同样也有局限性,比如参数是混淆的就搜不到了。
  xhr断点这个方法需要这个请求是xhr请求才行,而且断上之后还需要一步步调试堆栈才能找到加密的位置,如果不小心漏了需要耐心重新分析。
  这里重提下在前面的文章,我提过一个思路,就是不要直接搜索加密的参数,可以搜索同一个请求提交的其他参数,一般参数提交的地方都是在一块的
  这里实操一下,搜索nonce_str就只有一个结果,直接跟进即可
  在定位出来的文件位置中再次检索,直接就定位到加密的位置了
  
  接下来打上断点验证看我们的分析是否准确
  成功断上,说明确实定位到了
  分析加密
  可以看到这里的 sign 是由 d赋值的,而 d = o.a.hmac(t,u)
  这里需要知道的参数就是o 、t、u这三个
  我们继续分析这三个参数是怎么出现的
  s 的值是一串字符串
  appKey=c97823e281c071c39e&domain=www.yabo259.com&name=xianyuplus&nonce_str=eovdlwvy4z&password=11111111111&timestamp=1596710251&uuid=web-Windows-45671c25c33d9e3ad2217c645cb1a48f&appSecurit=d77f7fcff637bc61bfb82fcbcd767bfa<br />
  这里的参数都是请求提交上来的,之后做了一个 base64 的编码
  
  后面的t 也是传入的d77f7fcff637bc61bfb82fcbcd767bfa
  这里就只剩一个o跟进去看就很明显是一个hmacsha256
  
  为了沿着我们可以网上找一个加密站测试下。
  这是测试网站的加密结果
  
  这是加密网站的加密结果
  
  完全一样,说明我们分析是没有错的,接下来直接使用 Python 复写出来即可。
  
  加密代码:
  import hmac<br />import hashlib<br /><br />API_SECRET = 'd77f7fcff637bc61bfb82fcbcd767bfa'<br />message = 'YXBwS2V5PWM5NzgyM2UyODFjMDcxYzM5ZSZkb21haW49d3d3LnlhYm8yNTkuY29tJm5hbWU9eGlhbnl1cGx1cyZub25jZV9zdHI9aWpveHk0bjZ3OWMmcGFzc3dvcmQ9MTExMTExMTExMTEmdGltZXN0YW1wPTE1OTY3MTA5ODAmdXVpZD13ZWItV2luZG93cy00NTY3MWMyNWMzM2Q5ZTNhZDIyMTdjNjQ1Y2IxYTQ4ZiZhcHBTZWN1cml0PWQ3N2Y3ZmNmZjYzN2JjNjFiZmI4MmZjYmNkNzY3YmZh'<br /><br />signature = hmac.new(bytes(API_SECRET, 'latin-1'), msg=bytes(message, 'latin-1'), digestmod=hashlib.sha256).hexdigest()<br />print(signature)<br />-----------------------------------<br />结果:d9106f11a865d57e31ae4a2250fc2bdc34bd4aea814585e0705f645c32be2e56<br />
  赠书
  周一的赠书很多朋友说没有抽中,所以这次又准备了两本 Python 书籍,希望大家能够喜欢。
  现在可以参加京东活动,每满 100 减 50
  
  《Python 3.x网络爬虫从零基础到项目实战》介绍了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介、发送请求、提取数据、使用多个线程和进程进行并发抓取、抓取动态页面中的内容、与表单进行交互、处理页面中的验证码问题及使用Scrapy和分布式进行数据抓取,并在最后介绍了使用本书讲解的数据抓取技术对几个真实的网站进行抓取的实例,旨在帮助读者活学活用书中介绍的技术。本书提供了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。本书适合任何想学习Python爬虫的读者,无论您是否从事计算机相关专业,是否接触过Python,均可以通过学习本书快速掌握Python爬虫的开发方法和技巧。
  
  《Python自动化测试实战》本书的写作初衷是为了帮助更多功能测试人员转型自动化测试方向。在转型过程中,主流自动化测试技术和应用场景的结合是非常重要的一环。本书从自动化测试理论入手,全面地阐述自动化测试的意义及实施过程。全文以Python语言驱动,结合真实案例分别对主流自动化测试工具Selenium、Robot Framework、Postman、Python+Requests、Appium等进行系统讲解。通过学习本书,读者可以快速掌握主流自动化测试技术,并帮助读者丰富测试思维,提高Python编码能力。
  本书实用性强,不仅是转型自动化测试方向的一本案头书,也是一本特别好用、实用的操练手册。
  感谢赞助方:北京大学出版社
  参与赠书:
  好了,今天的内容到这里就结束了,咱们下次再会~
  Love & Share
  
  [ 完 ]

7分钟,建议看完这5个Python库对比丨web抓取

网站优化优采云 发表了文章 • 0 个评论 • 108 次浏览 • 2022-06-12 04:49 • 来自相关话题

  7分钟,建议看完这5个Python库对比丨web抓取
  
  网页抓取的时候,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?5个示例找寻答案。
  文丨ABHISHEK SHARMA
  编译丨小二
  “我们有足够的数据”这句话,在数据科学领域并不存在。
  我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多。
  为了缓解这种“数据焦虑”,分析师或数据科学家们练就了必备的技能之一:网页抓取。
  用Python执行网页抓取很方便,有大量的库可以使用,但头疼的地方也在于此,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?
  先不直接给出答案,下文所列举的是我认为较为通用的5个Python库,将通过对它们的优劣评估来回答那些疑问。
  1.Requests
  
  Requests是一个Python库,用于发出各种类型的HTTP请求,例如GET,POST等。由于其简单易用,它被称为HTTP for Humans。
  我想说这是Web抓取最基本但必不可少的库。但是,请求库不会解析检索到的HTML数据。如果要这样做,还需要结合lxml和Beautiful Soup之类的库一起使用(将在本文中进一步介绍它们)。
  那Requests Python库有哪些优缺点?
  优点:
  缺点:
  2.lxml
  
  lxml是一种高性能,快速,高质生产力的HTML和XML解析Python库。
  它结合了ElementTree的速度和功能以及Python的简单性。当我们打算抓取大型数据集时,它能发挥很好的作用。
  在Web抓取的时候,lxml经常和Requests进行组合来使用,此外,它还允许使用XPath和CSS选择器从HTML提取数据。
  那lxml Python库的优缺点有哪些?
  优点:
  缺点:
  3.BeautifulSoup
  
  BeautifulSoup也许是Web抓取中使用最广泛的Python库。它创建了一个解析树,用于解析HTML和XML文档。还会自动将传入文档转换为Unicode,将传出文档转换为UTF-8。
  在行业中,将“BeautifulSoup”与“Requests”组合在一起使用非常普遍。
  让BeautifulSoup备受欢迎的主要原因之一,就是它易于使用并且非常适合初学者。同时,还可以将Beautiful Soup与其他解析器(如lxml)结合使用。
  但是相对应的,这种易用性也带来了不小的运行成本——它比lxml慢。即使使用lxml作为解析器,它也比纯lxml慢。
  下面来综合看下BeautifulSoup库的优缺点都有哪些?
  优点:
  缺点:
  4. Selenium
  到目前为止,我们讨论的所有Python库都有一个局限性:不能轻易地从动态填充的网页上抓取数据。
  发生这种情况的原因有时是因为页面上存在的数据是通过JavaScript加载的。简单概括就是,如果页面不是静态的,那么前面提到的Python库就很难从页面中抓取数据。
  这种情况,就比较适合使用Selenium。
  
  Selenium最初是用于自动测试Web应用程序的Python库,是用于渲染网页的Web驱动程序,也正因如此,在其他库无法运行JavaScript的地方,Selenium就可以发挥作用:在页面上单击,填写表格,滚动页面并执行更多操作。
  这种在网页中运行JavaScript的能力,使Selenium能够抓取动态填充的网页。但是这里存在一个“缺陷”,它为每个页面加载并运行JavaScript,会使其运行速度变慢,不适合大型项目。
  如果不关心时间和速度,那么Selenium绝对是个很好的选择。
  优点:
  缺点:
  5.Scrapy
  现在是时候介绍Python Web抓取库的BOSS——Scrapy!
  
  Scrapy不仅仅单纯是一个库,它是Scrapinghub的联合创始人Pablo Hoffman和Shane Evans创建的整个Web抓取框架,是一款功能完善的网页抓取解决方案,可以完成所有繁重的工作。
  Scrapy提供的蜘蛛机器人可以抓取多个网页并提取数据。使用Scrapy,可以创建自己的蜘蛛机器人,将其托管在Scrapy Hub上,或作为API。在几分钟内就可以创建功能齐全的蜘蛛网,当然也可以使用Scrapy创建管道。
  关于Scrapy最好的一点在于它是异步的,这意味着可以同时发出多个HTTP请求,能够为我们节省很多时间并提高效率(这不是我们正为之奋斗的吗?)。
  我们还可以向Scrapy添加插件来增强其功能。尽管Scrapy无法像selenium一样处理JavaScript,但可以将其与名为Splash的库(轻量级Web浏览器)配对。借助Splash,Scrapy就能实现从动态网页提取数据。
  优点:
  缺点:
  这些是我个人觉得很有用的Python库,如果有其他你觉得使用起来不错的库,欢迎留言评论~
  原文链接:
  ————————线上沙龙预告 查看全部

  7分钟,建议看完这5个Python库对比丨web抓取
  
  网页抓取的时候,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?5个示例找寻答案。
  文丨ABHISHEK SHARMA
  编译丨小二
  “我们有足够的数据”这句话,在数据科学领域并不存在。
  我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多。
  为了缓解这种“数据焦虑”,分析师或数据科学家们练就了必备的技能之一:网页抓取。
  用Python执行网页抓取很方便,有大量的库可以使用,但头疼的地方也在于此,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?
  先不直接给出答案,下文所列举的是我认为较为通用的5个Python库,将通过对它们的优劣评估来回答那些疑问。
  1.Requests
  
  Requests是一个Python库,用于发出各种类型的HTTP请求,例如GET,POST等。由于其简单易用,它被称为HTTP for Humans。
  我想说这是Web抓取最基本但必不可少的库。但是,请求库不会解析检索到的HTML数据。如果要这样做,还需要结合lxml和Beautiful Soup之类的库一起使用(将在本文中进一步介绍它们)。
  那Requests Python库有哪些优缺点?
  优点:
  缺点:
  2.lxml
  
  lxml是一种高性能,快速,高质生产力的HTML和XML解析Python库。
  它结合了ElementTree的速度和功能以及Python的简单性。当我们打算抓取大型数据集时,它能发挥很好的作用。
  在Web抓取的时候,lxml经常和Requests进行组合来使用,此外,它还允许使用XPath和CSS选择器从HTML提取数据。
  那lxml Python库的优缺点有哪些?
  优点:
  缺点:
  3.BeautifulSoup
  
  BeautifulSoup也许是Web抓取中使用最广泛的Python库。它创建了一个解析树,用于解析HTML和XML文档。还会自动将传入文档转换为Unicode,将传出文档转换为UTF-8。
  在行业中,将“BeautifulSoup”与“Requests”组合在一起使用非常普遍。
  让BeautifulSoup备受欢迎的主要原因之一,就是它易于使用并且非常适合初学者。同时,还可以将Beautiful Soup与其他解析器(如lxml)结合使用。
  但是相对应的,这种易用性也带来了不小的运行成本——它比lxml慢。即使使用lxml作为解析器,它也比纯lxml慢。
  下面来综合看下BeautifulSoup库的优缺点都有哪些?
  优点:
  缺点:
  4. Selenium
  到目前为止,我们讨论的所有Python库都有一个局限性:不能轻易地从动态填充的网页上抓取数据。
  发生这种情况的原因有时是因为页面上存在的数据是通过JavaScript加载的。简单概括就是,如果页面不是静态的,那么前面提到的Python库就很难从页面中抓取数据。
  这种情况,就比较适合使用Selenium。
  
  Selenium最初是用于自动测试Web应用程序的Python库,是用于渲染网页的Web驱动程序,也正因如此,在其他库无法运行JavaScript的地方,Selenium就可以发挥作用:在页面上单击,填写表格,滚动页面并执行更多操作。
  这种在网页中运行JavaScript的能力,使Selenium能够抓取动态填充的网页。但是这里存在一个“缺陷”,它为每个页面加载并运行JavaScript,会使其运行速度变慢,不适合大型项目。
  如果不关心时间和速度,那么Selenium绝对是个很好的选择。
  优点:
  缺点:
  5.Scrapy
  现在是时候介绍Python Web抓取库的BOSS——Scrapy!
  
  Scrapy不仅仅单纯是一个库,它是Scrapinghub的联合创始人Pablo Hoffman和Shane Evans创建的整个Web抓取框架,是一款功能完善的网页抓取解决方案,可以完成所有繁重的工作。
  Scrapy提供的蜘蛛机器人可以抓取多个网页并提取数据。使用Scrapy,可以创建自己的蜘蛛机器人,将其托管在Scrapy Hub上,或作为API。在几分钟内就可以创建功能齐全的蜘蛛网,当然也可以使用Scrapy创建管道。
  关于Scrapy最好的一点在于它是异步的,这意味着可以同时发出多个HTTP请求,能够为我们节省很多时间并提高效率(这不是我们正为之奋斗的吗?)。
  我们还可以向Scrapy添加插件来增强其功能。尽管Scrapy无法像selenium一样处理JavaScript,但可以将其与名为Splash的库(轻量级Web浏览器)配对。借助Splash,Scrapy就能实现从动态网页提取数据。
  优点:
  缺点:
  这些是我个人觉得很有用的Python库,如果有其他你觉得使用起来不错的库,欢迎留言评论~
  原文链接:
  ————————线上沙龙预告

Python爬虫 | 批量爬取某图网站高质量小姐姐照片

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-06-11 20:22 • 来自相关话题

  Python爬虫 | 批量爬取某图网站高质量小姐姐照片
  鉴于以上情况,这里咱们重点强调声明:本文仅限于做技术交流学习,请勿用作任何非法商用!
  图虫创意是北京字节跳动科技有限公司所创立的正版照片及视频素材平台 ,致力于为用户提供正版素材内容及数字资产管理解决方案。
  0.先看一波美照吧
  
  很正经的图
  接下来,我们按照上次在《》介绍的爬虫流程来展开介绍这次爬虫实战哈。
  1.网页分析
  打开目标网页(%E7%BE%8E%E5%A5%B3),发现下拉会加载更多但是网页地址栏的url没有变化。因此,我们断定这是一个动态网页,于是有了以下步骤:
  需要按“F12”进入到浏览器的开发者模式;点击“Network”—>XHR或JS或者你全部查找看;进行翻页(可能是点击下一页或者下滑加载更多或者直接F5刷新页面);观察第2步中name模块的内容变化,寻找。
  很好,我们找到了照片组图信息所在,如下图所示,在请求的结果中的postList里是单页全部照片组信息列表,列表的每个元素中的imges里是该组照片信息列表。通过这些字段大致能理解照片img_id归属于某个作者user_id或author_id。
  记住这组照片信息:
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br />

  组图照片信息
  我们点开Headers模块,可以看到真实请求地址基础URL和请求参数如下:
  # 基础URL<br />url='https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1, # 随着翻页而递增变化<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br />
  
  真实URL地址及参数
  到这里没完,单纯知道了请求这些组图信息列表的地址,但是每个组图里照片的地址暂时还无法得知。于是我们点开某个组图进行进一步查看,在组图的详情页里,F12->Elements 查看照片元素信息,发现结果如下:

  组图详情页
  在网页HTML源代码里,我们找到了照片的地址为。
  结合之前我们记住的照片信息如下,我们便可以拼接出目标照片的地址了。
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br /><br /># 照片地址<br />img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'<br />
  在浏览器输入这个照片地址,我们发现果然就是我们需要的:

  目标照片2.请求数据
  这一步就比较简单了,直接引入requests库,然后get请求即可。
  import requests<br /># 基础URL地址<br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1,<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br /><br />r = requests.get(url, params=parames)<br /># 前面网页分析结果是请求结果为json格式数据<br />j = r.json()<br />
  3.解析数据
  我们查看请求结果中的json数据结构,可以很快找到目标照片的url地址参数:

  json数据结构
  我们以获取单个照片url地址为例展示:
  4.存储数据
  由于本篇抓取的是照片这类二进制文件,因此存储方式可以选择创建一个文件,然后写入请求的二进制文件内容即可。
  # 以作者id和图片id组合而成图片名称<br />name = f'{author_id}-{img_id}.jpg'<br />with open(name,'wb') as f:<br />    f.write(img)<br />
  5.完整代码
  毕竟图虫网提供高质量的图片,而且都是版权所有的,咱们也就只是用于学习演示不要太过分,爬取10页数据。
  代码比较简单不够优雅,没有做模块化处理,大家可以自行优化哈~
  import requests<br />import time<br /><br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /><br /># 翻页<br />num = 10<br />total = 0<br />for page in range(1,num+1):<br />    time.sleep(5)    <br />    parames ={<br />        'page': page,<br />        'count': 20,<br />        'order': 'weekly',<br />        'before_timestamp': ''<br />        }<br />    <br />    r = requests.get(url, params=parames)<br />    j = r.json()<br />    # 组图列表<br />    postList = j['postList']<br />    # 遍历组图<br />    for post in postList:<br />        # 作者id<br />        author_id = post['author_id']        <br />        # 组图照片列表<br />        images = post['images']<br />        # 遍历组图照片列表图片并下载<br />        for image in images:<br />            total = total+1<br />            img_id = image['img_id']<br />            img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'     <br />            r_img = requests.get(img_url)<br />            img = r_img.content<br />            name = f'{author_id}-{img_id}.jpg'<br />            # 写入本地<br />            with open(name,'wb') as f:<br />                f.write(img)<br /><br />            print(f'{page}页 共 {total}张 照片已经下载')<br />

  批量下载
  近期文章Python网络爬虫与文本数据分析bsite库 | 采集B站视频信息、评论数据<br />爬虫实战 | 采集&可视化知乎问题的回答<strong>pdf2docx库 | 转文件格式,支持抽取文件中的表格数据</strong>rpy2库 | 在jupyter中调用R语言代码tidytext | 耳目一新的R-style文本分析库reticulate包 | 在Rmarkdown中调用Python代码plydata库 | 数据操作管道操作符>>plotnine: Python版的ggplot2作图库<br />七夕礼物 | 全网最火的钉子绕线图制作教程<br />读完本文你就了解什么是文本分析<br />文本分析在经管领域中的应用概述  综述:文本分析在市场营销研究中的应用<br />plotnine: Python版的ggplot2作图库小案例: Pandas的apply方法  stylecloud:简洁易用的词云库 用Python绘制近20年地方财政收入变迁史视频  Wow~70G上市公司定期报告数据集<br />漂亮~pandas可以无缝衔接Bokeh  YelpDaset: 酒店管理类数据集10+G  <br /> 查看全部

  Python爬虫 | 批量爬取某图网站高质量小姐姐照片
  鉴于以上情况,这里咱们重点强调声明:本文仅限于做技术交流学习,请勿用作任何非法商用!
  图虫创意是北京字节跳动科技有限公司所创立的正版照片及视频素材平台 ,致力于为用户提供正版素材内容及数字资产管理解决方案。
  0.先看一波美照吧
  
  很正经的图
  接下来,我们按照上次在《》介绍的爬虫流程来展开介绍这次爬虫实战哈。
  1.网页分析
  打开目标网页(%E7%BE%8E%E5%A5%B3),发现下拉会加载更多但是网页地址栏的url没有变化。因此,我们断定这是一个动态网页,于是有了以下步骤:
  需要按“F12”进入到浏览器的开发者模式;点击“Network”—>XHR或JS或者你全部查找看;进行翻页(可能是点击下一页或者下滑加载更多或者直接F5刷新页面);观察第2步中name模块的内容变化,寻找。
  很好,我们找到了照片组图信息所在,如下图所示,在请求的结果中的postList里是单页全部照片组信息列表,列表的每个元素中的imges里是该组照片信息列表。通过这些字段大致能理解照片img_id归属于某个作者user_id或author_id。
  记住这组照片信息:
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br />

  组图照片信息
  我们点开Headers模块,可以看到真实请求地址基础URL和请求参数如下:
  # 基础URL<br />url='https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1, # 随着翻页而递增变化<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br />
  
  真实URL地址及参数
  到这里没完,单纯知道了请求这些组图信息列表的地址,但是每个组图里照片的地址暂时还无法得知。于是我们点开某个组图进行进一步查看,在组图的详情页里,F12->Elements 查看照片元素信息,发现结果如下:

  组图详情页
  在网页HTML源代码里,我们找到了照片的地址为。
  结合之前我们记住的照片信息如下,我们便可以拼接出目标照片的地址了。
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br /><br /># 照片地址<br />img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'<br />
  在浏览器输入这个照片地址,我们发现果然就是我们需要的:

  目标照片2.请求数据
  这一步就比较简单了,直接引入requests库,然后get请求即可。
  import requests<br /># 基础URL地址<br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1,<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br /><br />r = requests.get(url, params=parames)<br /># 前面网页分析结果是请求结果为json格式数据<br />j = r.json()<br />
  3.解析数据
  我们查看请求结果中的json数据结构,可以很快找到目标照片的url地址参数:

  json数据结构
  我们以获取单个照片url地址为例展示:
  4.存储数据
  由于本篇抓取的是照片这类二进制文件,因此存储方式可以选择创建一个文件,然后写入请求的二进制文件内容即可。
  # 以作者id和图片id组合而成图片名称<br />name = f'{author_id}-{img_id}.jpg'<br />with open(name,'wb') as f:<br />    f.write(img)<br />
  5.完整代码
  毕竟图虫网提供高质量的图片,而且都是版权所有的,咱们也就只是用于学习演示不要太过分,爬取10页数据。
  代码比较简单不够优雅,没有做模块化处理,大家可以自行优化哈~
  import requests<br />import time<br /><br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /><br /># 翻页<br />num = 10<br />total = 0<br />for page in range(1,num+1):<br />    time.sleep(5)    <br />    parames ={<br />        'page': page,<br />        'count': 20,<br />        'order': 'weekly',<br />        'before_timestamp': ''<br />        }<br />    <br />    r = requests.get(url, params=parames)<br />    j = r.json()<br />    # 组图列表<br />    postList = j['postList']<br />    # 遍历组图<br />    for post in postList:<br />        # 作者id<br />        author_id = post['author_id']        <br />        # 组图照片列表<br />        images = post['images']<br />        # 遍历组图照片列表图片并下载<br />        for image in images:<br />            total = total+1<br />            img_id = image['img_id']<br />            img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'     <br />            r_img = requests.get(img_url)<br />            img = r_img.content<br />            name = f'{author_id}-{img_id}.jpg'<br />            # 写入本地<br />            with open(name,'wb') as f:<br />                f.write(img)<br /><br />            print(f'{page}页 共 {total}张 照片已经下载')<br />

  批量下载
  近期文章Python网络爬虫与文本数据分析bsite库 | 采集B站视频信息、评论数据<br />爬虫实战 | 采集&可视化知乎问题的回答<strong>pdf2docx库 | 转文件格式,支持抽取文件中的表格数据</strong>rpy2库 | 在jupyter中调用R语言代码tidytext | 耳目一新的R-style文本分析库reticulate包 | 在Rmarkdown中调用Python代码plydata库 | 数据操作管道操作符>>plotnine: Python版的ggplot2作图库<br />七夕礼物 | 全网最火的钉子绕线图制作教程<br />读完本文你就了解什么是文本分析<br />文本分析在经管领域中的应用概述  综述:文本分析在市场营销研究中的应用<br />plotnine: Python版的ggplot2作图库小案例: Pandas的apply方法  stylecloud:简洁易用的词云库 用Python绘制近20年地方财政收入变迁史视频  Wow~70G上市公司定期报告数据集<br />漂亮~pandas可以无缝衔接Bokeh  YelpDaset: 酒店管理类数据集10+G  <br />

python抓取动态网页一)技术的方法思路与方法

网站优化优采云 发表了文章 • 0 个评论 • 20 次浏览 • 2022-06-09 05:02 • 来自相关话题

  python抓取动态网页一)技术的方法思路与方法
  python抓取动态网页
  一)
  三)爬虫技术该部分通过通俗易懂的例子来讲解python语言入门。由于python常被大多数初学者认为是一门弱类型的编程语言,学习难度较大,所以本节课程会通过理论部分的知识讲解,使得学习者对python基础运用的过程有很大的提升,让学习者找到有效的学习方法。通过正确的知识查阅和使用正确的知识点来掌握python编程,能够让掌握python编程的过程更有效率。
  由于python的常见用途为网页抓取、爬虫技术,故本文首先将会讲解网页抓取的一些重要的知识。网页抓取指从互联网上获取具有某种特征的网页(含文字、图片等等),是一种网络上资源抓取和管理的方法,网页抓取技术是通过用户的输入去寻找网页,如果找到则返回搜索结果给用户。在进行抓取的过程中抓取网站也可以进行多次抓取,利用网页的一次抓取方法或者利用一个网站多次抓取,都能够不断抓取到目标网站,给用户浏览的体验度提高。
  本节课我们首先来学习python的基础知识,简单介绍一下抓取网页的方法以及原理,其次讲解scrapy框架及requests库,它们是python网络爬虫框架的基础。1.python抓取网页的方法思路1.1最简单的方法urllib(库)urllib库用于爬取http的网页内容。
  我们在网页中获取某个链接的原理一般分为两种情况:
  1)直接获取:例如:获取网页中某个页面中的某个url地址,并根据页面中的url地址进行网页内容提取。
  2)爬取提取:例如:提取网页中某个链接,并提取其内容,获取网页内容后再进行提取。1.2正则表达式requests(库)requests爬取正则表达式的网页的方法一般可以分为以下四种:requests.get(url).headersrequests.post(url).headersrequests.delete(url).headersrequests.header其中:requests.get(url),requests.post(url)为第一种获取方法,而requests.headers(string),requests.headers(user-agent)等等的只是第二种方法,requests.delete(url),requests.headers(string)为第三种获取方法,下面将进行详细的讲解。
  2.网页爬取实例:爬取中国电信的cmcc中国电信自1998年成立以来,一直是连接世界的中国综合性宽带网络。各类网站的服务器根据访问流量来收费,所以cmcc针对不同的访问流量有不同的cmcc套餐和呼叫中心来收费。一般来说需要访问量越大的网站需要订购越贵的套餐,通常这些网站的ip主要集中在国内,为了节省服务器空间和节省带宽,也可以通过。
  一、首先要知道如何下载cmcc的数据源网址:, 查看全部

  python抓取动态网页一)技术的方法思路与方法
  python抓取动态网页
  一)
  三)爬虫技术该部分通过通俗易懂的例子来讲解python语言入门。由于python常被大多数初学者认为是一门弱类型的编程语言,学习难度较大,所以本节课程会通过理论部分的知识讲解,使得学习者对python基础运用的过程有很大的提升,让学习者找到有效的学习方法。通过正确的知识查阅和使用正确的知识点来掌握python编程,能够让掌握python编程的过程更有效率。
  由于python的常见用途为网页抓取、爬虫技术,故本文首先将会讲解网页抓取的一些重要的知识。网页抓取指从互联网上获取具有某种特征的网页(含文字、图片等等),是一种网络上资源抓取和管理的方法,网页抓取技术是通过用户的输入去寻找网页,如果找到则返回搜索结果给用户。在进行抓取的过程中抓取网站也可以进行多次抓取,利用网页的一次抓取方法或者利用一个网站多次抓取,都能够不断抓取到目标网站,给用户浏览的体验度提高。
  本节课我们首先来学习python的基础知识,简单介绍一下抓取网页的方法以及原理,其次讲解scrapy框架及requests库,它们是python网络爬虫框架的基础。1.python抓取网页的方法思路1.1最简单的方法urllib(库)urllib库用于爬取http的网页内容。
  我们在网页中获取某个链接的原理一般分为两种情况:
  1)直接获取:例如:获取网页中某个页面中的某个url地址,并根据页面中的url地址进行网页内容提取。
  2)爬取提取:例如:提取网页中某个链接,并提取其内容,获取网页内容后再进行提取。1.2正则表达式requests(库)requests爬取正则表达式的网页的方法一般可以分为以下四种:requests.get(url).headersrequests.post(url).headersrequests.delete(url).headersrequests.header其中:requests.get(url),requests.post(url)为第一种获取方法,而requests.headers(string),requests.headers(user-agent)等等的只是第二种方法,requests.delete(url),requests.headers(string)为第三种获取方法,下面将进行详细的讲解。
  2.网页爬取实例:爬取中国电信的cmcc中国电信自1998年成立以来,一直是连接世界的中国综合性宽带网络。各类网站的服务器根据访问流量来收费,所以cmcc针对不同的访问流量有不同的cmcc套餐和呼叫中心来收费。一般来说需要访问量越大的网站需要订购越贵的套餐,通常这些网站的ip主要集中在国内,为了节省服务器空间和节省带宽,也可以通过。
  一、首先要知道如何下载cmcc的数据源网址:,

[Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)

网站优化优采云 发表了文章 • 0 个评论 • 34 次浏览 • 2022-06-05 15:59 • 来自相关话题

  [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)
  前文传送门:
  好久没更新Python相关的内容了,这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分
  上节我们说了如何获取动态网页中的jquery内容
  这节说如何利用selenium模拟浏览器动作
  开发环境
  操作系统:windows 10
  Python版本 :3.6
  爬取网页模块:selenium,PhantomJS
  分析网页模块:BeautifulSoup4
  关于Selenium
  selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如PhantomJS
  具体请参加官网:
  关于PhantomJS
  PhantomJS是一个无头(headless)的WebKit javascript API
  我们可以用它模拟浏览器的操作,也可以用来截图
  具体参加官网:
  模块安装
  lxml为解析网页所必需
  pip3 install selenium
  pip3 install BeautifulSoup4
  pip3 install lxml
  Driver 下载
  这里我们下载Chrome driver和 Phantomjs
  其他的driver见官网
  #drivers
  
  Chrome下载
  下载完成后可以放到系统环境变量中,如:
  C:\Windows\System32
  
  PhatomJS下载
  下载后同样放到系统环境变量中
  下载完成解压后只需要将exe文件放到目录下
  
  网页分析
  我们以幽游白书为例
  打开后发现漫画并没有全部加载需要向下翻页才可以加载完毕
  之后通过开发者工具分析图片的地址
  
  这里我们通过bs4 来提取出所有img地址
  之后通过Python将其保存成图片
  程序原理
  
  代码介绍
  1. import相关的模块
  import selenium.webdriver
  from bs4 import BeautifulSoup
  2. 调用Chrome或者PhantomJS
  driver = selenium.webdriver.Chrome()
  #driver = selenium.webdriver.PhantomJS()
  3. 获取网页源代码
  content=driver.page_source
  4. 获取标题和图片地址之后存入字典
  
  5. 新建目录并下载图片
  这里首先判断是否有该漫画的目录,如果没有则新建,之后下载图片,图片的名称为列表的索引号
  
  执行结果
  
  
  注意事项:
  建议先用Chrome测试OK,再改用PhantomJS执行
  Chrome和PhantomJS在实际向下翻页时有差异,需测试后调节循环次数
  为防止被ban,每次爬取采用了随机延迟的方法
  只能爬取免费的内容
  本脚本仅用于学习用途
  源码位置 查看全部

  [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)
  前文传送门:
  好久没更新Python相关的内容了,这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分
  上节我们说了如何获取动态网页中的jquery内容
  这节说如何利用selenium模拟浏览器动作
  开发环境
  操作系统:windows 10
  Python版本 :3.6
  爬取网页模块:selenium,PhantomJS
  分析网页模块:BeautifulSoup4
  关于Selenium
  selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如PhantomJS
  具体请参加官网:
  关于PhantomJS
  PhantomJS是一个无头(headless)的WebKit javascript API
  我们可以用它模拟浏览器的操作,也可以用来截图
  具体参加官网:
  模块安装
  lxml为解析网页所必需
  pip3 install selenium
  pip3 install BeautifulSoup4
  pip3 install lxml
  Driver 下载
  这里我们下载Chrome driver和 Phantomjs
  其他的driver见官网
  #drivers
  
  Chrome下载
  下载完成后可以放到系统环境变量中,如:
  C:\Windows\System32
  
  PhatomJS下载
  下载后同样放到系统环境变量中
  下载完成解压后只需要将exe文件放到目录下
  
  网页分析
  我们以幽游白书为例
  打开后发现漫画并没有全部加载需要向下翻页才可以加载完毕
  之后通过开发者工具分析图片的地址
  
  这里我们通过bs4 来提取出所有img地址
  之后通过Python将其保存成图片
  程序原理
  
  代码介绍
  1. import相关的模块
  import selenium.webdriver
  from bs4 import BeautifulSoup
  2. 调用Chrome或者PhantomJS
  driver = selenium.webdriver.Chrome()
  #driver = selenium.webdriver.PhantomJS()
  3. 获取网页源代码
  content=driver.page_source
  4. 获取标题和图片地址之后存入字典
  
  5. 新建目录并下载图片
  这里首先判断是否有该漫画的目录,如果没有则新建,之后下载图片,图片的名称为列表的索引号
  
  执行结果
  
  
  注意事项:
  建议先用Chrome测试OK,再改用PhantomJS执行
  Chrome和PhantomJS在实际向下翻页时有差异,需测试后调节循环次数
  为防止被ban,每次爬取采用了随机延迟的方法
  只能爬取免费的内容
  本脚本仅用于学习用途
  源码位置

Python网络爬虫工程师需要掌握的核心技术

网站优化优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-06-04 20:34 • 来自相关话题

  Python网络爬虫工程师需要掌握的核心技术
  
  在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战。基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因。那么做Python网络爬虫需要掌握哪些核心技术呢?以小编推出的《解析Python网络爬虫》课程为例,内容涉及Scrapy框架、分布式爬虫等核心技术,下面我们来一起看一下Python网络爬虫具体的学习内容吧!
  
  Python网络爬虫课程简介:
  为了让具备Python基础的人群适合岗位的需求,小编推出了一门全面的、系统的、简易的Python网络爬虫入门级课程,不仅讲解了学习网络爬虫必备的基础知识,而且加入了爬虫框架的内容,大家学完之后,能够全面地掌握抓取网页和解析网页的多种技术,还能够掌握一些爬虫的扩展知识,如并发下载、识别图像文字、抓取动态内容等。并且大家学完还能熟练地掌握爬虫框架的使用,如Scrapy,以此创建自己的网络爬虫项目,胜任Python网络爬虫工程师相关岗位的工作。
  Python网络爬虫知识大纲:
  第1部分
  主要是带领大家认识网络爬虫,包括爬虫产生背景、什么是爬虫、爬虫的用途、爬虫的分类等。
  第2部分
  主要针对爬虫的实现原理和技术进行讲解,包括爬虫实现原理、爬虫抓取网页的详细流程、通用爬虫中网页的分类、通用爬虫相关网站文件、反爬虫应对策略、为什么选择Python做爬虫等。希望读者能明白爬虫具体是怎样抓取网页的,并对抓取过程中产生的一些问题有所了解,后期会对这些问题提供一些合理的解决方案。
  第3部分
  主要介绍的是网页请求原理,包括浏览网页过程、HTTP网络请求原理、HTTP抓包工具Fiddler。
  第4部分
  介绍了用做抓取网页数据的两个库:urllib和requests。首先介绍了urllib库的基本使用,具体包括使用urllib传输数据、添加特定的Headers、设置代理服务器、超时设置、常见网络异常,然后介绍了更为人性化的requests库,并结合一个百度贴吧的案例,讲解如何使用urllib库抓取网页数据。大家应该能熟练地掌握两个库的使用,并反复使用多加练习,另外还可以参考官网提供的文档深入地学习。
  第5部分
  主要介绍的是解析网页数据的几种技术,包括正则表达式、XPath、Beautiful Soup和JSONPath,以及对封装了这些技术的Python模块或库的基本使用进行了讲解,包括re模块、lxml库、bs4库、json模块,并结合腾讯社招网站的案例,讲解如何使用re模块、lxml库和bs4库分别解析网页数据,以更好地区分这些技术的不同之处。大家在实际工作中,可根据具体情况选择合理的技术进行运用即可。
  第6部分
  主要针对并发下载进行了讲解,包括多线程爬虫流程分析、使用queue模块实现多线程爬虫、协程实现并发爬取,并结合糗事百科的案例,分别使用单线程、多线程、协程三种技术获取网页数据,并分析了三者的性能。
  第7部分
  围绕着抓取动态内容进行介绍,包括动态网页介绍、selenium和PhantomJS概述,selenium和PhantomJS安装配置、selenium和PhantomJS的基本使用,并结合模拟豆瓣网站登陆的案例,讲解了在项目中如何应用selenium和PhantomJS技术。
  第8部分
  主要针对图像识别与文字处理进行讲解,包括Tesseract引擎的下载和安装、pytesseract和PIL库、处理规范格式的文字、处理验证码等,并结合识别本地验证码图片的小程序,讲解了如何利用pytesseract识别图像中的验证码。
  第9部分
  主要介绍了存储爬虫数据,包括数据存储简介、MongoDB数据库简介、使用PyMongo库存储到数据库等,并结合豆瓣电影的案例,讲解了如何一步步从该网站中抓取、解析、存储电影信息。
  第10部分
  主要针对爬虫框架Scrapy进行初步讲解,包括常见爬虫框架介绍、Scrapy框架的架构、运作流程、安装、基本操作等。
  第11部分
  首先介绍了Scrapy终端与核心组件。首先介绍了Scrapy终端的启动和使用,并通过一个示例进行巩固,然后详细介绍了Scrapy框架的一些核心组件,具体包括Spiders、Item Pipeline和Settings,最后结合斗鱼App爬虫的案例,讲解了如何使用Scrapy框架抓取手机App的数据。
  第12部分
  继续介绍自动抓取网页的爬虫CrawlSpider的知识,包括初识爬虫类CrawlSpider、CrawlSpider类的工作原理、通过Rule类决定爬取规则和通过LinkExtractor类提取链接,并开发了一个使用CrawlSpider类爬取腾讯社招网站的案例,在案例中对本部分的知识点加以应用。
  第13部分
  围绕着Scrapy-Redis分布式爬虫进行了讲解,包括Scrapy-Redis的完整架构、运作流程、主要组件、基本使用,以及如何搭建Scrapy-Redis开发环境等,并结合百度百科的案例运用这些知识点。
  以上就是做Python网络爬虫需要掌握的全部核心技术,大家都弄清楚了吗?其实做网络爬虫并不难,只要有科学的学习方法,把理论基础和实战经验结合起来,就能实现快速掌握爬虫核心技术。
  对于初学者想更轻松的学好Python开发,爬虫技术,Python数据分析,人工智能等技术,这里也给大家准备了一套系统教学资源,加Python技术学习qq裙:937667509,免费领取。学习过程中有疑问,群里有专业的老司机免费答疑解惑!
  PS:如果觉得本篇文章对您有所帮助,欢迎关注、订阅!帮忙点个 再看 转发一下分享出去
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
   查看全部

  Python网络爬虫工程师需要掌握的核心技术
  
  在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战。基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因。那么做Python网络爬虫需要掌握哪些核心技术呢?以小编推出的《解析Python网络爬虫》课程为例,内容涉及Scrapy框架、分布式爬虫等核心技术,下面我们来一起看一下Python网络爬虫具体的学习内容吧!
  
  Python网络爬虫课程简介:
  为了让具备Python基础的人群适合岗位的需求,小编推出了一门全面的、系统的、简易的Python网络爬虫入门级课程,不仅讲解了学习网络爬虫必备的基础知识,而且加入了爬虫框架的内容,大家学完之后,能够全面地掌握抓取网页和解析网页的多种技术,还能够掌握一些爬虫的扩展知识,如并发下载、识别图像文字、抓取动态内容等。并且大家学完还能熟练地掌握爬虫框架的使用,如Scrapy,以此创建自己的网络爬虫项目,胜任Python网络爬虫工程师相关岗位的工作。
  Python网络爬虫知识大纲:
  第1部分
  主要是带领大家认识网络爬虫,包括爬虫产生背景、什么是爬虫、爬虫的用途、爬虫的分类等。
  第2部分
  主要针对爬虫的实现原理和技术进行讲解,包括爬虫实现原理、爬虫抓取网页的详细流程、通用爬虫中网页的分类、通用爬虫相关网站文件、反爬虫应对策略、为什么选择Python做爬虫等。希望读者能明白爬虫具体是怎样抓取网页的,并对抓取过程中产生的一些问题有所了解,后期会对这些问题提供一些合理的解决方案。
  第3部分
  主要介绍的是网页请求原理,包括浏览网页过程、HTTP网络请求原理、HTTP抓包工具Fiddler。
  第4部分
  介绍了用做抓取网页数据的两个库:urllib和requests。首先介绍了urllib库的基本使用,具体包括使用urllib传输数据、添加特定的Headers、设置代理服务器、超时设置、常见网络异常,然后介绍了更为人性化的requests库,并结合一个百度贴吧的案例,讲解如何使用urllib库抓取网页数据。大家应该能熟练地掌握两个库的使用,并反复使用多加练习,另外还可以参考官网提供的文档深入地学习。
  第5部分
  主要介绍的是解析网页数据的几种技术,包括正则表达式、XPath、Beautiful Soup和JSONPath,以及对封装了这些技术的Python模块或库的基本使用进行了讲解,包括re模块、lxml库、bs4库、json模块,并结合腾讯社招网站的案例,讲解如何使用re模块、lxml库和bs4库分别解析网页数据,以更好地区分这些技术的不同之处。大家在实际工作中,可根据具体情况选择合理的技术进行运用即可。
  第6部分
  主要针对并发下载进行了讲解,包括多线程爬虫流程分析、使用queue模块实现多线程爬虫、协程实现并发爬取,并结合糗事百科的案例,分别使用单线程、多线程、协程三种技术获取网页数据,并分析了三者的性能。
  第7部分
  围绕着抓取动态内容进行介绍,包括动态网页介绍、selenium和PhantomJS概述,selenium和PhantomJS安装配置、selenium和PhantomJS的基本使用,并结合模拟豆瓣网站登陆的案例,讲解了在项目中如何应用selenium和PhantomJS技术。
  第8部分
  主要针对图像识别与文字处理进行讲解,包括Tesseract引擎的下载和安装、pytesseract和PIL库、处理规范格式的文字、处理验证码等,并结合识别本地验证码图片的小程序,讲解了如何利用pytesseract识别图像中的验证码。
  第9部分
  主要介绍了存储爬虫数据,包括数据存储简介、MongoDB数据库简介、使用PyMongo库存储到数据库等,并结合豆瓣电影的案例,讲解了如何一步步从该网站中抓取、解析、存储电影信息。
  第10部分
  主要针对爬虫框架Scrapy进行初步讲解,包括常见爬虫框架介绍、Scrapy框架的架构、运作流程、安装、基本操作等。
  第11部分
  首先介绍了Scrapy终端与核心组件。首先介绍了Scrapy终端的启动和使用,并通过一个示例进行巩固,然后详细介绍了Scrapy框架的一些核心组件,具体包括Spiders、Item Pipeline和Settings,最后结合斗鱼App爬虫的案例,讲解了如何使用Scrapy框架抓取手机App的数据。
  第12部分
  继续介绍自动抓取网页的爬虫CrawlSpider的知识,包括初识爬虫类CrawlSpider、CrawlSpider类的工作原理、通过Rule类决定爬取规则和通过LinkExtractor类提取链接,并开发了一个使用CrawlSpider类爬取腾讯社招网站的案例,在案例中对本部分的知识点加以应用。
  第13部分
  围绕着Scrapy-Redis分布式爬虫进行了讲解,包括Scrapy-Redis的完整架构、运作流程、主要组件、基本使用,以及如何搭建Scrapy-Redis开发环境等,并结合百度百科的案例运用这些知识点。
  以上就是做Python网络爬虫需要掌握的全部核心技术,大家都弄清楚了吗?其实做网络爬虫并不难,只要有科学的学习方法,把理论基础和实战经验结合起来,就能实现快速掌握爬虫核心技术。
  对于初学者想更轻松的学好Python开发,爬虫技术,Python数据分析,人工智能等技术,这里也给大家准备了一套系统教学资源,加Python技术学习qq裙:937667509,免费领取。学习过程中有疑问,群里有专业的老司机免费答疑解惑!
  PS:如果觉得本篇文章对您有所帮助,欢迎关注、订阅!帮忙点个 再看 转发一下分享出去
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
  

Python网络爬虫精要

网站优化优采云 发表了文章 • 0 个评论 • 34 次浏览 • 2022-06-03 21:19 • 来自相关话题

  Python网络爬虫精要
  
  目的
  学习如何从互联网上获取数据。数据科学必须掌握的技能之一。
  本文所用到的第三方库如下: requests, parsel, selenium
  requests负责向网页发送HTTP请求并得到响应,parsel负责解析响应字符串,selenium负责JavaScript的渲染。
  网络爬虫是什么
  网络爬虫是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。
  如何爬取网站信息
  写爬虫之前,我们必须确保能够爬取目标网站的信息。
  不过在此之前必须弄清以下三个问题:
  网站是否已经提供了api
  网站是静态的还是动态的
  网站是否有反爬的对策
  情形1:开放api的网站
  一个网站倘若开放了api,那你就可以直接GET到它的json数据。
  比如xkcd的about页就提供了api供你下载
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />requests.get('https://xkcd.com/614/info.0.json').json()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  那么如何判断一个网站是否开放api呢?有3种方法:
  在站内寻找api入口
  用搜索引擎搜索“某网站 api”
  抓包。有的网站虽然用到了ajax(比如果壳网的瀑布流文章),但是通过抓包还是能够获取XHR里的json数据的。
  怎么抓包:F12 - Network - F5刷新即可 | 或者用fiddle等工具也可以
  情形2:不开放api的网站
  如果此网站是静态页面,那么你就可以用requests库发送请求,再用HTML解析库(lxml、parsel等)来解析响应的text
  解析库强烈推荐parsel,不仅语法和css选择器类似,而且速度也挺快,Scrapy用的就是它。
  你需要了解一下css选择器的语法(xpath也行),并且学会看网页的审查元素。
  比如获取konachan的所有原图链接
  from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get('https://konachan.com/post')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />imgs = tree.css('a.directlink::attr(href)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如果此网站是动态页面,先用selenium来渲染JS,再用HTML解析库来解析driver的page_source。
  比如获取hitomi.la的数据(这里把chrome设置成了无头模式)
  from selenium import webdriver<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options = webdriver.ChromeOptions()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options.add_argument('--headless')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver = webdriver.Chrome(options=options)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver.get('https://hitomi.la/type/gamecg-all-1.html')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=driver.page_source)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />gallery_content = tree.css('.gallery-content > div')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  情形3:反爬的网站
  目前的反爬策略常见的有:验证码、登录、封ip等。
  验证码:利用打码平台破解(如果硬上的话用opencv或keras训练图)
  登录:利用requests的post或者selenium模拟用户进行模拟登陆
  封ip:买些代理ip(免费ip一般都不管用),requests中传入proxies参数即可
  其他防反爬方法:伪装User-Agent,禁用cookies等
  推荐用fake-useragent来伪装User-Agent
  from fake_useragent import UserAgent<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />headers = {'User-Agent': UserAgent().random}<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get(url, headers=headers)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如何编写结构化的爬虫
  如果能成功地爬取网站信息,那么你已经成功了一大半。
  其实爬虫的架构很简单,无非就是创造一个tasklist,对tasklist里的每一个task调用crawl函数。
  大多数网页的url构造都是有规律的,你只需根据它用列表推倒式来构造出tasklist对于那些url不变的动态网页,先考虑抓包,不行再用selenium点击下一页
  如果追求速度的话,可以考虑用concurrent.futures或者asyncio等库。
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from concurrent import futures<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />domain = 'https://www.doutula.com'<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />def crawl(url):<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    res = requests.get(url)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    imgs = tree.css('img.lazy::attr(data-original)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    # save the imgs ...<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />if __name__ == '__main__':<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tasklist = [f'{domain}/article/list/?page={i}' for i in range(1, 551)]<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    with futures.ThreadPoolExecutor(50) as executor:<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />        executor.map(crawl, tasklist)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  数据存储的话,看你的需求,一般都是存到数据库中,只要熟悉对应的驱动即可。
  常用的数据库驱动有:pymysql(MySQL),pymongo(MongoDB)
  如果你需要框架的话
  文章读到这里,你应该对爬虫的基本结构有了一个清晰的认识,这时你可以去上手框架了。
  轻量级框架(looter):
  工业级框架(scrapy):
  点击这里参与Python编程学习
  本文作者
  ♚
  alphardex,Pythonista && Otaku,努力转行中的一位测绘人员。
  地址:/people/ban-zai-liu-shang
  投稿邮箱:
  欢迎点击申请
  
  Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以公安部、工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。
   查看全部

  Python网络爬虫精要
  
  目的
  学习如何从互联网上获取数据。数据科学必须掌握的技能之一。
  本文所用到的第三方库如下: requests, parsel, selenium
  requests负责向网页发送HTTP请求并得到响应,parsel负责解析响应字符串,selenium负责JavaScript的渲染。
  网络爬虫是什么
  网络爬虫是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。
  如何爬取网站信息
  写爬虫之前,我们必须确保能够爬取目标网站的信息。
  不过在此之前必须弄清以下三个问题:
  网站是否已经提供了api
  网站是静态的还是动态的
  网站是否有反爬的对策
  情形1:开放api的网站
  一个网站倘若开放了api,那你就可以直接GET到它的json数据。
  比如xkcd的about页就提供了api供你下载
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />requests.get('https://xkcd.com/614/info.0.json').json()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  那么如何判断一个网站是否开放api呢?有3种方法:
  在站内寻找api入口
  用搜索引擎搜索“某网站 api”
  抓包。有的网站虽然用到了ajax(比如果壳网的瀑布流文章),但是通过抓包还是能够获取XHR里的json数据的。
  怎么抓包:F12 - Network - F5刷新即可 | 或者用fiddle等工具也可以
  情形2:不开放api的网站
  如果此网站是静态页面,那么你就可以用requests库发送请求,再用HTML解析库(lxml、parsel等)来解析响应的text
  解析库强烈推荐parsel,不仅语法和css选择器类似,而且速度也挺快,Scrapy用的就是它。
  你需要了解一下css选择器的语法(xpath也行),并且学会看网页的审查元素。
  比如获取konachan的所有原图链接
  from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get('https://konachan.com/post')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />imgs = tree.css('a.directlink::attr(href)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如果此网站是动态页面,先用selenium来渲染JS,再用HTML解析库来解析driver的page_source。
  比如获取hitomi.la的数据(这里把chrome设置成了无头模式)
  from selenium import webdriver<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options = webdriver.ChromeOptions()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options.add_argument('--headless')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver = webdriver.Chrome(options=options)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver.get('https://hitomi.la/type/gamecg-all-1.html')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=driver.page_source)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />gallery_content = tree.css('.gallery-content > div')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  情形3:反爬的网站
  目前的反爬策略常见的有:验证码、登录、封ip等。
  验证码:利用打码平台破解(如果硬上的话用opencv或keras训练图)
  登录:利用requests的post或者selenium模拟用户进行模拟登陆
  封ip:买些代理ip(免费ip一般都不管用),requests中传入proxies参数即可
  其他防反爬方法:伪装User-Agent,禁用cookies等
  推荐用fake-useragent来伪装User-Agent
  from fake_useragent import UserAgent<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />headers = {'User-Agent': UserAgent().random}<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get(url, headers=headers)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如何编写结构化的爬虫
  如果能成功地爬取网站信息,那么你已经成功了一大半。
  其实爬虫的架构很简单,无非就是创造一个tasklist,对tasklist里的每一个task调用crawl函数。
  大多数网页的url构造都是有规律的,你只需根据它用列表推倒式来构造出tasklist对于那些url不变的动态网页,先考虑抓包,不行再用selenium点击下一页
  如果追求速度的话,可以考虑用concurrent.futures或者asyncio等库。
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from concurrent import futures<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />domain = 'https://www.doutula.com'<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />def crawl(url):<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    res = requests.get(url)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    imgs = tree.css('img.lazy::attr(data-original)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    # save the imgs ...<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />if __name__ == '__main__':<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tasklist = [f'{domain}/article/list/?page={i}' for i in range(1, 551)]<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    with futures.ThreadPoolExecutor(50) as executor:<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />        executor.map(crawl, tasklist)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  数据存储的话,看你的需求,一般都是存到数据库中,只要熟悉对应的驱动即可。
  常用的数据库驱动有:pymysql(MySQL),pymongo(MongoDB)
  如果你需要框架的话
  文章读到这里,你应该对爬虫的基本结构有了一个清晰的认识,这时你可以去上手框架了。
  轻量级框架(looter):
  工业级框架(scrapy):
  点击这里参与Python编程学习
  本文作者
  ♚
  alphardex,Pythonista && Otaku,努力转行中的一位测绘人员。
  地址:/people/ban-zai-liu-shang
  投稿邮箱:
  欢迎点击申请
  
  Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以公安部、工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。
  

python抓取动态网页数据技术文档操作数据的三种方法。

网站优化优采云 发表了文章 • 0 个评论 • 32 次浏览 • 2022-06-02 01:01 • 来自相关话题

  python抓取动态网页数据技术文档操作数据的三种方法。
  python抓取动态网页数据技术文档操作数据的三种方法。它们是什么时候被用于数据抓取呢?这些操作所涉及的内容是什么?请在阅读本文时仔细思考。数据在个性化数据有一个让商家看起来很酷的名字:数据驱动。意味着数据驱动可以通过使用某种机器学习来加速抓取。当然,它依赖于成熟的经验,可以使网站获得更好的用户体验,并且应用程序的数据抓取能力提高。
  另一方面,网站的爬虫的采样要小得多,这样我们可以在数据领域对获取的数据进行任何预处理,并对其进行二次加工。虽然现在很多网站都在使用爬虫来通过留言和交易抓取小部分用户,但即使你计划将这些数据用作收益,这些数据通常没有很好的处理对象。例如,你能想象在一个真正有趣的过程中获取这些数据吗?你可以看到数据结构的相互关联,并且这些步骤可以逆过来在数据源之间进行交互。
  这可能没有你想要抓取的数据本身那么多,但是可以简单设置而且速度很快,使其成为数据驱动的一个很好的手段。那么,你应该怎么抓取网页呢?python抓取动态网页数据技术文档预处理步骤如下:找到网页中不存在或者明显含有错误数据的html类型;利用python工具从中提取并分析;使用pandas库从静态页面获取数据并将数据写入到一个pandas文件中;首先,当解决了数据库与数据抓取问题之后,也解决了与内容调制过程,至少每个页面有13个不同的调制器-更改页面xml格式并将其转换为link。
  a:修改html类型给出很多一站式服务,但不是所有的都适用于这个。首先从可从url中获取内容的网页类型开始。通常是:名为“the”的网页。new-html。new-html由带数据的url的第一行来编码。urlextension=”the”。例如。b:调制字符串上面的过程是创建pandas的数据并将数据写入文件中,然后您可以利用ipython将该操作结果传递给另一台电脑进行调制。
  它以pandas中的from_content函数来获取。另一种方法可以利用pipeline操作来完成-ipython会调制三个参数-一个在master和swpeer之间传递,另一个在package中传递,第三个在客户端。在url返回之前,所有这些都是文件。预处理成功抓取了网页之后,您可以使用在ipythonmessages中输出字符串的方法将数据内容传递给另一台电脑。
  这将为您准备了一个字符串,以便在单个电脑上查看。c:将数据导入文件您可以通过写入一个.ftp文件(通常由ipv4提供)或者.htaccess(一个文件)。d:修改返回的字符串您可以通过将数据写入pandas来取得其格式,但是这可能并不是最好的选择。row_name是不正确的。请用pandasm。 查看全部

  python抓取动态网页数据技术文档操作数据的三种方法。
  python抓取动态网页数据技术文档操作数据的三种方法。它们是什么时候被用于数据抓取呢?这些操作所涉及的内容是什么?请在阅读本文时仔细思考。数据在个性化数据有一个让商家看起来很酷的名字:数据驱动。意味着数据驱动可以通过使用某种机器学习来加速抓取。当然,它依赖于成熟的经验,可以使网站获得更好的用户体验,并且应用程序的数据抓取能力提高。
  另一方面,网站的爬虫的采样要小得多,这样我们可以在数据领域对获取的数据进行任何预处理,并对其进行二次加工。虽然现在很多网站都在使用爬虫来通过留言和交易抓取小部分用户,但即使你计划将这些数据用作收益,这些数据通常没有很好的处理对象。例如,你能想象在一个真正有趣的过程中获取这些数据吗?你可以看到数据结构的相互关联,并且这些步骤可以逆过来在数据源之间进行交互。
  这可能没有你想要抓取的数据本身那么多,但是可以简单设置而且速度很快,使其成为数据驱动的一个很好的手段。那么,你应该怎么抓取网页呢?python抓取动态网页数据技术文档预处理步骤如下:找到网页中不存在或者明显含有错误数据的html类型;利用python工具从中提取并分析;使用pandas库从静态页面获取数据并将数据写入到一个pandas文件中;首先,当解决了数据库与数据抓取问题之后,也解决了与内容调制过程,至少每个页面有13个不同的调制器-更改页面xml格式并将其转换为link。
  a:修改html类型给出很多一站式服务,但不是所有的都适用于这个。首先从可从url中获取内容的网页类型开始。通常是:名为“the”的网页。new-html。new-html由带数据的url的第一行来编码。urlextension=”the”。例如。b:调制字符串上面的过程是创建pandas的数据并将数据写入文件中,然后您可以利用ipython将该操作结果传递给另一台电脑进行调制。
  它以pandas中的from_content函数来获取。另一种方法可以利用pipeline操作来完成-ipython会调制三个参数-一个在master和swpeer之间传递,另一个在package中传递,第三个在客户端。在url返回之前,所有这些都是文件。预处理成功抓取了网页之后,您可以使用在ipythonmessages中输出字符串的方法将数据内容传递给另一台电脑。
  这将为您准备了一个字符串,以便在单个电脑上查看。c:将数据导入文件您可以通过写入一个.ftp文件(通常由ipv4提供)或者.htaccess(一个文件)。d:修改返回的字符串您可以通过将数据写入pandas来取得其格式,但是这可能并不是最好的选择。row_name是不正确的。请用pandasm。

爬虫Python入门好学吗?学什么?

网站优化优采云 发表了文章 • 0 个评论 • 23 次浏览 • 2022-05-30 12:18 • 来自相关话题

  爬虫Python入门好学吗?学什么?
  
  爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学。但要多看多练,有自己的逻辑想法。用Python达到自己的学习目的才算有价值。如果是入门学习了解,开始学习不难,但深入学习有难度,特别大项目。
  
  大部分爬虫按“发送请求——获得页面——解析页面——抽取并储存内容”的流程来进行,模拟了我们使用浏览器获取网页信息的过程。向服务器发送请求后,会得到返回的页面,通过解析页面之后,可以抽取我们想要的那部分信息,并存储在指定的文档或数据库中。
  爬虫Python入门学习分三个阶段:
  一、零基础阶段:
  从零开始学爬虫,系统入门,开始从0上手爬虫,爬虫除了必需的理论知识外更重要的是实际应用,带你抓取4种主流网站数据,掌握主流爬虫抓取方法。
  具备主流网站的数据抓取的能力是此阶段的学习目标
  学习重点:爬虫所需的计算机网络/前端/正则//xpath/CSS选择器等基础知识;实现静态网页,动态网页两大主流网页类型数据抓取;模拟登陆、应对反爬、识别验证码等难点详细讲解;多线程,多进程等工作常见应用场景难题讲解
  二、主流框架
  主流框架Scrapy实现海量数据抓取,从原生爬虫到框架的能力提升,学完你能彻底玩转Scrapy框架,开发一套自己的分布式爬虫系统,完全胜任中级Python工程师工作。获取高效抓取海量数据的能力。
  学习重点:Scrapy框架知识讲解spider/FormRequest/CrawlSpider等;从单机爬虫到分布式爬虫系统讲解;Scrapy突破反爬虫的限制以及Scrapy原理;Scrapy的更多高级特性包括sscrapy信号、自定义中间件;已有的海量数据结合Elasticsearch打造搜索引擎
  三、爬虫
  深入App数据抓取,爬虫能力提升,应对App数据抓取和数据可视化展示,能力不再局限于网页爬虫. 从此拓宽你的爬虫业务,增强自身核心竞争力。掌握App数据抓取实现数据可视化
  学习重点:学会主流抓包工具Fiddler/Mitmproxy 的应用;4种App数据抓取实战,学练结合深入掌握App爬虫技巧;基于Docker打造多任务抓取系统,提升工作效率;掌握Pyecharts库基础,绘制基本图形,地图等实现数据可视化。
  爬虫Python应用在很多领域,如爬取数据,进行市场调研和商业分析;作为机器学习、数据挖掘的原始数据;爬取优质的资源:图片、文本、视频。掌握正确的方法,在短时间内做到能够爬取主流网站的数据非常容易实现。建议爬虫Python入门从开始就树立一个具体的目标,在目标的驱动下,学习才会更加高效。
  end
  扫下方二维码加老师微信或是搜索老师微信号:XTUOL1988【备注学习Python】领取Python web开发,Python爬虫,Python数据分析,人工智能等学习教程。带你从零基础系统性的学好Python!也可以加老师建的Python技术学习教程qq裙:245345507,二者加一个就可以!
  
  
  欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
  万水千山总是情,点个【在看】行不行
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。 查看全部

  爬虫Python入门好学吗?学什么?
  
  爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学。但要多看多练,有自己的逻辑想法。用Python达到自己的学习目的才算有价值。如果是入门学习了解,开始学习不难,但深入学习有难度,特别大项目。
  
  大部分爬虫按“发送请求——获得页面——解析页面——抽取并储存内容”的流程来进行,模拟了我们使用浏览器获取网页信息的过程。向服务器发送请求后,会得到返回的页面,通过解析页面之后,可以抽取我们想要的那部分信息,并存储在指定的文档或数据库中。
  爬虫Python入门学习分三个阶段:
  一、零基础阶段:
  从零开始学爬虫,系统入门,开始从0上手爬虫,爬虫除了必需的理论知识外更重要的是实际应用,带你抓取4种主流网站数据,掌握主流爬虫抓取方法。
  具备主流网站的数据抓取的能力是此阶段的学习目标
  学习重点:爬虫所需的计算机网络/前端/正则//xpath/CSS选择器等基础知识;实现静态网页,动态网页两大主流网页类型数据抓取;模拟登陆、应对反爬、识别验证码等难点详细讲解;多线程,多进程等工作常见应用场景难题讲解
  二、主流框架
  主流框架Scrapy实现海量数据抓取,从原生爬虫到框架的能力提升,学完你能彻底玩转Scrapy框架,开发一套自己的分布式爬虫系统,完全胜任中级Python工程师工作。获取高效抓取海量数据的能力。
  学习重点:Scrapy框架知识讲解spider/FormRequest/CrawlSpider等;从单机爬虫到分布式爬虫系统讲解;Scrapy突破反爬虫的限制以及Scrapy原理;Scrapy的更多高级特性包括sscrapy信号、自定义中间件;已有的海量数据结合Elasticsearch打造搜索引擎
  三、爬虫
  深入App数据抓取,爬虫能力提升,应对App数据抓取和数据可视化展示,能力不再局限于网页爬虫. 从此拓宽你的爬虫业务,增强自身核心竞争力。掌握App数据抓取实现数据可视化
  学习重点:学会主流抓包工具Fiddler/Mitmproxy 的应用;4种App数据抓取实战,学练结合深入掌握App爬虫技巧;基于Docker打造多任务抓取系统,提升工作效率;掌握Pyecharts库基础,绘制基本图形,地图等实现数据可视化。
  爬虫Python应用在很多领域,如爬取数据,进行市场调研和商业分析;作为机器学习、数据挖掘的原始数据;爬取优质的资源:图片、文本、视频。掌握正确的方法,在短时间内做到能够爬取主流网站的数据非常容易实现。建议爬虫Python入门从开始就树立一个具体的目标,在目标的驱动下,学习才会更加高效。
  end
  扫下方二维码加老师微信或是搜索老师微信号:XTUOL1988【备注学习Python】领取Python web开发,Python爬虫,Python数据分析,人工智能等学习教程。带你从零基础系统性的学好Python!也可以加老师建的Python技术学习教程qq裙:245345507,二者加一个就可以!
  
  
  欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
  万水千山总是情,点个【在看】行不行
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

最专业的python入门学习课程抓取动态网页+数据可视化

网站优化优采云 发表了文章 • 0 个评论 • 29 次浏览 • 2022-09-11 19:01 • 来自相关话题

  最专业的python入门学习课程抓取动态网页+数据可视化
  
  python抓取动态网页+数据可视化,效果如下:python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程更多爬虫的学习资料,可以看看我之前的回答。我们学习爬虫,要掌握怎样的技能,才可以在众多同行竞争者中脱颖而出。
  
  从公开课中获取?可以从公开课中获取到比较好的资源呢?学习方法和学习方法,将会直接决定你是否能够持续地高效地学习。python网站爬虫,做爬虫,可以先从零基础学起,使用爬虫框架,activate等。这一步只是基础,通过后续的学习,将会达到高效的爬取效果。推荐书籍《python爬虫开发实战》,在一些爬虫的学习论坛也有相关分享,比如方凌老师。祝题主学习愉快~。
  爬虫简历很多,你说的这种是高级爬虫,一般有特定工作经验的会熟练使用爬虫框架gooseeker,不然看的话都是初级爬虫。uniqjs,web爬虫基础架构,flask,django都有案例爬虫代码。可以学着学着爬爬试试,这种案例很多,要么学得不知道咋写。从网站爬数据的话,用scrapy爬虫框架,可以学着看看实现一个独立的爬虫小项目。这种案例比较少。上边两本书推荐看scrapy官方文档,功能都列得很清楚。 查看全部

  最专业的python入门学习课程抓取动态网页+数据可视化
  
  python抓取动态网页+数据可视化,效果如下:python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程python抓取动态网页+数据可视化-公开课,最专业的python入门学习课程更多爬虫的学习资料,可以看看我之前的回答。我们学习爬虫,要掌握怎样的技能,才可以在众多同行竞争者中脱颖而出。
  
  从公开课中获取?可以从公开课中获取到比较好的资源呢?学习方法和学习方法,将会直接决定你是否能够持续地高效地学习。python网站爬虫,做爬虫,可以先从零基础学起,使用爬虫框架,activate等。这一步只是基础,通过后续的学习,将会达到高效的爬取效果。推荐书籍《python爬虫开发实战》,在一些爬虫的学习论坛也有相关分享,比如方凌老师。祝题主学习愉快~。
  爬虫简历很多,你说的这种是高级爬虫,一般有特定工作经验的会熟练使用爬虫框架gooseeker,不然看的话都是初级爬虫。uniqjs,web爬虫基础架构,flask,django都有案例爬虫代码。可以学着学着爬爬试试,这种案例很多,要么学得不知道咋写。从网站爬数据的话,用scrapy爬虫框架,可以学着看看实现一个独立的爬虫小项目。这种案例比较少。上边两本书推荐看scrapy官方文档,功能都列得很清楚。

python抓取动态网页视频-javascript和python视频视频教程(一)

网站优化优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-09-09 13:22 • 来自相关话题

  python抓取动态网页视频-javascript和python视频视频教程(一)
  python抓取动态网页视频,从本期教程开始,会对python自带的一些调用接口实现对动态网页的抓取。接下来的第一期,python和python抓取视频教程将会是对javascript简单入门。javascript入门本篇主要介绍ie浏览器的抓取过程。常用session、cookie的使用不做赘述,网上相关文章很多。
  
  接下来则会从页面路径的获取和抓取过程展开,最后介绍如何显示网页。(一)页面路径的获取传统的抓取办法大致分为以下几类:读取一个文件的dom,然后逐个selectdom来读取内容写入一个文件,然后逐个selectdom来读取内容读取页面的javascript代码,然后写入页面。读取页面javascript代码读取页面的javascript代码读取页面javascript代码varresult=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text);javascript.setattribute('text','h1""");javascript.setattribute('text','javascript:""");javascript.setattribute('text','h1""");然后,通过设置javascript标签的属性,再找到对应的方法,然后写入网页。
  
  varresult1=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text"""');javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','"h1""");(二)javascript抓取整个网页浏览器本身是无法抓取整个页面的,只能抓取局部。
  所以通过对某一网页上的javascript代码进行批量抓取以实现抓取整个网页。这里介绍一种通过定制javascript模块的方式实现对整个页面的抓取。首先,写一个工具类:executionchannel,代码如下:importurlfrom'executionchannel';importrequestfrom'request';importjqueryfrom'jquery';importxhrfrom'xhr';importrefrom'request/request';importxmlhttprequestfrom'xmlhttprequest';importcookiefrom'cookie';importproxyfrom'proxy';importp。 查看全部

  python抓取动态网页视频-javascript和python视频视频教程(一)
  python抓取动态网页视频,从本期教程开始,会对python自带的一些调用接口实现对动态网页的抓取。接下来的第一期,python和python抓取视频教程将会是对javascript简单入门。javascript入门本篇主要介绍ie浏览器的抓取过程。常用session、cookie的使用不做赘述,网上相关文章很多。
  
  接下来则会从页面路径的获取和抓取过程展开,最后介绍如何显示网页。(一)页面路径的获取传统的抓取办法大致分为以下几类:读取一个文件的dom,然后逐个selectdom来读取内容写入一个文件,然后逐个selectdom来读取内容读取页面的javascript代码,然后写入页面。读取页面javascript代码读取页面的javascript代码读取页面javascript代码varresult=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text);javascript.setattribute('text','h1""");javascript.setattribute('text','javascript:""");javascript.setattribute('text','h1""");然后,通过设置javascript标签的属性,再找到对应的方法,然后写入网页。
  
  varresult1=document.ready();varjavascript=document.createelement('javascript');javascript.setattribute('text','javascript:"""//class="text"""');javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','h1""");javascript.setattribute('text','"h1""");(二)javascript抓取整个网页浏览器本身是无法抓取整个页面的,只能抓取局部。
  所以通过对某一网页上的javascript代码进行批量抓取以实现抓取整个网页。这里介绍一种通过定制javascript模块的方式实现对整个页面的抓取。首先,写一个工具类:executionchannel,代码如下:importurlfrom'executionchannel';importrequestfrom'request';importjqueryfrom'jquery';importxhrfrom'xhr';importrefrom'request/request';importxmlhttprequestfrom'xmlhttprequest';importcookiefrom'cookie';importproxyfrom'proxy';importp。

【自学Python】书笔记 26Python动态Web开发基础

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2022-08-26 05:32 • 来自相关话题

  【自学Python】书笔记 26Python动态Web开发基础
  一、Python动态Web开发基础
  从软件的应用领域划分,通常将软件分为桌面软件、Web软件和移动软件三大类。
  在计算机软件开发应用中,Web软件开发是最常见的一种典型应用,特别是随着动态网站的不断发展,Web编程已经成为程序设计中的最重要应用领域之一。
  在当今Web开发技术条件下,最主流的Web编程技术主要有ASP.NET、PHP、Java等。
  作为一门功能强大的面向对象编程语言,Python语言也可以像其他经典开发语言一样用来开发Web应用程序。
  二、Python CGI编程
  CGI是Common Gateway Interface的缩写,表示通用网关接口。
  CGI是一段运行在服务器上的程序,例如运行在HTTP服务器上提供同客户端HRML页面的接口。
  三、CGI介绍
  CGI是WWW技术中最重要的技术之一,有着不可替代的重要地位。
  CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
  CGI规范允许Web服务器执行外部程序,并将它们的输出发生给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  处理过程的第一步是Web服务器从客户端接到了请求(即GET或者POST),并调用相应的应用程序。
  然后它等待HTML页面,与此同时,客户端也在等待。
  一旦应用程序处理完成,它会将生成的动态HTML页面返回服务器端。
  接下来,服务器端再将这个最终结果返回给用户。
  对于表单处理过程,服务器与外部应用程序交互,受到并将生成的HTML页面通过CGI返回客户端。
  (感觉就是“电话通讯”的原理,这边发生数据到服务器,而服务器作为“中介传话筒”,或者说是单纯的“人机对话”?总之,在打通“连接”后,剩下的依旧是类似本地的数据操作了。)
  由此可见,CGI在Web服务器和应用之间充当了交互作用,这样才能够处理用户表单,生成并返回最终的动态HTML页。
  四、搭建CGI服务器
  要像使用Python语言进行CGI开发,首先需要安装一个Web服务器,并将其配置成可以处理Python CGI请求,然后让Web服务器访问CGI脚本。
  当然,其中有些操作也许需要获得系统管理员的帮助。
  下面介绍在Windows系统中搭建CGI服务器的过程。
  在IDLE编辑器中,输入如下命令可以获取Python自带的服务器的地址。
  from http.server import CGIHTTPRequestHandler,test;test(CGIHTTPRequestHandler)
  在CMD控制台界面中,通过输入Python命令也可以获取Python自带服务器的地址。
  
  例如:
  python python的安装根路径\Python39_64\Lib\http\server.py
  其实找到该文件,双击运行也可以。
  不过还是建议安装一个真正的Web服务器,如Apache、ligHTTPD或thttpd。
  其中在Apache中有许多插件或模块可以处理PythonCGI,使用Apache服务器访问CGI的流程如下:
  1)自行安装好Apache(httpd)环境,确保Apache在系统中已经能成功运行并可以访问。
  网站:
  (下载的是本地压缩包,解压后选择一个地方存放。我这里为D:\Apache24)
  2)打开D:\Apache24\conf里面的httpd.conf文件。(以txt格式打开)
  使用Ctrl+F查找下面的内容。
  (1)找到
  Define SRVROOT "C:/Apache24"
  修改为:(这是Apache24文件位置)
  Define SRVROOT "D:/Apache24"
  (2)找到
  ScriptAlias /cgi-bin/ “${SRVROOT}/cgi-bin/”
  修改为:(这里应该是要调用的py文件根目录)
  ScriptAlias /cgi-bin/ "D:/c/cgi-bin"
  (3)找到
  Listen 80
  修改为:(这里是端口号,自定义)
  Listen 8080
  (4)找到
  
   AllowOverride None Options None Require all granted
  改成如下:(这是.py文件路径地址)
   AllowOverride None Options Indexes FollowSymLinks ExecCGI Require all granted Require host ip
  (5)找到下面的内容。
  添加.py 后缀:在 AddHandler 中添加 .py 后缀,这样就可以访问 .py 结尾的 python 脚本文件
  #AddHandler cgi-script .cgi
  去掉此行的“#”注释(如果有),在后面可以追加后缀“.py”,这是可选的。如果不加,也可以使用“.cgi”后缀。
  修改成:
  AddHandler cgi-script .cgi .pl .py
  (6)开启cgi_module modules/mod_cgi.so模块(即去掉模块前的注释#):
  LoadModule cgi_module modules/mod_cgi.so
  (7)在D:\Apache24\bin目录下,使用“httpd -k install”安装Apache主服务,然后输入“httpd –k start”开启Apache服务(管理员身份运行DOS)
  (因为我已经安装过了。)
  (8)双击ApacheMonitor.exe文件。
  (9)屏幕左下角会弹出图标,点击“start”进行启动。
  (10)输入localhost:8080后。
  (11)然而输入其具体文件却无法显示。
  翻译结果:
  被禁止的
  您没有访问此资源的权限。
  (可惜没找到解决办法。)
  具体请参考: 查看全部

  【自学Python】书笔记 26Python动态Web开发基础
  一、Python动态Web开发基础
  从软件的应用领域划分,通常将软件分为桌面软件、Web软件和移动软件三大类。
  在计算机软件开发应用中,Web软件开发是最常见的一种典型应用,特别是随着动态网站的不断发展,Web编程已经成为程序设计中的最重要应用领域之一。
  在当今Web开发技术条件下,最主流的Web编程技术主要有ASP.NET、PHP、Java等。
  作为一门功能强大的面向对象编程语言,Python语言也可以像其他经典开发语言一样用来开发Web应用程序。
  二、Python CGI编程
  CGI是Common Gateway Interface的缩写,表示通用网关接口。
  CGI是一段运行在服务器上的程序,例如运行在HTTP服务器上提供同客户端HRML页面的接口。
  三、CGI介绍
  CGI是WWW技术中最重要的技术之一,有着不可替代的重要地位。
  CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
  CGI规范允许Web服务器执行外部程序,并将它们的输出发生给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  处理过程的第一步是Web服务器从客户端接到了请求(即GET或者POST),并调用相应的应用程序。
  然后它等待HTML页面,与此同时,客户端也在等待。
  一旦应用程序处理完成,它会将生成的动态HTML页面返回服务器端。
  接下来,服务器端再将这个最终结果返回给用户。
  对于表单处理过程,服务器与外部应用程序交互,受到并将生成的HTML页面通过CGI返回客户端。
  (感觉就是“电话通讯”的原理,这边发生数据到服务器,而服务器作为“中介传话筒”,或者说是单纯的“人机对话”?总之,在打通“连接”后,剩下的依旧是类似本地的数据操作了。)
  由此可见,CGI在Web服务器和应用之间充当了交互作用,这样才能够处理用户表单,生成并返回最终的动态HTML页。
  四、搭建CGI服务器
  要像使用Python语言进行CGI开发,首先需要安装一个Web服务器,并将其配置成可以处理Python CGI请求,然后让Web服务器访问CGI脚本。
  当然,其中有些操作也许需要获得系统管理员的帮助。
  下面介绍在Windows系统中搭建CGI服务器的过程。
  在IDLE编辑器中,输入如下命令可以获取Python自带的服务器的地址。
  from http.server import CGIHTTPRequestHandler,test;test(CGIHTTPRequestHandler)
  在CMD控制台界面中,通过输入Python命令也可以获取Python自带服务器的地址。
  
  例如:
  python python的安装根路径\Python39_64\Lib\http\server.py
  其实找到该文件,双击运行也可以。
  不过还是建议安装一个真正的Web服务器,如Apache、ligHTTPD或thttpd。
  其中在Apache中有许多插件或模块可以处理PythonCGI,使用Apache服务器访问CGI的流程如下:
  1)自行安装好Apache(httpd)环境,确保Apache在系统中已经能成功运行并可以访问。
  网站:
  (下载的是本地压缩包,解压后选择一个地方存放。我这里为D:\Apache24)
  2)打开D:\Apache24\conf里面的httpd.conf文件。(以txt格式打开)
  使用Ctrl+F查找下面的内容。
  (1)找到
  Define SRVROOT "C:/Apache24"
  修改为:(这是Apache24文件位置)
  Define SRVROOT "D:/Apache24"
  (2)找到
  ScriptAlias /cgi-bin/ “${SRVROOT}/cgi-bin/”
  修改为:(这里应该是要调用的py文件根目录)
  ScriptAlias /cgi-bin/ "D:/c/cgi-bin"
  (3)找到
  Listen 80
  修改为:(这里是端口号,自定义)
  Listen 8080
  (4)找到
  
   AllowOverride None Options None Require all granted
  改成如下:(这是.py文件路径地址)
   AllowOverride None Options Indexes FollowSymLinks ExecCGI Require all granted Require host ip
  (5)找到下面的内容。
  添加.py 后缀:在 AddHandler 中添加 .py 后缀,这样就可以访问 .py 结尾的 python 脚本文件
  #AddHandler cgi-script .cgi
  去掉此行的“#”注释(如果有),在后面可以追加后缀“.py”,这是可选的。如果不加,也可以使用“.cgi”后缀。
  修改成:
  AddHandler cgi-script .cgi .pl .py
  (6)开启cgi_module modules/mod_cgi.so模块(即去掉模块前的注释#):
  LoadModule cgi_module modules/mod_cgi.so
  (7)在D:\Apache24\bin目录下,使用“httpd -k install”安装Apache主服务,然后输入“httpd –k start”开启Apache服务(管理员身份运行DOS)
  (因为我已经安装过了。)
  (8)双击ApacheMonitor.exe文件。
  (9)屏幕左下角会弹出图标,点击“start”进行启动。
  (10)输入localhost:8080后。
  (11)然而输入其具体文件却无法显示。
  翻译结果:
  被禁止的
  您没有访问此资源的权限。
  (可惜没找到解决办法。)
  具体请参考:

python抓取动态网页教程动态(实战_小白入门教程)

网站优化优采云 发表了文章 • 0 个评论 • 24 次浏览 • 2022-08-22 11:01 • 来自相关话题

  python抓取动态网页教程动态(实战_小白入门教程)
  python抓取动态网页教程python动态网页实战_小白入门教程python抓取动态网页教程,不过我觉得用java做的话完全可以抓取,可以拿java做数据分析,python做动态网页抓取就很容易,当然这是个人观点,
  
  爬去github的动态,基本上github是挂着的,只要想看,肯定有你想要的数据。什么微博微信淘宝知乎,肯定都是好使的。
  问题是只要能让前端实现。每天一个网页不算多,看看url地址抓数据就好了,再看看怎么解析重定向加载也不算很难。前端如果不是用python肯定也是可以顺手弄的,只要有对应的数据库罢了,就是麻烦点,不过如果想稍微完善点的话。
  
  可以有下面几种方法:用python来实现,比如selenium+phantomjs,直接给他发一个请求,然后他自己就会跳转到你想要爬取的页面了。当然,这样的话一个页面能爬取到的数据只有一部分。我个人不是特别推荐这种方法,毕竟要会用和懂思路,如果你有精力和时间的话,当然没问题了。用python或java来实现,这两种语言的库可以让你自己实现解析,这样页面获取的数据量就会少很多。
  还可以写一个爬虫来抓你爬取到的数据,不过这个需要你对数据分析,这个我没有尝试过,不过看官方的爬虫文档应该可以找到解决方案。看你的爬虫需求,如果只要完成爬取工作,解析也基本上是按照要求自己实现就好了。具体爬虫要怎么设计,这个要看具体情况了。反正解析这些页面你是可以写插件用来抓取页面。对于使用googleapi来爬取数据,这个需要你一定的英文知识和编程能力。
  爬取github上的全世界的css或者js文件,对于你这种对css和js有一定了解的人来说一点也不难,因为抓取规则都不难写。你的情况建议你用python解析js,并得到json文件,存入数据库,再用js来模拟点击的。最后上面两种方法我都不是特别推荐,数据量太大的话,爬虫编程并不简单,而且github上的数据量也不是特别大,一般都在千万级别。你可以考虑试试第三种方法,去他们开源的库里面抓取数据。 查看全部

  python抓取动态网页教程动态(实战_小白入门教程)
  python抓取动态网页教程python动态网页实战_小白入门教程python抓取动态网页教程,不过我觉得用java做的话完全可以抓取,可以拿java做数据分析,python做动态网页抓取就很容易,当然这是个人观点,
  
  爬去github的动态,基本上github是挂着的,只要想看,肯定有你想要的数据。什么微博微信淘宝知乎,肯定都是好使的。
  问题是只要能让前端实现。每天一个网页不算多,看看url地址抓数据就好了,再看看怎么解析重定向加载也不算很难。前端如果不是用python肯定也是可以顺手弄的,只要有对应的数据库罢了,就是麻烦点,不过如果想稍微完善点的话。
  
  可以有下面几种方法:用python来实现,比如selenium+phantomjs,直接给他发一个请求,然后他自己就会跳转到你想要爬取的页面了。当然,这样的话一个页面能爬取到的数据只有一部分。我个人不是特别推荐这种方法,毕竟要会用和懂思路,如果你有精力和时间的话,当然没问题了。用python或java来实现,这两种语言的库可以让你自己实现解析,这样页面获取的数据量就会少很多。
  还可以写一个爬虫来抓你爬取到的数据,不过这个需要你对数据分析,这个我没有尝试过,不过看官方的爬虫文档应该可以找到解决方案。看你的爬虫需求,如果只要完成爬取工作,解析也基本上是按照要求自己实现就好了。具体爬虫要怎么设计,这个要看具体情况了。反正解析这些页面你是可以写插件用来抓取页面。对于使用googleapi来爬取数据,这个需要你一定的英文知识和编程能力。
  爬取github上的全世界的css或者js文件,对于你这种对css和js有一定了解的人来说一点也不难,因为抓取规则都不难写。你的情况建议你用python解析js,并得到json文件,存入数据库,再用js来模拟点击的。最后上面两种方法我都不是特别推荐,数据量太大的话,爬虫编程并不简单,而且github上的数据量也不是特别大,一般都在千万级别。你可以考虑试试第三种方法,去他们开源的库里面抓取数据。

《零基础轻松入门python爬虫》之python抓取动态网页源码

网站优化优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-08-21 22:05 • 来自相关话题

  《零基础轻松入门python爬虫》之python抓取动态网页源码
  python抓取动态网页源码,实时监控并反馈到redis或者mongodb中。分页效果下面是爬取的几个例子关于python动态网页抓取,本小节重点讲解反爬虫的实现,内容比较多,要深入的请耐心阅读哦。———动态网页抓取之前要搞清楚请求的两种形式,requests和get(post)请求只是一种请求形式(post请求),但本节教程是讲解爬虫的实现。
  
  为什么要有get请求,这个跟第一节会讲的http协议有关。get请求可以返回抓取时发出的响应。http会发送4个部分组成的响应:请求参数(如json格式)、头部报文、requestheaders、http状态码。1,请求参数httpheaders可以看成是http报文的附加参数,用来封装好http报文里面数据的格式和字段名。
  1.1http的dom上的图示是httpheaders最基本的部分解析结构其中:content-type是响应的类型,其实就是content-length,accept是http通信的条件状态码,timeout是超时,主要是为了和服务器交互设定的。httpmethod是响应具体哪种方式,比如请求get或者post。
  
  httpreferer是域名,对方能在当前浏览器搜索到,那就是referer参数,当然如果不存在可以设置。这些dom上的东西要记牢,因为各种形式的http请求在响应中会返回不同的内容。比如get请求一般返回页面地址,post请求可能返回空的源码或者json数据。1.2浏览器对响应的解析结构上图是请求响应最基本的解析结构其中headers是无用的,即使有,也是不会有内容,那么需要记住,使用requests,get,post请求时,需要将其拆分看待,我的python学习笔记《零基础轻松入门python爬虫之——web》整理好的文章:用python3抓取淘宝网大数据,3分钟搞定动态网页实时抓取。
  (持续更新中)如何用python抓取电影天眼网图片?-章壹的回答用python爬取天眼网,免费领取大数据必备工具及书籍。用python爬取电影天眼网图片的具体操作。 查看全部

  《零基础轻松入门python爬虫》之python抓取动态网页源码
  python抓取动态网页源码,实时监控并反馈到redis或者mongodb中。分页效果下面是爬取的几个例子关于python动态网页抓取,本小节重点讲解反爬虫的实现,内容比较多,要深入的请耐心阅读哦。———动态网页抓取之前要搞清楚请求的两种形式,requests和get(post)请求只是一种请求形式(post请求),但本节教程是讲解爬虫的实现。
  
  为什么要有get请求,这个跟第一节会讲的http协议有关。get请求可以返回抓取时发出的响应。http会发送4个部分组成的响应:请求参数(如json格式)、头部报文、requestheaders、http状态码。1,请求参数httpheaders可以看成是http报文的附加参数,用来封装好http报文里面数据的格式和字段名。
  1.1http的dom上的图示是httpheaders最基本的部分解析结构其中:content-type是响应的类型,其实就是content-length,accept是http通信的条件状态码,timeout是超时,主要是为了和服务器交互设定的。httpmethod是响应具体哪种方式,比如请求get或者post。
  
  httpreferer是域名,对方能在当前浏览器搜索到,那就是referer参数,当然如果不存在可以设置。这些dom上的东西要记牢,因为各种形式的http请求在响应中会返回不同的内容。比如get请求一般返回页面地址,post请求可能返回空的源码或者json数据。1.2浏览器对响应的解析结构上图是请求响应最基本的解析结构其中headers是无用的,即使有,也是不会有内容,那么需要记住,使用requests,get,post请求时,需要将其拆分看待,我的python学习笔记《零基础轻松入门python爬虫之——web》整理好的文章:用python3抓取淘宝网大数据,3分钟搞定动态网页实时抓取。
  (持续更新中)如何用python抓取电影天眼网图片?-章壹的回答用python爬取天眼网,免费领取大数据必备工具及书籍。用python爬取电影天眼网图片的具体操作。

python抓取动态网页目前还不太可行。(图)

网站优化优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-07-29 14:04 • 来自相关话题

  python抓取动态网页目前还不太可行。(图)
  
  python抓取动态网页目前还不太可行。动态网页的动态对于同一个网站来说可能是同一个域名下的所有不同网页(图片、视频等等),如果需要抓取的网页多达100+甚至几千,那真是要抓狂了。不如手动切换url,抓取特定网页,然后对url进行解析,来实现对分页内容的爬取。比如你要抓取知乎,那么把知乎网页上所有设置评论的url输入抓取服务器,在本地用python解析,然后去知乎网页里得到结果即可。
  
  又找到一个方法,写爬虫,去一个网站找它有过什么活动。然后去爬。网页就又是动态的了,开始很难抓。因为每个登录的都抓。但是当你发现一个网站某个板块有活动你就可以换一个url去抓了。例如淘宝某个店铺的页面,一大堆商品堆起来这就是它的活动列表了。差不多就这意思。
  关于这个问题。你要知道,我们用浏览器打开一个页面是你的浏览器去主动给页面上的东西进行下载,而这样的一个过程,服务器一定是收到信息的。有的浏览器收到信息,你才能打开。如果这个页面是你从互联网上找到的,而当前浏览器不在线,你只能把服务器的信息丢弃掉。但是,即使当前服务器不在线,你在手机或电脑等地方刷新网页,浏览器响应就会更新,因为在某些情况下(例如网页需要重新加载),一个网页,可能会放到某些网站去,而你只是暂时跳转一下。所以,你关注到的动态网页的话,其实是服务器收到了你的主动刷新的网页,服务器响应给你的东西。 查看全部

  python抓取动态网页目前还不太可行。(图)
  
  python抓取动态网页目前还不太可行。动态网页的动态对于同一个网站来说可能是同一个域名下的所有不同网页(图片、视频等等),如果需要抓取的网页多达100+甚至几千,那真是要抓狂了。不如手动切换url,抓取特定网页,然后对url进行解析,来实现对分页内容的爬取。比如你要抓取知乎,那么把知乎网页上所有设置评论的url输入抓取服务器,在本地用python解析,然后去知乎网页里得到结果即可。
  
  又找到一个方法,写爬虫,去一个网站找它有过什么活动。然后去爬。网页就又是动态的了,开始很难抓。因为每个登录的都抓。但是当你发现一个网站某个板块有活动你就可以换一个url去抓了。例如淘宝某个店铺的页面,一大堆商品堆起来这就是它的活动列表了。差不多就这意思。
  关于这个问题。你要知道,我们用浏览器打开一个页面是你的浏览器去主动给页面上的东西进行下载,而这样的一个过程,服务器一定是收到信息的。有的浏览器收到信息,你才能打开。如果这个页面是你从互联网上找到的,而当前浏览器不在线,你只能把服务器的信息丢弃掉。但是,即使当前服务器不在线,你在手机或电脑等地方刷新网页,浏览器响应就会更新,因为在某些情况下(例如网页需要重新加载),一个网页,可能会放到某些网站去,而你只是暂时跳转一下。所以,你关注到的动态网页的话,其实是服务器收到了你的主动刷新的网页,服务器响应给你的东西。

python爬虫第三篇如何通过动态网页获取手机号号

网站优化优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2022-07-12 08:02 • 来自相关话题

  python爬虫第三篇如何通过动态网页获取手机号号
  python抓取动态网页教程。其实python爬虫一直都很火热,在企业里有广泛的应用,
  
  一、教程项目1.实验原理首先是会把网页的一些数据进行预处理,看会不会丢失数据。在使用urllib包中的request时获取服务器返回的请求头。之后将这些数据和数据库中对应的url地址对比,从而知道哪个服务器返回的数据是我们想要的数据。进而用urllib.request库抓取网页内容。最后用urllib库存储数据库中的数据即可。
  二、相关概念urllib库是python中经常使用的库,其中urllib.request是第一个由python发明的模块,它的request传递了哪些信息。urllib.parse是一个用于从资源文件中取出数据的模块。python的资源文件是字符串或者一个json对象,如果使用http包中的request库来获取数据,则需要将其转换为字符串传递给urllib包中的request来取数据。
  
  request中还包含了下载、抓取页面、分析html等操作方法。urllib.error是一个有关url关键字(request中的request对象及request传递给它的信息)错误的库,它包含从url处获取错误信息的方法。urllib.parse是一个用于从http服务器取数据的模块,request处取数据的方法主要通过parse方法而不是parse方法。
  parse方法,一般而言是接受一个参数out来接受响应html文件,比如用java就是out.post或者out.get。urllib.parse.error处理异常,不能响应错误信息,而是直接返回错误信息的文本内容,通常和一个带badbundle的对象一起使用。
  三、python爬虫第三篇如何通过动态网页获取手机号 查看全部

  python爬虫第三篇如何通过动态网页获取手机号号
  python抓取动态网页教程。其实python爬虫一直都很火热,在企业里有广泛的应用,
  
  一、教程项目1.实验原理首先是会把网页的一些数据进行预处理,看会不会丢失数据。在使用urllib包中的request时获取服务器返回的请求头。之后将这些数据和数据库中对应的url地址对比,从而知道哪个服务器返回的数据是我们想要的数据。进而用urllib.request库抓取网页内容。最后用urllib库存储数据库中的数据即可。
  二、相关概念urllib库是python中经常使用的库,其中urllib.request是第一个由python发明的模块,它的request传递了哪些信息。urllib.parse是一个用于从资源文件中取出数据的模块。python的资源文件是字符串或者一个json对象,如果使用http包中的request库来获取数据,则需要将其转换为字符串传递给urllib包中的request来取数据。
  
  request中还包含了下载、抓取页面、分析html等操作方法。urllib.error是一个有关url关键字(request中的request对象及request传递给它的信息)错误的库,它包含从url处获取错误信息的方法。urllib.parse是一个用于从http服务器取数据的模块,request处取数据的方法主要通过parse方法而不是parse方法。
  parse方法,一般而言是接受一个参数out来接受响应html文件,比如用java就是out.post或者out.get。urllib.parse.error处理异常,不能响应错误信息,而是直接返回错误信息的文本内容,通常和一个带badbundle的对象一起使用。
  三、python爬虫第三篇如何通过动态网页获取手机号

Java新手入门教程之scrapyweb呗用java的话和方法

网站优化优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-07-08 13:00 • 来自相关话题

  Java新手入门教程之scrapyweb呗用java的话和方法
  python抓取动态网页信息这个答案算是一个完整的python抓取网页示例了。同时它也可以作为一篇新手入门教程使用。
  scrapyweb框架+pandas,python2.7的版本都可以。网上现在有些教程使用java,但我个人觉得难度和难度,可能和java没有亲密的程度,两者合用的用力再狠一点。我是java转python的,算比较早入行了。不知道现在国内有哪些教程。
  
  统计数据的话,爬虫也可以用python,
  java读不动那就javascript呗
  
  用java的话,多采用bootstrap,bootstrap5已经出来了。这个是比较标准的框架了,也可以说是模块化框架,有xml/html/json、css、图片加载、javascript等模块。vs或者vscode这样的编辑器可以利用react来做快速的部署,svn可以加速。如果java语言不好,可以采用bottle和bootstrap1,主要看你想抓什么。
  我比较熟悉python,javascrapy我也用过,感觉scrapy的库比较多,尤其是numpy和pandas的包之类的可以方便很多,我自己也正在找工作,
  python可以用scrapy框架,解决自然语言处理等的一些问题,也可以用pandas库进行矩阵处理等。 查看全部

  Java新手入门教程之scrapyweb呗用java的话和方法
  python抓取动态网页信息这个答案算是一个完整的python抓取网页示例了。同时它也可以作为一篇新手入门教程使用。
  scrapyweb框架+pandas,python2.7的版本都可以。网上现在有些教程使用java,但我个人觉得难度和难度,可能和java没有亲密的程度,两者合用的用力再狠一点。我是java转python的,算比较早入行了。不知道现在国内有哪些教程。
  
  统计数据的话,爬虫也可以用python,
  java读不动那就javascript呗
  
  用java的话,多采用bootstrap,bootstrap5已经出来了。这个是比较标准的框架了,也可以说是模块化框架,有xml/html/json、css、图片加载、javascript等模块。vs或者vscode这样的编辑器可以利用react来做快速的部署,svn可以加速。如果java语言不好,可以采用bottle和bootstrap1,主要看你想抓什么。
  我比较熟悉python,javascrapy我也用过,感觉scrapy的库比较多,尤其是numpy和pandas的包之类的可以方便很多,我自己也正在找工作,
  python可以用scrapy框架,解决自然语言处理等的一些问题,也可以用pandas库进行矩阵处理等。

Python反爬虫(9) | 大型网站最常见的反爬-文字反扒

网站优化优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-06-24 09:28 • 来自相关话题

  Python反爬虫(9) | 大型网站最常见的反爬-文字反扒
  回顾:
  随着互联网的发展,Python的崛起,很多网站经常被外面的爬虫程序骚扰,有什么方法可以阻止爬虫吗?
  阻止爬虫也就称之为反爬虫,反爬虫涉及到的技术比较综合,说简单也简单,说复杂也复杂,看具体要做到哪种保护程度了。
  
  针对于不同的网站,它的反爬措施不一样,常见的反爬有User-Agent、ip代理、cookie认证,js加密等等,与之对应所保护的数据也不一样。比如某宝某猫等电商网站,那么店铺信息用户信息就比较重要了,像是某眼电影网站,它对于电影评分,票房等信息做了反爬处理。
  我们今天的采集目标网站是某论坛,当对其文章的文本数据进行采集时,但是发现有字体反爬措施,就是有的文本数据被替换了。
  一、需求分析
  我们是需要爬取论坛文本数据,如下图所示:
  
  部分网页源码展示:
  
  我们发现文本数据是在网页源码里面的。
  二、发起请求
  import requests<br />url = "https://club.autohome.com.cn/b ... %3Bbr />header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}<br />r = requests.get(url, headers=header)<br />html = etree.HTML(r.text)  <br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br />print(content)<br />
  然后得到如下数据(部分数据截图):
  
  虽然在网页源码里面存在目标数据,但是通过requests简单请求之后发现有的文字被特殊字符替换掉了,此时再次查看Elenments对应的标签里的数据,如下图所示:
  
  由图可以发现有的字被替换掉了,所以我们需要找到汉字被替换的方式,然后替换回去。
  三、字体替换
  我们知道系统字体一般都是xxxx.ttf的文件形式,如下图所示:
  
  通过检查发现该网站中使用的字体对应的是myfont,这个很明显是网站为了反爬设置的自定义的字体:
  
  了解css的伙计应该知道,网页的字体样式放在了style标签里面,如下图所示:
  然后拿到url对应属性(xxx57..ttf),
  ///g1/M02/D0/99/wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf
  查看后发现是一个字体文件:
  然后打开字体查看文件,把字体文件拖拽进去,如下图所示:(使用软件为FontCreator,可以查看字体的软件)
  如果不想使用软件,可以打开百度字体平台网站,对应页面和软件打开是一样的
  
  粗略一看其实发现不了什么,所以我们需要使用fontTools第三方库查看字体文件:
  from fontTools.ttLib import TTFont<br />font = TTFont('./wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />print(font.getGlyphOrder())<br />
  结果如下图所示:
  
  然后我们发现比如在先前的特殊字符表中,
  
  这三个字应该分别对应于,大 、的、一,首先大对应的后缀为edb8,在字体文件的输出的列表中中有一个uniEDB8,对应于第六个,然后再FontCreator软件中刚好对应第六个汉字大,如下图所示:
  
  所以规律就是这样的。
  四、数据抓取
  1、先把对应的汉字打出来储存在一个列表中;
  word_list = ['很', '五', '多', '远', '大', '十', '更', '了', '的', '矮', '不', '少', '九', '三', '八', '一', '右', '坏', '近', '着', '呢','左', '是', '长', '六', '上', '短', '七', '高', '二', '得', '好', '下', '和', '四', '地', '小', '低']<br />
  2、把字体文件对应的特殊字符保存到另一个列表中,边进行处理;
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />unilist = font.getGlyphOrder()<br />uni_list = []<br />for i in unilist[1:]:<br />    s = r'\u' + i[3:]<br />    uni_list.append(s)<br />print(uni_list)<br />
  但是问题出现了,结果如下:
  
  我们发现出现了两个反斜线,所以需要使用eval函数简单修改:
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br /><br />unilist = font.getGlyphOrder()<br /># print(unilist)<br /><br />uni_list = []<br />for i in unilist[1:]:<br />    # print(i)<br />    s = eval(r"'\u" + i[3:] + "'")<br />    # print(s)<br />    uni_list.append(s)<br />
  3、由于之前得到的不完整的文章数据是以一个列表的形式,所以需要把他拼接为字符串,然后使用replace(old,new),进行替换:
  # ....前面代码省略<br />html = etree.HTML(result)  # result为请求网页源码<br /><br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br /><br />contents = ''.join(content)<br />
  4、最后进行替换:
  for i in range(len(uni_list)):<br />    contents = contents.replace(uni_list[i], word_list[i])<br /><br />print(contents)<br />
  结果如下,文字替换成功:
  
  五、小结
  通常在爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用 Python 爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码。这种一般是网站设置了字体反爬。
  字体反爬是一种比较常见的反爬方式,因为很多网站的文字信息是比较重要的,像是前面提到的猫眼电影电影票房评分等数据,非常重要,网站维护者当然会把这种数据进行反爬处理,只要好好分析,还是能够抓取到目标数据。
  回顾: 查看全部

  Python反爬虫(9) | 大型网站最常见的反爬-文字反扒
  回顾:
  随着互联网的发展,Python的崛起,很多网站经常被外面的爬虫程序骚扰,有什么方法可以阻止爬虫吗?
  阻止爬虫也就称之为反爬虫,反爬虫涉及到的技术比较综合,说简单也简单,说复杂也复杂,看具体要做到哪种保护程度了。
  
  针对于不同的网站,它的反爬措施不一样,常见的反爬有User-Agent、ip代理、cookie认证,js加密等等,与之对应所保护的数据也不一样。比如某宝某猫等电商网站,那么店铺信息用户信息就比较重要了,像是某眼电影网站,它对于电影评分,票房等信息做了反爬处理。
  我们今天的采集目标网站是某论坛,当对其文章的文本数据进行采集时,但是发现有字体反爬措施,就是有的文本数据被替换了。
  一、需求分析
  我们是需要爬取论坛文本数据,如下图所示:
  
  部分网页源码展示:
  
  我们发现文本数据是在网页源码里面的。
  二、发起请求
  import requests<br />url = "https://club.autohome.com.cn/b ... %3Bbr />header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}<br />r = requests.get(url, headers=header)<br />html = etree.HTML(r.text)  <br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br />print(content)<br />
  然后得到如下数据(部分数据截图):
  
  虽然在网页源码里面存在目标数据,但是通过requests简单请求之后发现有的文字被特殊字符替换掉了,此时再次查看Elenments对应的标签里的数据,如下图所示:
  
  由图可以发现有的字被替换掉了,所以我们需要找到汉字被替换的方式,然后替换回去。
  三、字体替换
  我们知道系统字体一般都是xxxx.ttf的文件形式,如下图所示:
  
  通过检查发现该网站中使用的字体对应的是myfont,这个很明显是网站为了反爬设置的自定义的字体:
  
  了解css的伙计应该知道,网页的字体样式放在了style标签里面,如下图所示:
  然后拿到url对应属性(xxx57..ttf),
  ///g1/M02/D0/99/wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf
  查看后发现是一个字体文件:
  然后打开字体查看文件,把字体文件拖拽进去,如下图所示:(使用软件为FontCreator,可以查看字体的软件)
  如果不想使用软件,可以打开百度字体平台网站,对应页面和软件打开是一样的
  
  粗略一看其实发现不了什么,所以我们需要使用fontTools第三方库查看字体文件:
  from fontTools.ttLib import TTFont<br />font = TTFont('./wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />print(font.getGlyphOrder())<br />
  结果如下图所示:
  
  然后我们发现比如在先前的特殊字符表中,
  
  这三个字应该分别对应于,大 、的、一,首先大对应的后缀为edb8,在字体文件的输出的列表中中有一个uniEDB8,对应于第六个,然后再FontCreator软件中刚好对应第六个汉字大,如下图所示:
  
  所以规律就是这样的。
  四、数据抓取
  1、先把对应的汉字打出来储存在一个列表中;
  word_list = ['很', '五', '多', '远', '大', '十', '更', '了', '的', '矮', '不', '少', '九', '三', '八', '一', '右', '坏', '近', '着', '呢','左', '是', '长', '六', '上', '短', '七', '高', '二', '得', '好', '下', '和', '四', '地', '小', '低']<br />
  2、把字体文件对应的特殊字符保存到另一个列表中,边进行处理;
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br />unilist = font.getGlyphOrder()<br />uni_list = []<br />for i in unilist[1:]:<br />    s = r'\u' + i[3:]<br />    uni_list.append(s)<br />print(uni_list)<br />
  但是问题出现了,结果如下:
  
  我们发现出现了两个反斜线,所以需要使用eval函数简单修改:
  font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')<br /><br />unilist = font.getGlyphOrder()<br /># print(unilist)<br /><br />uni_list = []<br />for i in unilist[1:]:<br />    # print(i)<br />    s = eval(r"'\u" + i[3:] + "'")<br />    # print(s)<br />    uni_list.append(s)<br />
  3、由于之前得到的不完整的文章数据是以一个列表的形式,所以需要把他拼接为字符串,然后使用replace(old,new),进行替换:
  # ....前面代码省略<br />html = etree.HTML(result)  # result为请求网页源码<br /><br />content = html.xpath("//div[@class='tz-paragraph']//text()")<br /><br />contents = ''.join(content)<br />
  4、最后进行替换:
  for i in range(len(uni_list)):<br />    contents = contents.replace(uni_list[i], word_list[i])<br /><br />print(contents)<br />
  结果如下,文字替换成功:
  
  五、小结
  通常在爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用 Python 爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码。这种一般是网站设置了字体反爬。
  字体反爬是一种比较常见的反爬方式,因为很多网站的文字信息是比较重要的,像是前面提到的猫眼电影电影票房评分等数据,非常重要,网站维护者当然会把这种数据进行反爬处理,只要好好分析,还是能够抓取到目标数据。
  回顾:

Python动态网页爬虫技术

网站优化优采云 发表了文章 • 0 个评论 • 42 次浏览 • 2022-06-23 09:32 • 来自相关话题

  Python动态网页爬虫技术
  知乎专栏:经管人学数据分析
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import requests<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import jsonfor i in range(5):
   page_start = str(i * 20)  # 注释1
   url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start  # 注释2
   headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
   }
   response = requests.get(url=url, headers=headers, verify=False)
   content = response.content.decode()
   content_list = json.loads(content)['subjects']  # 注释3
   for item in content_list:  # 注释4
       title = item['title']  #注释5
       rate = item['rate']  # 注释6
       link = item['url']  # 注释7
       print(title, rate, link)</p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:\Program Files (x86)\Google\Chrome\Application,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from selenium import webdriver
driver = webdriver.Chrome()  # 注释1<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.maximize_window()  # 注释2<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.get(url)  # 注释3<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />dl_list = driver.find_elements_by_class_name('item')  # 注释4<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />for dl in dl_list:
   name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text  # 注释5
   price = dl.find_element_by_class_name('cprice-area').text  # 注释6
   sale = dl.find_element_by_class_name('sale-area').text  # 注释7
   comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text  # 注释8
   print(name, price, sale, comment)
driver.close()  # 注释9</p>
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  课后作业
  这里给大家留两个小作业,感兴趣的可以自行测试。
  请大家使用API请求法自行在QQ音乐上找一首收费下载的歌曲,在不登录账号的情况下对这首歌曲进行下载操作。
  请大家使用selenium爬取知乎首页的热门话题或话题回答100条。
  关于作者
  作者是一名即将毕业的大四学生,自学爬虫并作为数个爬虫项目的主要开发者,对各种爬虫有一定的了解和项目经验,目前正在自学分布式爬虫的内容,也将在后面陆续为大家更新。同时作者也是一个狂热的信息安全爱好者。感谢大家的支持。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程: 查看全部

  Python动态网页爬虫技术
  知乎专栏:经管人学数据分析
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import requests<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import jsonfor i in range(5):
   page_start = str(i * 20)  # 注释1
   url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start  # 注释2
   headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
   }
   response = requests.get(url=url, headers=headers, verify=False)
   content = response.content.decode()
   content_list = json.loads(content)['subjects']  # 注释3
   for item in content_list:  # 注释4
       title = item['title']  #注释5
       rate = item['rate']  # 注释6
       link = item['url']  # 注释7
       print(title, rate, link)</p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:\Program Files (x86)\Google\Chrome\Application,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin: 0px 0.15em;padding: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre;overflow: auto;border-radius: 3px;border-color: rgb(204, 204, 204);border-style: solid;border-width: 1px;-moz-border-top-colors: none;-moz-border-left-colors: none;-moz-border-bottom-colors: none;-moz-border-right-colors: none;color: rgb(51, 51, 51);background-color: rgb(248, 248, 248);display: block !important;line-height: 1.5em;text-align: justify;"># -*- coding: utf-8 -*-<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from selenium import webdriver
driver = webdriver.Chrome()  # 注释1<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.maximize_window()  # 注释2<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />driver.get(url)  # 注释3<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />dl_list = driver.find_elements_by_class_name('item')  # 注释4<br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />for dl in dl_list:
   name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text  # 注释5
   price = dl.find_element_by_class_name('cprice-area').text  # 注释6
   sale = dl.find_element_by_class_name('sale-area').text  # 注释7
   comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text  # 注释8
   print(name, price, sale, comment)
driver.close()  # 注释9</p>
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  课后作业
  这里给大家留两个小作业,感兴趣的可以自行测试。
  请大家使用API请求法自行在QQ音乐上找一首收费下载的歌曲,在不登录账号的情况下对这首歌曲进行下载操作。
  请大家使用selenium爬取知乎首页的热门话题或话题回答100条。
  关于作者
  作者是一名即将毕业的大四学生,自学爬虫并作为数个爬虫项目的主要开发者,对各种爬虫有一定的了解和项目经验,目前正在自学分布式爬虫的内容,也将在后面陆续为大家更新。同时作者也是一个狂热的信息安全爱好者。感谢大家的支持。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

网络爬虫:Python动态网页爬虫2种技术方式及示例

网站优化优采云 发表了文章 • 0 个评论 • 40 次浏览 • 2022-06-20 00:30 • 来自相关话题

  网络爬虫:Python动态网页爬虫2种技术方式及示例
  点击上方“安全优佳” 可以订阅哦!
  
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import requests<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import jsonfor i in range(5):<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> page_start = str(i * 20) # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> }<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> response = requests.get(url=url, headers=headers, verify=False)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content = response.content.decode()<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content_list = json.loads(content)['subjects'] # 注释3for item in content_list: # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> title = item['title'] #注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> rate = item['rate'] # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> link = item['url'] # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(title, rate, link)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:Program Files (x86)GoogleChromeApplication,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />from selenium import webdriver<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver = webdriver.Chrome() # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.maximize_window() # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.get(url) # 注释3<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />dl_list = driver.find_elements_by_class_name('item') # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />for dl in dl_list:<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text # 注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> price = dl.find_element_by_class_name('cprice-area').text # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> sale = dl.find_element_by_class_name('sale-area').text # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text # 注释8<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(name, price, sale, comment)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.close() # 注释9<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  
  XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。(解释来自:百度百科 - “XPath”,若链接失效请访问:)
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  安全优佳 查看全部

  网络爬虫:Python动态网页爬虫2种技术方式及示例
  点击上方“安全优佳” 可以订阅哦!
  
  这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。
  动态网页技术介绍
  动态网页爬虫技术一之API请求法
  动态网页爬虫技术二之模拟浏览器法
  安装selenium模块下载
  Google Chrome Driver安装
  ChromeDriver以某宝某只松鼠店铺为例爬取"坚果炒货"的商品名称、价格、销量以及评论数量
  课后作业
  关于作者
  动态网页技术介绍
  所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
  值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。(解释来源:百度百科 - “动态网页”,若链接失效请访问:%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5/6327050?fr=aladdin)
  
  互联网每天都在蓬勃的发展,数以万计的在线平台如雨后春笋般不断涌现,不同平台对不同用户的权限、喜好推出不同的个性化内容,传统的静态网页似乎早已不能满足社会的需求。于是,动态网页技术应运而生,当然,在如今人们对网页加载速度的要求越来越高的要求下,异步加载成为了许多大的站点的首选。比如各大电商平台、知识型网站、社交平台等,都广泛采用了异步加载的动态技术。简单来说,就是把一些根据时间、请求而变化的内容,比如某宝的商品价格、评论,比如某瓣的热门电影评论,再比如某讯的视频等,采用先加载网页整体框架,后加载动态内容的方式呈现。
  对于这一类动态页面,如果我们采用前面所说的对付静态网页的爬虫方式去爬,可能收获不到任何结果,因为这些异步加载的内容所在的位置大多是一段请求内容的JS代码。在某些触发操作下,这些JS代码开始工作,从数据库中提取对应的数据,将其放置到网页框架中相对应的位置,从而最终拼接成我们所能看到的完整的一张页面。
  动态网页爬虫技术一之API请求法
  看似更加复杂的操作似乎给我们的爬虫带来了很大的困扰,但其实也可能给我们带来极大的便利。我们只需要找到JS请求的API,并按照一定的要求发送带有有效参数的请求,便能获得最为整洁的数据,而不用像以前那样从层层嵌套的HTML代码中慢慢解析出我们想要的数据。
  这里我们以上面提到的豆瓣电影(若链接失效请访问:#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0)为例做一个分析,提取出热度排名前100的电影名称和评分以及在豆瓣的地址。
  
  这是最近热门电影按热度排序的一个截图,每个月都有不同的新电影上映,每部电影会随着口碑效应每天呈现不同的热度排序,如果这页面是个静态网页,那么豆瓣的程序员岂不是很辛苦,每天都要上线修改这个页面。所以,我们可以大胆的猜测,这是个动态页面。但是光猜不行,我们还得证实。这里就要用到第二讲讲到的谷歌开发者工具了。按下F12或者在网页空白处右键选择检查(N),或者在键盘上按下组合键Ctrl + Shift + I,召唤出我们的神器。如下图所示:
  
  今天我们不再使用左上角的鼠标按钮了,而是使用红色框中的Network,这里显示的是网页加载出来的所有的文件,如下图所示:
  
  如果下方没有任何结果,需要在打开谷歌开发者工具的情况下刷新网页。
  
  如上图所示,我们点击上方红色小框中的”XHR“按钮,就可以将这张网页中异步加载的内容筛选出来。至于到底哪一个才是我们所要的,这是个问题,看左边的地址我们似乎也看不出神马头绪,那就一个一个点出来看吧。。。经过枚举,我们发现,第三个是我们要的内容,它的内容如下图:
  我们可以看到,这个链接里包含的内容是以JSON格式展示出来的,这时我们便有了一个大概的思路,那就是将这个链接的内容用requests模块下载后,再用Python的json模块进行解析。
  但是,这好像是一页的内容,数一数也只有20部电影,我们想要的是排名前100的电影,这怎么办呢?
  不方,毕竟是动态网页,内容都是可以根据请求改变的,而且这里也没有登陆啥的操作,打开网页就能看到,那我们是不是可以改变一下URL从而获取到下一页甚至下下页的内容咧?当然可以,不然我就写不下去了!
  我们仔细观察一下这个URL里传递的参数:
  
  到这里我们可能还不知道这五个参数是干嘛的,但我们可以找规律啊,于是现在回到原始的网页,点击页面下方的"加载更多",再返回到开发者工具,哇,多出了一个URL,长的跟刚才说的那个好像,内容也长的好像:
  这个URL同样传递了五个参数:
  
  唯一的不同就是一个叫"page_start"的关键字的值改变了,简单翻译一下大概是页面起点的意思,再看上面的"page_limit",大概就是页面限制的意思,看右边的响应内容,这一个页面传递了20个条目,也就是说"page_limit"是一个页面里条目数量的限制,也就是20条,这个数据是不变的,而"page_start"是这一页开始的条目序号,那么我们要获取后面的内容,岂不是只要改变一下这个"page_start"就好了?是的。
  老规矩,先写个代码压压惊
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import requests<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />import jsonfor i in range(5):<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> page_start = str(i * 20) # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' + page_start # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> }<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> response = requests.get(url=url, headers=headers, verify=False)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content = response.content.decode()<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> content_list = json.loads(content)['subjects'] # 注释3for item in content_list: # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> title = item['title'] #注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> rate = item['rate'] # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> link = item['url'] # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(title, rate, link)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  最后的话,大家可以采用标准输入流写入txt文件,也可以采用xlwt模块写入EXCEL,还可以使用比如pymysql模块写入Mysql数据库,具体的方式大家随意,使用方法请自行百度。
  到这里,这种采用寻找API并传递有效参数重放API的方法便为大家介绍完了,这是个很通用的方法,在很多网站都可以这样使用,并且速度很快,结果最精简。
  动态网页爬虫技术二之模拟浏览器法
  上面我们所讲的API请求法虽然好用且快,但是并不是所有的网站都会采用这种异步加载的方式来实现网站,同时还有部分网站会针对爬虫采取反爬虫措施,比如常见的验证码,虽然验证码主要是用来防止CSRF攻击的,但也有网站用来处理爬虫,比如某宝。这时候,就要为大家介绍另一个神器了,Python的Selenium模块。
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(解释来自:百度百科 - “Selenium”,若链接失效请点击)
  简单的说,Selenium是一个主要用来进行自动化测试的工具,它可以配合浏览器驱动在各个浏览器中运行,依照代码自动地模拟人的操作,去获取网页元素或对网页元素进行控制。当然,Selenium并不是Python的产物,而是一个独立的项目,Python对Selenium提供支持。(大家可以自行访问Selenium的主页进行访问,若链接失效请点击)
  安装selenium模块
  要使用Selenium这种第三方的工具,我们首先要进行安装,这里依然用到pip工具。在管理员权限下运行命令行,输入pip install selenium,稍等片刻后便可以完成安装,如果觉得网络连接官方pypi镜像速度较慢,可以使用国内豆瓣的镜像源,pip install selenium -i ,加上这个-i参数和豆瓣pypi镜像的地址就可以了,如果想要默认使用豆瓣镜像源,请自行百度修改方法。
  下载Google Chrome Driver
  在安装成功后,我们就需要安装下一个必要的东西了,浏览器驱动,前面说过,selenium需要配合浏览器驱动运行,因此我们以安装Google Chrome Driver为例。
  首先,我们需要查看自己的谷歌浏览器版本,这个在谷歌的”帮助”中可以查看,具体方法是,打开Chrome,点击右上角的三个点状的按钮,接着在弹出的菜单中依次选择帮助(E) -> 关于 Google Chrome(G)如下图所示:
  
  作者的浏览器是更新到当前最新的版本63的,旧版本的操作方法大致一致。
  点开关于信息后,我们可以看到当前的Chrome版本,以下图为例:
  
  Chrome一直在升级,因此对应的驱动也得不断升级,并且与Chrome版本相适应。这里我们需要查找相应的ChromeDriver版本映射,给大家推荐一个持续更新的CSDN博客(若链接失效请点击:),根据版本映射表,下载对应版本的ChromeDriver,下载地址1 ()(若链接失效请访问:),下载地址2()(若链接失效请访问:)。
  安装ChromeDriver
  这里需要进行环境变量的配置,如第一讲所说,为”Path”添加一行值。
  首先,我们需要找到Chrome的安装位置,最为简单的办法是,在桌面找到Google Chrome的快捷方式,右键选择”打开文件所在的位置“,就能打开了。比如我这里打开的路径为C:Program Files (x86)GoogleChromeApplication,那么我就将这个路径添加到Path里。然后,需要我们将下载的ChromeDriver解压到exe程序,将单独的exe程序复制到刚才这个路径里,如下图所示:
  
  到这里,ChromeDriver便完成了安装,我们可以在命令行输入命令python,进入到python交互环境进行测试,如下图所示:
  如果你的谷歌浏览器自动打开,并且跳转到百度首页,那么Congratulations~
  以某宝某只松鼠店铺为例爬取”坚果炒货”的商品名称、价格、销量以及评论数量
  该页面的URL为:#TmshopSrchNav
  老规矩,先放一段代码:
  <p style="margin-top: 15px;margin-bottom: 15px;line-height: 1.75em;"># -*- coding: utf-8 -*-<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />from selenium import webdriver<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver = webdriver.Chrome() # 注释1<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />url = 'https://sanzhisongshu.tmall.com/category-1124487841.htm?spm=a1z10.1-b-s.w5003-17763072511.42.6995d6732XB8Of&tsearch=y&scene=taobao_shop#TmshopSrchNav'<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.maximize_window() # 注释2<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.get(url) # 注释3<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />dl_list = driver.find_elements_by_class_name('item') # 注释4<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />for dl in dl_list:<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> name = dl.find_element_by_css_selector("[class='item-name J_TGoldData']").text # 注释5<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> price = dl.find_element_by_class_name('cprice-area').text # 注释6<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> sale = dl.find_element_by_class_name('sale-area').text # 注释7<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> comment = dl.find_element_by_xpath('//*[@id="J_ShopSearchResult"]/div/div[3]/div[1]/dl[1]/dd[2]/div/h4/a/span').text # 注释8<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /> print(name, price, sale, comment)<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" />driver.close() # 注释9<br style="-webkit-tap-highlight-color: transparent;box-sizing: border-box;" /></p>
  
  XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。(解释来自:百度百科 - “XPath”,若链接失效请访问:)
  这个例子最后的结果如下图:
  
  大家依然可以自由的选择数据存储方式。
  这里要注意的是:使用selenium进行数据爬取相比前面的API请求法可能会慢的多,在打开到对应的窗口后,也可能窗口很长时间没有任何动作,但这不一定是出错或者是程序卡死的表现,也可能是程序在疯狂的查找网页元素,在这个过程中,如果不确定是否出错,请最好不要进行其他操作,避免有些时候造成元素失去焦点,导致莫名的错误。
  当然了,selenium的功能远不止如此,几乎人能在网页上做出的行为,它都能模拟,包括点击、输入等各种行为,这个比较适用于某些网站要填写验证码的情况,更多有趣的内容大家可以自行发现。本讲就写到这里。感谢大家的耐心阅读。
  安全优佳

Python 爬虫进阶必备 | 某体育网站登录令牌加密分析(再送两本!!)

网站优化优采云 发表了文章 • 0 个评论 • 35 次浏览 • 2022-06-18 08:35 • 来自相关话题

  Python 爬虫进阶必备 | 某体育网站登录令牌加密分析(再送两本!!)
  某体育网站登录令牌加密分析
  aHR0cHMlM0EvL3d3dy55YWJvMjU5LmNvbS9sb2dpbg==
  这个网站需要分析的是登录时候的 sign令牌
  抓包与加密定位
  老规矩先用开发者工具抓包
  这里一般定位就是搜参数和xhr断点会比较方便,但是使用这两种都有他不方便的地方
  搜参数这个方法直接搜加密的参数名会出现很多的结果,需要一个一个去分析,同样也有局限性,比如参数是混淆的就搜不到了。
  xhr断点这个方法需要这个请求是xhr请求才行,而且断上之后还需要一步步调试堆栈才能找到加密的位置,如果不小心漏了需要耐心重新分析。
  这里重提下在前面的文章,我提过一个思路,就是不要直接搜索加密的参数,可以搜索同一个请求提交的其他参数,一般参数提交的地方都是在一块的
  这里实操一下,搜索nonce_str就只有一个结果,直接跟进即可
  在定位出来的文件位置中再次检索,直接就定位到加密的位置了
  
  接下来打上断点验证看我们的分析是否准确
  成功断上,说明确实定位到了
  分析加密
  可以看到这里的 sign 是由 d赋值的,而 d = o.a.hmac(t,u)
  这里需要知道的参数就是o 、t、u这三个
  我们继续分析这三个参数是怎么出现的
  s 的值是一串字符串
  appKey=c97823e281c071c39e&domain=www.yabo259.com&name=xianyuplus&nonce_str=eovdlwvy4z&password=11111111111&timestamp=1596710251&uuid=web-Windows-45671c25c33d9e3ad2217c645cb1a48f&appSecurit=d77f7fcff637bc61bfb82fcbcd767bfa<br />
  这里的参数都是请求提交上来的,之后做了一个 base64 的编码
  
  后面的t 也是传入的d77f7fcff637bc61bfb82fcbcd767bfa
  这里就只剩一个o跟进去看就很明显是一个hmacsha256
  
  为了沿着我们可以网上找一个加密站测试下。
  这是测试网站的加密结果
  
  这是加密网站的加密结果
  
  完全一样,说明我们分析是没有错的,接下来直接使用 Python 复写出来即可。
  
  加密代码:
  import hmac<br />import hashlib<br /><br />API_SECRET = 'd77f7fcff637bc61bfb82fcbcd767bfa'<br />message = 'YXBwS2V5PWM5NzgyM2UyODFjMDcxYzM5ZSZkb21haW49d3d3LnlhYm8yNTkuY29tJm5hbWU9eGlhbnl1cGx1cyZub25jZV9zdHI9aWpveHk0bjZ3OWMmcGFzc3dvcmQ9MTExMTExMTExMTEmdGltZXN0YW1wPTE1OTY3MTA5ODAmdXVpZD13ZWItV2luZG93cy00NTY3MWMyNWMzM2Q5ZTNhZDIyMTdjNjQ1Y2IxYTQ4ZiZhcHBTZWN1cml0PWQ3N2Y3ZmNmZjYzN2JjNjFiZmI4MmZjYmNkNzY3YmZh'<br /><br />signature = hmac.new(bytes(API_SECRET, 'latin-1'), msg=bytes(message, 'latin-1'), digestmod=hashlib.sha256).hexdigest()<br />print(signature)<br />-----------------------------------<br />结果:d9106f11a865d57e31ae4a2250fc2bdc34bd4aea814585e0705f645c32be2e56<br />
  赠书
  周一的赠书很多朋友说没有抽中,所以这次又准备了两本 Python 书籍,希望大家能够喜欢。
  现在可以参加京东活动,每满 100 减 50
  
  《Python 3.x网络爬虫从零基础到项目实战》介绍了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介、发送请求、提取数据、使用多个线程和进程进行并发抓取、抓取动态页面中的内容、与表单进行交互、处理页面中的验证码问题及使用Scrapy和分布式进行数据抓取,并在最后介绍了使用本书讲解的数据抓取技术对几个真实的网站进行抓取的实例,旨在帮助读者活学活用书中介绍的技术。本书提供了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。本书适合任何想学习Python爬虫的读者,无论您是否从事计算机相关专业,是否接触过Python,均可以通过学习本书快速掌握Python爬虫的开发方法和技巧。
  
  《Python自动化测试实战》本书的写作初衷是为了帮助更多功能测试人员转型自动化测试方向。在转型过程中,主流自动化测试技术和应用场景的结合是非常重要的一环。本书从自动化测试理论入手,全面地阐述自动化测试的意义及实施过程。全文以Python语言驱动,结合真实案例分别对主流自动化测试工具Selenium、Robot Framework、Postman、Python+Requests、Appium等进行系统讲解。通过学习本书,读者可以快速掌握主流自动化测试技术,并帮助读者丰富测试思维,提高Python编码能力。
  本书实用性强,不仅是转型自动化测试方向的一本案头书,也是一本特别好用、实用的操练手册。
  感谢赞助方:北京大学出版社
  参与赠书:
  好了,今天的内容到这里就结束了,咱们下次再会~
  Love & Share
  
  [ 完 ] 查看全部

  Python 爬虫进阶必备 | 某体育网站登录令牌加密分析(再送两本!!)
  某体育网站登录令牌加密分析
  aHR0cHMlM0EvL3d3dy55YWJvMjU5LmNvbS9sb2dpbg==
  这个网站需要分析的是登录时候的 sign令牌
  抓包与加密定位
  老规矩先用开发者工具抓包
  这里一般定位就是搜参数和xhr断点会比较方便,但是使用这两种都有他不方便的地方
  搜参数这个方法直接搜加密的参数名会出现很多的结果,需要一个一个去分析,同样也有局限性,比如参数是混淆的就搜不到了。
  xhr断点这个方法需要这个请求是xhr请求才行,而且断上之后还需要一步步调试堆栈才能找到加密的位置,如果不小心漏了需要耐心重新分析。
  这里重提下在前面的文章,我提过一个思路,就是不要直接搜索加密的参数,可以搜索同一个请求提交的其他参数,一般参数提交的地方都是在一块的
  这里实操一下,搜索nonce_str就只有一个结果,直接跟进即可
  在定位出来的文件位置中再次检索,直接就定位到加密的位置了
  
  接下来打上断点验证看我们的分析是否准确
  成功断上,说明确实定位到了
  分析加密
  可以看到这里的 sign 是由 d赋值的,而 d = o.a.hmac(t,u)
  这里需要知道的参数就是o 、t、u这三个
  我们继续分析这三个参数是怎么出现的
  s 的值是一串字符串
  appKey=c97823e281c071c39e&domain=www.yabo259.com&name=xianyuplus&nonce_str=eovdlwvy4z&password=11111111111&timestamp=1596710251&uuid=web-Windows-45671c25c33d9e3ad2217c645cb1a48f&appSecurit=d77f7fcff637bc61bfb82fcbcd767bfa<br />
  这里的参数都是请求提交上来的,之后做了一个 base64 的编码
  
  后面的t 也是传入的d77f7fcff637bc61bfb82fcbcd767bfa
  这里就只剩一个o跟进去看就很明显是一个hmacsha256
  
  为了沿着我们可以网上找一个加密站测试下。
  这是测试网站的加密结果
  
  这是加密网站的加密结果
  
  完全一样,说明我们分析是没有错的,接下来直接使用 Python 复写出来即可。
  
  加密代码:
  import hmac<br />import hashlib<br /><br />API_SECRET = 'd77f7fcff637bc61bfb82fcbcd767bfa'<br />message = 'YXBwS2V5PWM5NzgyM2UyODFjMDcxYzM5ZSZkb21haW49d3d3LnlhYm8yNTkuY29tJm5hbWU9eGlhbnl1cGx1cyZub25jZV9zdHI9aWpveHk0bjZ3OWMmcGFzc3dvcmQ9MTExMTExMTExMTEmdGltZXN0YW1wPTE1OTY3MTA5ODAmdXVpZD13ZWItV2luZG93cy00NTY3MWMyNWMzM2Q5ZTNhZDIyMTdjNjQ1Y2IxYTQ4ZiZhcHBTZWN1cml0PWQ3N2Y3ZmNmZjYzN2JjNjFiZmI4MmZjYmNkNzY3YmZh'<br /><br />signature = hmac.new(bytes(API_SECRET, 'latin-1'), msg=bytes(message, 'latin-1'), digestmod=hashlib.sha256).hexdigest()<br />print(signature)<br />-----------------------------------<br />结果:d9106f11a865d57e31ae4a2250fc2bdc34bd4aea814585e0705f645c32be2e56<br />
  赠书
  周一的赠书很多朋友说没有抽中,所以这次又准备了两本 Python 书籍,希望大家能够喜欢。
  现在可以参加京东活动,每满 100 减 50
  
  《Python 3.x网络爬虫从零基础到项目实战》介绍了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介、发送请求、提取数据、使用多个线程和进程进行并发抓取、抓取动态页面中的内容、与表单进行交互、处理页面中的验证码问题及使用Scrapy和分布式进行数据抓取,并在最后介绍了使用本书讲解的数据抓取技术对几个真实的网站进行抓取的实例,旨在帮助读者活学活用书中介绍的技术。本书提供了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。本书适合任何想学习Python爬虫的读者,无论您是否从事计算机相关专业,是否接触过Python,均可以通过学习本书快速掌握Python爬虫的开发方法和技巧。
  
  《Python自动化测试实战》本书的写作初衷是为了帮助更多功能测试人员转型自动化测试方向。在转型过程中,主流自动化测试技术和应用场景的结合是非常重要的一环。本书从自动化测试理论入手,全面地阐述自动化测试的意义及实施过程。全文以Python语言驱动,结合真实案例分别对主流自动化测试工具Selenium、Robot Framework、Postman、Python+Requests、Appium等进行系统讲解。通过学习本书,读者可以快速掌握主流自动化测试技术,并帮助读者丰富测试思维,提高Python编码能力。
  本书实用性强,不仅是转型自动化测试方向的一本案头书,也是一本特别好用、实用的操练手册。
  感谢赞助方:北京大学出版社
  参与赠书:
  好了,今天的内容到这里就结束了,咱们下次再会~
  Love & Share
  
  [ 完 ]

7分钟,建议看完这5个Python库对比丨web抓取

网站优化优采云 发表了文章 • 0 个评论 • 108 次浏览 • 2022-06-12 04:49 • 来自相关话题

  7分钟,建议看完这5个Python库对比丨web抓取
  
  网页抓取的时候,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?5个示例找寻答案。
  文丨ABHISHEK SHARMA
  编译丨小二
  “我们有足够的数据”这句话,在数据科学领域并不存在。
  我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多。
  为了缓解这种“数据焦虑”,分析师或数据科学家们练就了必备的技能之一:网页抓取。
  用Python执行网页抓取很方便,有大量的库可以使用,但头疼的地方也在于此,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?
  先不直接给出答案,下文所列举的是我认为较为通用的5个Python库,将通过对它们的优劣评估来回答那些疑问。
  1.Requests
  
  Requests是一个Python库,用于发出各种类型的HTTP请求,例如GET,POST等。由于其简单易用,它被称为HTTP for Humans。
  我想说这是Web抓取最基本但必不可少的库。但是,请求库不会解析检索到的HTML数据。如果要这样做,还需要结合lxml和Beautiful Soup之类的库一起使用(将在本文中进一步介绍它们)。
  那Requests Python库有哪些优缺点?
  优点:
  缺点:
  2.lxml
  
  lxml是一种高性能,快速,高质生产力的HTML和XML解析Python库。
  它结合了ElementTree的速度和功能以及Python的简单性。当我们打算抓取大型数据集时,它能发挥很好的作用。
  在Web抓取的时候,lxml经常和Requests进行组合来使用,此外,它还允许使用XPath和CSS选择器从HTML提取数据。
  那lxml Python库的优缺点有哪些?
  优点:
  缺点:
  3.BeautifulSoup
  
  BeautifulSoup也许是Web抓取中使用最广泛的Python库。它创建了一个解析树,用于解析HTML和XML文档。还会自动将传入文档转换为Unicode,将传出文档转换为UTF-8。
  在行业中,将“BeautifulSoup”与“Requests”组合在一起使用非常普遍。
  让BeautifulSoup备受欢迎的主要原因之一,就是它易于使用并且非常适合初学者。同时,还可以将Beautiful Soup与其他解析器(如lxml)结合使用。
  但是相对应的,这种易用性也带来了不小的运行成本——它比lxml慢。即使使用lxml作为解析器,它也比纯lxml慢。
  下面来综合看下BeautifulSoup库的优缺点都有哪些?
  优点:
  缺点:
  4. Selenium
  到目前为止,我们讨论的所有Python库都有一个局限性:不能轻易地从动态填充的网页上抓取数据。
  发生这种情况的原因有时是因为页面上存在的数据是通过JavaScript加载的。简单概括就是,如果页面不是静态的,那么前面提到的Python库就很难从页面中抓取数据。
  这种情况,就比较适合使用Selenium。
  
  Selenium最初是用于自动测试Web应用程序的Python库,是用于渲染网页的Web驱动程序,也正因如此,在其他库无法运行JavaScript的地方,Selenium就可以发挥作用:在页面上单击,填写表格,滚动页面并执行更多操作。
  这种在网页中运行JavaScript的能力,使Selenium能够抓取动态填充的网页。但是这里存在一个“缺陷”,它为每个页面加载并运行JavaScript,会使其运行速度变慢,不适合大型项目。
  如果不关心时间和速度,那么Selenium绝对是个很好的选择。
  优点:
  缺点:
  5.Scrapy
  现在是时候介绍Python Web抓取库的BOSS——Scrapy!
  
  Scrapy不仅仅单纯是一个库,它是Scrapinghub的联合创始人Pablo Hoffman和Shane Evans创建的整个Web抓取框架,是一款功能完善的网页抓取解决方案,可以完成所有繁重的工作。
  Scrapy提供的蜘蛛机器人可以抓取多个网页并提取数据。使用Scrapy,可以创建自己的蜘蛛机器人,将其托管在Scrapy Hub上,或作为API。在几分钟内就可以创建功能齐全的蜘蛛网,当然也可以使用Scrapy创建管道。
  关于Scrapy最好的一点在于它是异步的,这意味着可以同时发出多个HTTP请求,能够为我们节省很多时间并提高效率(这不是我们正为之奋斗的吗?)。
  我们还可以向Scrapy添加插件来增强其功能。尽管Scrapy无法像selenium一样处理JavaScript,但可以将其与名为Splash的库(轻量级Web浏览器)配对。借助Splash,Scrapy就能实现从动态网页提取数据。
  优点:
  缺点:
  这些是我个人觉得很有用的Python库,如果有其他你觉得使用起来不错的库,欢迎留言评论~
  原文链接:
  ————————线上沙龙预告 查看全部

  7分钟,建议看完这5个Python库对比丨web抓取
  
  网页抓取的时候,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?5个示例找寻答案。
  文丨ABHISHEK SHARMA
  编译丨小二
  “我们有足够的数据”这句话,在数据科学领域并不存在。
  我很少会听到有人拒绝为他们的机器学习或深度学习项目收集更多的数据,往往都是永远觉得自己拥有的数据不够多。
  为了缓解这种“数据焦虑”,分析师或数据科学家们练就了必备的技能之一:网页抓取。
  用Python执行网页抓取很方便,有大量的库可以使用,但头疼的地方也在于此,如何决定哪一个库适合自己的特定项目?哪个Python库最灵活?
  先不直接给出答案,下文所列举的是我认为较为通用的5个Python库,将通过对它们的优劣评估来回答那些疑问。
  1.Requests
  
  Requests是一个Python库,用于发出各种类型的HTTP请求,例如GET,POST等。由于其简单易用,它被称为HTTP for Humans。
  我想说这是Web抓取最基本但必不可少的库。但是,请求库不会解析检索到的HTML数据。如果要这样做,还需要结合lxml和Beautiful Soup之类的库一起使用(将在本文中进一步介绍它们)。
  那Requests Python库有哪些优缺点?
  优点:
  缺点:
  2.lxml
  
  lxml是一种高性能,快速,高质生产力的HTML和XML解析Python库。
  它结合了ElementTree的速度和功能以及Python的简单性。当我们打算抓取大型数据集时,它能发挥很好的作用。
  在Web抓取的时候,lxml经常和Requests进行组合来使用,此外,它还允许使用XPath和CSS选择器从HTML提取数据。
  那lxml Python库的优缺点有哪些?
  优点:
  缺点:
  3.BeautifulSoup
  
  BeautifulSoup也许是Web抓取中使用最广泛的Python库。它创建了一个解析树,用于解析HTML和XML文档。还会自动将传入文档转换为Unicode,将传出文档转换为UTF-8。
  在行业中,将“BeautifulSoup”与“Requests”组合在一起使用非常普遍。
  让BeautifulSoup备受欢迎的主要原因之一,就是它易于使用并且非常适合初学者。同时,还可以将Beautiful Soup与其他解析器(如lxml)结合使用。
  但是相对应的,这种易用性也带来了不小的运行成本——它比lxml慢。即使使用lxml作为解析器,它也比纯lxml慢。
  下面来综合看下BeautifulSoup库的优缺点都有哪些?
  优点:
  缺点:
  4. Selenium
  到目前为止,我们讨论的所有Python库都有一个局限性:不能轻易地从动态填充的网页上抓取数据。
  发生这种情况的原因有时是因为页面上存在的数据是通过JavaScript加载的。简单概括就是,如果页面不是静态的,那么前面提到的Python库就很难从页面中抓取数据。
  这种情况,就比较适合使用Selenium。
  
  Selenium最初是用于自动测试Web应用程序的Python库,是用于渲染网页的Web驱动程序,也正因如此,在其他库无法运行JavaScript的地方,Selenium就可以发挥作用:在页面上单击,填写表格,滚动页面并执行更多操作。
  这种在网页中运行JavaScript的能力,使Selenium能够抓取动态填充的网页。但是这里存在一个“缺陷”,它为每个页面加载并运行JavaScript,会使其运行速度变慢,不适合大型项目。
  如果不关心时间和速度,那么Selenium绝对是个很好的选择。
  优点:
  缺点:
  5.Scrapy
  现在是时候介绍Python Web抓取库的BOSS——Scrapy!
  
  Scrapy不仅仅单纯是一个库,它是Scrapinghub的联合创始人Pablo Hoffman和Shane Evans创建的整个Web抓取框架,是一款功能完善的网页抓取解决方案,可以完成所有繁重的工作。
  Scrapy提供的蜘蛛机器人可以抓取多个网页并提取数据。使用Scrapy,可以创建自己的蜘蛛机器人,将其托管在Scrapy Hub上,或作为API。在几分钟内就可以创建功能齐全的蜘蛛网,当然也可以使用Scrapy创建管道。
  关于Scrapy最好的一点在于它是异步的,这意味着可以同时发出多个HTTP请求,能够为我们节省很多时间并提高效率(这不是我们正为之奋斗的吗?)。
  我们还可以向Scrapy添加插件来增强其功能。尽管Scrapy无法像selenium一样处理JavaScript,但可以将其与名为Splash的库(轻量级Web浏览器)配对。借助Splash,Scrapy就能实现从动态网页提取数据。
  优点:
  缺点:
  这些是我个人觉得很有用的Python库,如果有其他你觉得使用起来不错的库,欢迎留言评论~
  原文链接:
  ————————线上沙龙预告

Python爬虫 | 批量爬取某图网站高质量小姐姐照片

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-06-11 20:22 • 来自相关话题

  Python爬虫 | 批量爬取某图网站高质量小姐姐照片
  鉴于以上情况,这里咱们重点强调声明:本文仅限于做技术交流学习,请勿用作任何非法商用!
  图虫创意是北京字节跳动科技有限公司所创立的正版照片及视频素材平台 ,致力于为用户提供正版素材内容及数字资产管理解决方案。
  0.先看一波美照吧
  
  很正经的图
  接下来,我们按照上次在《》介绍的爬虫流程来展开介绍这次爬虫实战哈。
  1.网页分析
  打开目标网页(%E7%BE%8E%E5%A5%B3),发现下拉会加载更多但是网页地址栏的url没有变化。因此,我们断定这是一个动态网页,于是有了以下步骤:
  需要按“F12”进入到浏览器的开发者模式;点击“Network”—>XHR或JS或者你全部查找看;进行翻页(可能是点击下一页或者下滑加载更多或者直接F5刷新页面);观察第2步中name模块的内容变化,寻找。
  很好,我们找到了照片组图信息所在,如下图所示,在请求的结果中的postList里是单页全部照片组信息列表,列表的每个元素中的imges里是该组照片信息列表。通过这些字段大致能理解照片img_id归属于某个作者user_id或author_id。
  记住这组照片信息:
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br />

  组图照片信息
  我们点开Headers模块,可以看到真实请求地址基础URL和请求参数如下:
  # 基础URL<br />url='https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1, # 随着翻页而递增变化<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br />
  
  真实URL地址及参数
  到这里没完,单纯知道了请求这些组图信息列表的地址,但是每个组图里照片的地址暂时还无法得知。于是我们点开某个组图进行进一步查看,在组图的详情页里,F12->Elements 查看照片元素信息,发现结果如下:

  组图详情页
  在网页HTML源代码里,我们找到了照片的地址为。
  结合之前我们记住的照片信息如下,我们便可以拼接出目标照片的地址了。
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br /><br /># 照片地址<br />img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'<br />
  在浏览器输入这个照片地址,我们发现果然就是我们需要的:

  目标照片2.请求数据
  这一步就比较简单了,直接引入requests库,然后get请求即可。
  import requests<br /># 基础URL地址<br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1,<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br /><br />r = requests.get(url, params=parames)<br /># 前面网页分析结果是请求结果为json格式数据<br />j = r.json()<br />
  3.解析数据
  我们查看请求结果中的json数据结构,可以很快找到目标照片的url地址参数:

  json数据结构
  我们以获取单个照片url地址为例展示:
  4.存储数据
  由于本篇抓取的是照片这类二进制文件,因此存储方式可以选择创建一个文件,然后写入请求的二进制文件内容即可。
  # 以作者id和图片id组合而成图片名称<br />name = f'{author_id}-{img_id}.jpg'<br />with open(name,'wb') as f:<br />    f.write(img)<br />
  5.完整代码
  毕竟图虫网提供高质量的图片,而且都是版权所有的,咱们也就只是用于学习演示不要太过分,爬取10页数据。
  代码比较简单不够优雅,没有做模块化处理,大家可以自行优化哈~
  import requests<br />import time<br /><br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /><br /># 翻页<br />num = 10<br />total = 0<br />for page in range(1,num+1):<br />    time.sleep(5)    <br />    parames ={<br />        'page': page,<br />        'count': 20,<br />        'order': 'weekly',<br />        'before_timestamp': ''<br />        }<br />    <br />    r = requests.get(url, params=parames)<br />    j = r.json()<br />    # 组图列表<br />    postList = j['postList']<br />    # 遍历组图<br />    for post in postList:<br />        # 作者id<br />        author_id = post['author_id']        <br />        # 组图照片列表<br />        images = post['images']<br />        # 遍历组图照片列表图片并下载<br />        for image in images:<br />            total = total+1<br />            img_id = image['img_id']<br />            img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'     <br />            r_img = requests.get(img_url)<br />            img = r_img.content<br />            name = f'{author_id}-{img_id}.jpg'<br />            # 写入本地<br />            with open(name,'wb') as f:<br />                f.write(img)<br /><br />            print(f'{page}页 共 {total}张 照片已经下载')<br />

  批量下载
  近期文章Python网络爬虫与文本数据分析bsite库 | 采集B站视频信息、评论数据<br />爬虫实战 | 采集&可视化知乎问题的回答<strong>pdf2docx库 | 转文件格式,支持抽取文件中的表格数据</strong>rpy2库 | 在jupyter中调用R语言代码tidytext | 耳目一新的R-style文本分析库reticulate包 | 在Rmarkdown中调用Python代码plydata库 | 数据操作管道操作符>>plotnine: Python版的ggplot2作图库<br />七夕礼物 | 全网最火的钉子绕线图制作教程<br />读完本文你就了解什么是文本分析<br />文本分析在经管领域中的应用概述  综述:文本分析在市场营销研究中的应用<br />plotnine: Python版的ggplot2作图库小案例: Pandas的apply方法  stylecloud:简洁易用的词云库 用Python绘制近20年地方财政收入变迁史视频  Wow~70G上市公司定期报告数据集<br />漂亮~pandas可以无缝衔接Bokeh  YelpDaset: 酒店管理类数据集10+G  <br /> 查看全部

  Python爬虫 | 批量爬取某图网站高质量小姐姐照片
  鉴于以上情况,这里咱们重点强调声明:本文仅限于做技术交流学习,请勿用作任何非法商用!
  图虫创意是北京字节跳动科技有限公司所创立的正版照片及视频素材平台 ,致力于为用户提供正版素材内容及数字资产管理解决方案。
  0.先看一波美照吧
  
  很正经的图
  接下来,我们按照上次在《》介绍的爬虫流程来展开介绍这次爬虫实战哈。
  1.网页分析
  打开目标网页(%E7%BE%8E%E5%A5%B3),发现下拉会加载更多但是网页地址栏的url没有变化。因此,我们断定这是一个动态网页,于是有了以下步骤:
  需要按“F12”进入到浏览器的开发者模式;点击“Network”—>XHR或JS或者你全部查找看;进行翻页(可能是点击下一页或者下滑加载更多或者直接F5刷新页面);观察第2步中name模块的内容变化,寻找。
  很好,我们找到了照片组图信息所在,如下图所示,在请求的结果中的postList里是单页全部照片组信息列表,列表的每个元素中的imges里是该组照片信息列表。通过这些字段大致能理解照片img_id归属于某个作者user_id或author_id。
  记住这组照片信息:
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br />

  组图照片信息
  我们点开Headers模块,可以看到真实请求地址基础URL和请求参数如下:
  # 基础URL<br />url='https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1, # 随着翻页而递增变化<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br />
  
  真实URL地址及参数
  到这里没完,单纯知道了请求这些组图信息列表的地址,但是每个组图里照片的地址暂时还无法得知。于是我们点开某个组图进行进一步查看,在组图的详情页里,F12->Elements 查看照片元素信息,发现结果如下:

  组图详情页
  在网页HTML源代码里,我们找到了照片的地址为。
  结合之前我们记住的照片信息如下,我们便可以拼接出目标照片的地址了。
  # 照片id<br />img_id = 360962642<br /># 照片归属作者id<br />author_id = 5489136<br /><br /># 照片地址<br />img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'<br />
  在浏览器输入这个照片地址,我们发现果然就是我们需要的:

  目标照片2.请求数据
  这一步就比较简单了,直接引入requests库,然后get请求即可。
  import requests<br /># 基础URL地址<br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /># 请求参数<br />parames ={<br />    'page': 1,<br />    'count': 20,<br />    'order': 'weekly',<br />    'before_timestamp': ''<br />    }<br /><br />r = requests.get(url, params=parames)<br /># 前面网页分析结果是请求结果为json格式数据<br />j = r.json()<br />
  3.解析数据
  我们查看请求结果中的json数据结构,可以很快找到目标照片的url地址参数:

  json数据结构
  我们以获取单个照片url地址为例展示:
  4.存储数据
  由于本篇抓取的是照片这类二进制文件,因此存储方式可以选择创建一个文件,然后写入请求的二进制文件内容即可。
  # 以作者id和图片id组合而成图片名称<br />name = f'{author_id}-{img_id}.jpg'<br />with open(name,'wb') as f:<br />    f.write(img)<br />
  5.完整代码
  毕竟图虫网提供高质量的图片,而且都是版权所有的,咱们也就只是用于学习演示不要太过分,爬取10页数据。
  代码比较简单不够优雅,没有做模块化处理,大家可以自行优化哈~
  import requests<br />import time<br /><br />url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'<br /><br /># 翻页<br />num = 10<br />total = 0<br />for page in range(1,num+1):<br />    time.sleep(5)    <br />    parames ={<br />        'page': page,<br />        'count': 20,<br />        'order': 'weekly',<br />        'before_timestamp': ''<br />        }<br />    <br />    r = requests.get(url, params=parames)<br />    j = r.json()<br />    # 组图列表<br />    postList = j['postList']<br />    # 遍历组图<br />    for post in postList:<br />        # 作者id<br />        author_id = post['author_id']        <br />        # 组图照片列表<br />        images = post['images']<br />        # 遍历组图照片列表图片并下载<br />        for image in images:<br />            total = total+1<br />            img_id = image['img_id']<br />            img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'     <br />            r_img = requests.get(img_url)<br />            img = r_img.content<br />            name = f'{author_id}-{img_id}.jpg'<br />            # 写入本地<br />            with open(name,'wb') as f:<br />                f.write(img)<br /><br />            print(f'{page}页 共 {total}张 照片已经下载')<br />

  批量下载
  近期文章Python网络爬虫与文本数据分析bsite库 | 采集B站视频信息、评论数据<br />爬虫实战 | 采集&可视化知乎问题的回答<strong>pdf2docx库 | 转文件格式,支持抽取文件中的表格数据</strong>rpy2库 | 在jupyter中调用R语言代码tidytext | 耳目一新的R-style文本分析库reticulate包 | 在Rmarkdown中调用Python代码plydata库 | 数据操作管道操作符>>plotnine: Python版的ggplot2作图库<br />七夕礼物 | 全网最火的钉子绕线图制作教程<br />读完本文你就了解什么是文本分析<br />文本分析在经管领域中的应用概述  综述:文本分析在市场营销研究中的应用<br />plotnine: Python版的ggplot2作图库小案例: Pandas的apply方法  stylecloud:简洁易用的词云库 用Python绘制近20年地方财政收入变迁史视频  Wow~70G上市公司定期报告数据集<br />漂亮~pandas可以无缝衔接Bokeh  YelpDaset: 酒店管理类数据集10+G  <br />

python抓取动态网页一)技术的方法思路与方法

网站优化优采云 发表了文章 • 0 个评论 • 20 次浏览 • 2022-06-09 05:02 • 来自相关话题

  python抓取动态网页一)技术的方法思路与方法
  python抓取动态网页
  一)
  三)爬虫技术该部分通过通俗易懂的例子来讲解python语言入门。由于python常被大多数初学者认为是一门弱类型的编程语言,学习难度较大,所以本节课程会通过理论部分的知识讲解,使得学习者对python基础运用的过程有很大的提升,让学习者找到有效的学习方法。通过正确的知识查阅和使用正确的知识点来掌握python编程,能够让掌握python编程的过程更有效率。
  由于python的常见用途为网页抓取、爬虫技术,故本文首先将会讲解网页抓取的一些重要的知识。网页抓取指从互联网上获取具有某种特征的网页(含文字、图片等等),是一种网络上资源抓取和管理的方法,网页抓取技术是通过用户的输入去寻找网页,如果找到则返回搜索结果给用户。在进行抓取的过程中抓取网站也可以进行多次抓取,利用网页的一次抓取方法或者利用一个网站多次抓取,都能够不断抓取到目标网站,给用户浏览的体验度提高。
  本节课我们首先来学习python的基础知识,简单介绍一下抓取网页的方法以及原理,其次讲解scrapy框架及requests库,它们是python网络爬虫框架的基础。1.python抓取网页的方法思路1.1最简单的方法urllib(库)urllib库用于爬取http的网页内容。
  我们在网页中获取某个链接的原理一般分为两种情况:
  1)直接获取:例如:获取网页中某个页面中的某个url地址,并根据页面中的url地址进行网页内容提取。
  2)爬取提取:例如:提取网页中某个链接,并提取其内容,获取网页内容后再进行提取。1.2正则表达式requests(库)requests爬取正则表达式的网页的方法一般可以分为以下四种:requests.get(url).headersrequests.post(url).headersrequests.delete(url).headersrequests.header其中:requests.get(url),requests.post(url)为第一种获取方法,而requests.headers(string),requests.headers(user-agent)等等的只是第二种方法,requests.delete(url),requests.headers(string)为第三种获取方法,下面将进行详细的讲解。
  2.网页爬取实例:爬取中国电信的cmcc中国电信自1998年成立以来,一直是连接世界的中国综合性宽带网络。各类网站的服务器根据访问流量来收费,所以cmcc针对不同的访问流量有不同的cmcc套餐和呼叫中心来收费。一般来说需要访问量越大的网站需要订购越贵的套餐,通常这些网站的ip主要集中在国内,为了节省服务器空间和节省带宽,也可以通过。
  一、首先要知道如何下载cmcc的数据源网址:, 查看全部

  python抓取动态网页一)技术的方法思路与方法
  python抓取动态网页
  一)
  三)爬虫技术该部分通过通俗易懂的例子来讲解python语言入门。由于python常被大多数初学者认为是一门弱类型的编程语言,学习难度较大,所以本节课程会通过理论部分的知识讲解,使得学习者对python基础运用的过程有很大的提升,让学习者找到有效的学习方法。通过正确的知识查阅和使用正确的知识点来掌握python编程,能够让掌握python编程的过程更有效率。
  由于python的常见用途为网页抓取、爬虫技术,故本文首先将会讲解网页抓取的一些重要的知识。网页抓取指从互联网上获取具有某种特征的网页(含文字、图片等等),是一种网络上资源抓取和管理的方法,网页抓取技术是通过用户的输入去寻找网页,如果找到则返回搜索结果给用户。在进行抓取的过程中抓取网站也可以进行多次抓取,利用网页的一次抓取方法或者利用一个网站多次抓取,都能够不断抓取到目标网站,给用户浏览的体验度提高。
  本节课我们首先来学习python的基础知识,简单介绍一下抓取网页的方法以及原理,其次讲解scrapy框架及requests库,它们是python网络爬虫框架的基础。1.python抓取网页的方法思路1.1最简单的方法urllib(库)urllib库用于爬取http的网页内容。
  我们在网页中获取某个链接的原理一般分为两种情况:
  1)直接获取:例如:获取网页中某个页面中的某个url地址,并根据页面中的url地址进行网页内容提取。
  2)爬取提取:例如:提取网页中某个链接,并提取其内容,获取网页内容后再进行提取。1.2正则表达式requests(库)requests爬取正则表达式的网页的方法一般可以分为以下四种:requests.get(url).headersrequests.post(url).headersrequests.delete(url).headersrequests.header其中:requests.get(url),requests.post(url)为第一种获取方法,而requests.headers(string),requests.headers(user-agent)等等的只是第二种方法,requests.delete(url),requests.headers(string)为第三种获取方法,下面将进行详细的讲解。
  2.网页爬取实例:爬取中国电信的cmcc中国电信自1998年成立以来,一直是连接世界的中国综合性宽带网络。各类网站的服务器根据访问流量来收费,所以cmcc针对不同的访问流量有不同的cmcc套餐和呼叫中心来收费。一般来说需要访问量越大的网站需要订购越贵的套餐,通常这些网站的ip主要集中在国内,为了节省服务器空间和节省带宽,也可以通过。
  一、首先要知道如何下载cmcc的数据源网址:,

[Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)

网站优化优采云 发表了文章 • 0 个评论 • 34 次浏览 • 2022-06-05 15:59 • 来自相关话题

  [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)
  前文传送门:
  好久没更新Python相关的内容了,这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分
  上节我们说了如何获取动态网页中的jquery内容
  这节说如何利用selenium模拟浏览器动作
  开发环境
  操作系统:windows 10
  Python版本 :3.6
  爬取网页模块:selenium,PhantomJS
  分析网页模块:BeautifulSoup4
  关于Selenium
  selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如PhantomJS
  具体请参加官网:
  关于PhantomJS
  PhantomJS是一个无头(headless)的WebKit javascript API
  我们可以用它模拟浏览器的操作,也可以用来截图
  具体参加官网:
  模块安装
  lxml为解析网页所必需
  pip3 install selenium
  pip3 install BeautifulSoup4
  pip3 install lxml
  Driver 下载
  这里我们下载Chrome driver和 Phantomjs
  其他的driver见官网
  #drivers
  
  Chrome下载
  下载完成后可以放到系统环境变量中,如:
  C:\Windows\System32
  
  PhatomJS下载
  下载后同样放到系统环境变量中
  下载完成解压后只需要将exe文件放到目录下
  
  网页分析
  我们以幽游白书为例
  打开后发现漫画并没有全部加载需要向下翻页才可以加载完毕
  之后通过开发者工具分析图片的地址
  
  这里我们通过bs4 来提取出所有img地址
  之后通过Python将其保存成图片
  程序原理
  
  代码介绍
  1. import相关的模块
  import selenium.webdriver
  from bs4 import BeautifulSoup
  2. 调用Chrome或者PhantomJS
  driver = selenium.webdriver.Chrome()
  #driver = selenium.webdriver.PhantomJS()
  3. 获取网页源代码
  content=driver.page_source
  4. 获取标题和图片地址之后存入字典
  
  5. 新建目录并下载图片
  这里首先判断是否有该漫画的目录,如果没有则新建,之后下载图片,图片的名称为列表的索引号
  
  执行结果
  
  
  注意事项:
  建议先用Chrome测试OK,再改用PhantomJS执行
  Chrome和PhantomJS在实际向下翻页时有差异,需测试后调节循环次数
  为防止被ban,每次爬取采用了随机延迟的方法
  只能爬取免费的内容
  本脚本仅用于学习用途
  源码位置 查看全部

  [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)
  前文传送门:
  好久没更新Python相关的内容了,这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分
  上节我们说了如何获取动态网页中的jquery内容
  这节说如何利用selenium模拟浏览器动作
  开发环境
  操作系统:windows 10
  Python版本 :3.6
  爬取网页模块:selenium,PhantomJS
  分析网页模块:BeautifulSoup4
  关于Selenium
  selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如PhantomJS
  具体请参加官网:
  关于PhantomJS
  PhantomJS是一个无头(headless)的WebKit javascript API
  我们可以用它模拟浏览器的操作,也可以用来截图
  具体参加官网:
  模块安装
  lxml为解析网页所必需
  pip3 install selenium
  pip3 install BeautifulSoup4
  pip3 install lxml
  Driver 下载
  这里我们下载Chrome driver和 Phantomjs
  其他的driver见官网
  #drivers
  
  Chrome下载
  下载完成后可以放到系统环境变量中,如:
  C:\Windows\System32
  
  PhatomJS下载
  下载后同样放到系统环境变量中
  下载完成解压后只需要将exe文件放到目录下
  
  网页分析
  我们以幽游白书为例
  打开后发现漫画并没有全部加载需要向下翻页才可以加载完毕
  之后通过开发者工具分析图片的地址
  
  这里我们通过bs4 来提取出所有img地址
  之后通过Python将其保存成图片
  程序原理
  
  代码介绍
  1. import相关的模块
  import selenium.webdriver
  from bs4 import BeautifulSoup
  2. 调用Chrome或者PhantomJS
  driver = selenium.webdriver.Chrome()
  #driver = selenium.webdriver.PhantomJS()
  3. 获取网页源代码
  content=driver.page_source
  4. 获取标题和图片地址之后存入字典
  
  5. 新建目录并下载图片
  这里首先判断是否有该漫画的目录,如果没有则新建,之后下载图片,图片的名称为列表的索引号
  
  执行结果
  
  
  注意事项:
  建议先用Chrome测试OK,再改用PhantomJS执行
  Chrome和PhantomJS在实际向下翻页时有差异,需测试后调节循环次数
  为防止被ban,每次爬取采用了随机延迟的方法
  只能爬取免费的内容
  本脚本仅用于学习用途
  源码位置

Python网络爬虫工程师需要掌握的核心技术

网站优化优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-06-04 20:34 • 来自相关话题

  Python网络爬虫工程师需要掌握的核心技术
  
  在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战。基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因。那么做Python网络爬虫需要掌握哪些核心技术呢?以小编推出的《解析Python网络爬虫》课程为例,内容涉及Scrapy框架、分布式爬虫等核心技术,下面我们来一起看一下Python网络爬虫具体的学习内容吧!
  
  Python网络爬虫课程简介:
  为了让具备Python基础的人群适合岗位的需求,小编推出了一门全面的、系统的、简易的Python网络爬虫入门级课程,不仅讲解了学习网络爬虫必备的基础知识,而且加入了爬虫框架的内容,大家学完之后,能够全面地掌握抓取网页和解析网页的多种技术,还能够掌握一些爬虫的扩展知识,如并发下载、识别图像文字、抓取动态内容等。并且大家学完还能熟练地掌握爬虫框架的使用,如Scrapy,以此创建自己的网络爬虫项目,胜任Python网络爬虫工程师相关岗位的工作。
  Python网络爬虫知识大纲:
  第1部分
  主要是带领大家认识网络爬虫,包括爬虫产生背景、什么是爬虫、爬虫的用途、爬虫的分类等。
  第2部分
  主要针对爬虫的实现原理和技术进行讲解,包括爬虫实现原理、爬虫抓取网页的详细流程、通用爬虫中网页的分类、通用爬虫相关网站文件、反爬虫应对策略、为什么选择Python做爬虫等。希望读者能明白爬虫具体是怎样抓取网页的,并对抓取过程中产生的一些问题有所了解,后期会对这些问题提供一些合理的解决方案。
  第3部分
  主要介绍的是网页请求原理,包括浏览网页过程、HTTP网络请求原理、HTTP抓包工具Fiddler。
  第4部分
  介绍了用做抓取网页数据的两个库:urllib和requests。首先介绍了urllib库的基本使用,具体包括使用urllib传输数据、添加特定的Headers、设置代理服务器、超时设置、常见网络异常,然后介绍了更为人性化的requests库,并结合一个百度贴吧的案例,讲解如何使用urllib库抓取网页数据。大家应该能熟练地掌握两个库的使用,并反复使用多加练习,另外还可以参考官网提供的文档深入地学习。
  第5部分
  主要介绍的是解析网页数据的几种技术,包括正则表达式、XPath、Beautiful Soup和JSONPath,以及对封装了这些技术的Python模块或库的基本使用进行了讲解,包括re模块、lxml库、bs4库、json模块,并结合腾讯社招网站的案例,讲解如何使用re模块、lxml库和bs4库分别解析网页数据,以更好地区分这些技术的不同之处。大家在实际工作中,可根据具体情况选择合理的技术进行运用即可。
  第6部分
  主要针对并发下载进行了讲解,包括多线程爬虫流程分析、使用queue模块实现多线程爬虫、协程实现并发爬取,并结合糗事百科的案例,分别使用单线程、多线程、协程三种技术获取网页数据,并分析了三者的性能。
  第7部分
  围绕着抓取动态内容进行介绍,包括动态网页介绍、selenium和PhantomJS概述,selenium和PhantomJS安装配置、selenium和PhantomJS的基本使用,并结合模拟豆瓣网站登陆的案例,讲解了在项目中如何应用selenium和PhantomJS技术。
  第8部分
  主要针对图像识别与文字处理进行讲解,包括Tesseract引擎的下载和安装、pytesseract和PIL库、处理规范格式的文字、处理验证码等,并结合识别本地验证码图片的小程序,讲解了如何利用pytesseract识别图像中的验证码。
  第9部分
  主要介绍了存储爬虫数据,包括数据存储简介、MongoDB数据库简介、使用PyMongo库存储到数据库等,并结合豆瓣电影的案例,讲解了如何一步步从该网站中抓取、解析、存储电影信息。
  第10部分
  主要针对爬虫框架Scrapy进行初步讲解,包括常见爬虫框架介绍、Scrapy框架的架构、运作流程、安装、基本操作等。
  第11部分
  首先介绍了Scrapy终端与核心组件。首先介绍了Scrapy终端的启动和使用,并通过一个示例进行巩固,然后详细介绍了Scrapy框架的一些核心组件,具体包括Spiders、Item Pipeline和Settings,最后结合斗鱼App爬虫的案例,讲解了如何使用Scrapy框架抓取手机App的数据。
  第12部分
  继续介绍自动抓取网页的爬虫CrawlSpider的知识,包括初识爬虫类CrawlSpider、CrawlSpider类的工作原理、通过Rule类决定爬取规则和通过LinkExtractor类提取链接,并开发了一个使用CrawlSpider类爬取腾讯社招网站的案例,在案例中对本部分的知识点加以应用。
  第13部分
  围绕着Scrapy-Redis分布式爬虫进行了讲解,包括Scrapy-Redis的完整架构、运作流程、主要组件、基本使用,以及如何搭建Scrapy-Redis开发环境等,并结合百度百科的案例运用这些知识点。
  以上就是做Python网络爬虫需要掌握的全部核心技术,大家都弄清楚了吗?其实做网络爬虫并不难,只要有科学的学习方法,把理论基础和实战经验结合起来,就能实现快速掌握爬虫核心技术。
  对于初学者想更轻松的学好Python开发,爬虫技术,Python数据分析,人工智能等技术,这里也给大家准备了一套系统教学资源,加Python技术学习qq裙:937667509,免费领取。学习过程中有疑问,群里有专业的老司机免费答疑解惑!
  PS:如果觉得本篇文章对您有所帮助,欢迎关注、订阅!帮忙点个 再看 转发一下分享出去
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
   查看全部

  Python网络爬虫工程师需要掌握的核心技术
  
  在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战。基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因。那么做Python网络爬虫需要掌握哪些核心技术呢?以小编推出的《解析Python网络爬虫》课程为例,内容涉及Scrapy框架、分布式爬虫等核心技术,下面我们来一起看一下Python网络爬虫具体的学习内容吧!
  
  Python网络爬虫课程简介:
  为了让具备Python基础的人群适合岗位的需求,小编推出了一门全面的、系统的、简易的Python网络爬虫入门级课程,不仅讲解了学习网络爬虫必备的基础知识,而且加入了爬虫框架的内容,大家学完之后,能够全面地掌握抓取网页和解析网页的多种技术,还能够掌握一些爬虫的扩展知识,如并发下载、识别图像文字、抓取动态内容等。并且大家学完还能熟练地掌握爬虫框架的使用,如Scrapy,以此创建自己的网络爬虫项目,胜任Python网络爬虫工程师相关岗位的工作。
  Python网络爬虫知识大纲:
  第1部分
  主要是带领大家认识网络爬虫,包括爬虫产生背景、什么是爬虫、爬虫的用途、爬虫的分类等。
  第2部分
  主要针对爬虫的实现原理和技术进行讲解,包括爬虫实现原理、爬虫抓取网页的详细流程、通用爬虫中网页的分类、通用爬虫相关网站文件、反爬虫应对策略、为什么选择Python做爬虫等。希望读者能明白爬虫具体是怎样抓取网页的,并对抓取过程中产生的一些问题有所了解,后期会对这些问题提供一些合理的解决方案。
  第3部分
  主要介绍的是网页请求原理,包括浏览网页过程、HTTP网络请求原理、HTTP抓包工具Fiddler。
  第4部分
  介绍了用做抓取网页数据的两个库:urllib和requests。首先介绍了urllib库的基本使用,具体包括使用urllib传输数据、添加特定的Headers、设置代理服务器、超时设置、常见网络异常,然后介绍了更为人性化的requests库,并结合一个百度贴吧的案例,讲解如何使用urllib库抓取网页数据。大家应该能熟练地掌握两个库的使用,并反复使用多加练习,另外还可以参考官网提供的文档深入地学习。
  第5部分
  主要介绍的是解析网页数据的几种技术,包括正则表达式、XPath、Beautiful Soup和JSONPath,以及对封装了这些技术的Python模块或库的基本使用进行了讲解,包括re模块、lxml库、bs4库、json模块,并结合腾讯社招网站的案例,讲解如何使用re模块、lxml库和bs4库分别解析网页数据,以更好地区分这些技术的不同之处。大家在实际工作中,可根据具体情况选择合理的技术进行运用即可。
  第6部分
  主要针对并发下载进行了讲解,包括多线程爬虫流程分析、使用queue模块实现多线程爬虫、协程实现并发爬取,并结合糗事百科的案例,分别使用单线程、多线程、协程三种技术获取网页数据,并分析了三者的性能。
  第7部分
  围绕着抓取动态内容进行介绍,包括动态网页介绍、selenium和PhantomJS概述,selenium和PhantomJS安装配置、selenium和PhantomJS的基本使用,并结合模拟豆瓣网站登陆的案例,讲解了在项目中如何应用selenium和PhantomJS技术。
  第8部分
  主要针对图像识别与文字处理进行讲解,包括Tesseract引擎的下载和安装、pytesseract和PIL库、处理规范格式的文字、处理验证码等,并结合识别本地验证码图片的小程序,讲解了如何利用pytesseract识别图像中的验证码。
  第9部分
  主要介绍了存储爬虫数据,包括数据存储简介、MongoDB数据库简介、使用PyMongo库存储到数据库等,并结合豆瓣电影的案例,讲解了如何一步步从该网站中抓取、解析、存储电影信息。
  第10部分
  主要针对爬虫框架Scrapy进行初步讲解,包括常见爬虫框架介绍、Scrapy框架的架构、运作流程、安装、基本操作等。
  第11部分
  首先介绍了Scrapy终端与核心组件。首先介绍了Scrapy终端的启动和使用,并通过一个示例进行巩固,然后详细介绍了Scrapy框架的一些核心组件,具体包括Spiders、Item Pipeline和Settings,最后结合斗鱼App爬虫的案例,讲解了如何使用Scrapy框架抓取手机App的数据。
  第12部分
  继续介绍自动抓取网页的爬虫CrawlSpider的知识,包括初识爬虫类CrawlSpider、CrawlSpider类的工作原理、通过Rule类决定爬取规则和通过LinkExtractor类提取链接,并开发了一个使用CrawlSpider类爬取腾讯社招网站的案例,在案例中对本部分的知识点加以应用。
  第13部分
  围绕着Scrapy-Redis分布式爬虫进行了讲解,包括Scrapy-Redis的完整架构、运作流程、主要组件、基本使用,以及如何搭建Scrapy-Redis开发环境等,并结合百度百科的案例运用这些知识点。
  以上就是做Python网络爬虫需要掌握的全部核心技术,大家都弄清楚了吗?其实做网络爬虫并不难,只要有科学的学习方法,把理论基础和实战经验结合起来,就能实现快速掌握爬虫核心技术。
  对于初学者想更轻松的学好Python开发,爬虫技术,Python数据分析,人工智能等技术,这里也给大家准备了一套系统教学资源,加Python技术学习qq裙:937667509,免费领取。学习过程中有疑问,群里有专业的老司机免费答疑解惑!
  PS:如果觉得本篇文章对您有所帮助,欢迎关注、订阅!帮忙点个 再看 转发一下分享出去
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
  

Python网络爬虫精要

网站优化优采云 发表了文章 • 0 个评论 • 34 次浏览 • 2022-06-03 21:19 • 来自相关话题

  Python网络爬虫精要
  
  目的
  学习如何从互联网上获取数据。数据科学必须掌握的技能之一。
  本文所用到的第三方库如下: requests, parsel, selenium
  requests负责向网页发送HTTP请求并得到响应,parsel负责解析响应字符串,selenium负责JavaScript的渲染。
  网络爬虫是什么
  网络爬虫是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。
  如何爬取网站信息
  写爬虫之前,我们必须确保能够爬取目标网站的信息。
  不过在此之前必须弄清以下三个问题:
  网站是否已经提供了api
  网站是静态的还是动态的
  网站是否有反爬的对策
  情形1:开放api的网站
  一个网站倘若开放了api,那你就可以直接GET到它的json数据。
  比如xkcd的about页就提供了api供你下载
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />requests.get('https://xkcd.com/614/info.0.json').json()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  那么如何判断一个网站是否开放api呢?有3种方法:
  在站内寻找api入口
  用搜索引擎搜索“某网站 api”
  抓包。有的网站虽然用到了ajax(比如果壳网的瀑布流文章),但是通过抓包还是能够获取XHR里的json数据的。
  怎么抓包:F12 - Network - F5刷新即可 | 或者用fiddle等工具也可以
  情形2:不开放api的网站
  如果此网站是静态页面,那么你就可以用requests库发送请求,再用HTML解析库(lxml、parsel等)来解析响应的text
  解析库强烈推荐parsel,不仅语法和css选择器类似,而且速度也挺快,Scrapy用的就是它。
  你需要了解一下css选择器的语法(xpath也行),并且学会看网页的审查元素。
  比如获取konachan的所有原图链接
  from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get('https://konachan.com/post')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />imgs = tree.css('a.directlink::attr(href)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如果此网站是动态页面,先用selenium来渲染JS,再用HTML解析库来解析driver的page_source。
  比如获取hitomi.la的数据(这里把chrome设置成了无头模式)
  from selenium import webdriver<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options = webdriver.ChromeOptions()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options.add_argument('--headless')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver = webdriver.Chrome(options=options)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver.get('https://hitomi.la/type/gamecg-all-1.html')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=driver.page_source)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />gallery_content = tree.css('.gallery-content > div')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  情形3:反爬的网站
  目前的反爬策略常见的有:验证码、登录、封ip等。
  验证码:利用打码平台破解(如果硬上的话用opencv或keras训练图)
  登录:利用requests的post或者selenium模拟用户进行模拟登陆
  封ip:买些代理ip(免费ip一般都不管用),requests中传入proxies参数即可
  其他防反爬方法:伪装User-Agent,禁用cookies等
  推荐用fake-useragent来伪装User-Agent
  from fake_useragent import UserAgent<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />headers = {'User-Agent': UserAgent().random}<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get(url, headers=headers)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如何编写结构化的爬虫
  如果能成功地爬取网站信息,那么你已经成功了一大半。
  其实爬虫的架构很简单,无非就是创造一个tasklist,对tasklist里的每一个task调用crawl函数。
  大多数网页的url构造都是有规律的,你只需根据它用列表推倒式来构造出tasklist对于那些url不变的动态网页,先考虑抓包,不行再用selenium点击下一页
  如果追求速度的话,可以考虑用concurrent.futures或者asyncio等库。
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from concurrent import futures<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />domain = 'https://www.doutula.com'<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />def crawl(url):<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    res = requests.get(url)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    imgs = tree.css('img.lazy::attr(data-original)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    # save the imgs ...<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />if __name__ == '__main__':<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tasklist = [f'{domain}/article/list/?page={i}' for i in range(1, 551)]<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    with futures.ThreadPoolExecutor(50) as executor:<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />        executor.map(crawl, tasklist)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  数据存储的话,看你的需求,一般都是存到数据库中,只要熟悉对应的驱动即可。
  常用的数据库驱动有:pymysql(MySQL),pymongo(MongoDB)
  如果你需要框架的话
  文章读到这里,你应该对爬虫的基本结构有了一个清晰的认识,这时你可以去上手框架了。
  轻量级框架(looter):
  工业级框架(scrapy):
  点击这里参与Python编程学习
  本文作者
  ♚
  alphardex,Pythonista && Otaku,努力转行中的一位测绘人员。
  地址:/people/ban-zai-liu-shang
  投稿邮箱:
  欢迎点击申请
  
  Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以公安部、工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。
   查看全部

  Python网络爬虫精要
  
  目的
  学习如何从互联网上获取数据。数据科学必须掌握的技能之一。
  本文所用到的第三方库如下: requests, parsel, selenium
  requests负责向网页发送HTTP请求并得到响应,parsel负责解析响应字符串,selenium负责JavaScript的渲染。
  网络爬虫是什么
  网络爬虫是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。
  如何爬取网站信息
  写爬虫之前,我们必须确保能够爬取目标网站的信息。
  不过在此之前必须弄清以下三个问题:
  网站是否已经提供了api
  网站是静态的还是动态的
  网站是否有反爬的对策
  情形1:开放api的网站
  一个网站倘若开放了api,那你就可以直接GET到它的json数据。
  比如xkcd的about页就提供了api供你下载
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />requests.get('https://xkcd.com/614/info.0.json').json()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  那么如何判断一个网站是否开放api呢?有3种方法:
  在站内寻找api入口
  用搜索引擎搜索“某网站 api”
  抓包。有的网站虽然用到了ajax(比如果壳网的瀑布流文章),但是通过抓包还是能够获取XHR里的json数据的。
  怎么抓包:F12 - Network - F5刷新即可 | 或者用fiddle等工具也可以
  情形2:不开放api的网站
  如果此网站是静态页面,那么你就可以用requests库发送请求,再用HTML解析库(lxml、parsel等)来解析响应的text
  解析库强烈推荐parsel,不仅语法和css选择器类似,而且速度也挺快,Scrapy用的就是它。
  你需要了解一下css选择器的语法(xpath也行),并且学会看网页的审查元素。
  比如获取konachan的所有原图链接
  from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get('https://konachan.com/post')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />imgs = tree.css('a.directlink::attr(href)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如果此网站是动态页面,先用selenium来渲染JS,再用HTML解析库来解析driver的page_source。
  比如获取hitomi.la的数据(这里把chrome设置成了无头模式)
  from selenium import webdriver<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options = webdriver.ChromeOptions()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />options.add_argument('--headless')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver = webdriver.Chrome(options=options)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />driver.get('https://hitomi.la/type/gamecg-all-1.html')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />tree = Selector(text=driver.page_source)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />gallery_content = tree.css('.gallery-content > div')<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  情形3:反爬的网站
  目前的反爬策略常见的有:验证码、登录、封ip等。
  验证码:利用打码平台破解(如果硬上的话用opencv或keras训练图)
  登录:利用requests的post或者selenium模拟用户进行模拟登陆
  封ip:买些代理ip(免费ip一般都不管用),requests中传入proxies参数即可
  其他防反爬方法:伪装User-Agent,禁用cookies等
  推荐用fake-useragent来伪装User-Agent
  from fake_useragent import UserAgent<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />headers = {'User-Agent': UserAgent().random}<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />res = requests.get(url, headers=headers)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  如何编写结构化的爬虫
  如果能成功地爬取网站信息,那么你已经成功了一大半。
  其实爬虫的架构很简单,无非就是创造一个tasklist,对tasklist里的每一个task调用crawl函数。
  大多数网页的url构造都是有规律的,你只需根据它用列表推倒式来构造出tasklist对于那些url不变的动态网页,先考虑抓包,不行再用selenium点击下一页
  如果追求速度的话,可以考虑用concurrent.futures或者asyncio等库。
  import requests<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from parsel import Selector<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />from concurrent import futures<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />domain = 'https://www.doutula.com'<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />def crawl(url):<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    res = requests.get(url)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tree = Selector(text=res.text)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    imgs = tree.css('img.lazy::attr(data-original)').extract()<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    # save the imgs ...<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" /><br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />if __name__ == '__main__':<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    tasklist = [f'{domain}/article/list/?page={i}' for i in range(1, 551)]<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />    with futures.ThreadPoolExecutor(50) as executor:<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />        executor.map(crawl, tasklist)<br style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;word-wrap: inherit !important;word-break: inherit !important;" />
  数据存储的话,看你的需求,一般都是存到数据库中,只要熟悉对应的驱动即可。
  常用的数据库驱动有:pymysql(MySQL),pymongo(MongoDB)
  如果你需要框架的话
  文章读到这里,你应该对爬虫的基本结构有了一个清晰的认识,这时你可以去上手框架了。
  轻量级框架(looter):
  工业级框架(scrapy):
  点击这里参与Python编程学习
  本文作者
  ♚
  alphardex,Pythonista && Otaku,努力转行中的一位测绘人员。
  地址:/people/ban-zai-liu-shang
  投稿邮箱:
  欢迎点击申请
  
  Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以公安部、工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。
  

python抓取动态网页数据技术文档操作数据的三种方法。

网站优化优采云 发表了文章 • 0 个评论 • 32 次浏览 • 2022-06-02 01:01 • 来自相关话题

  python抓取动态网页数据技术文档操作数据的三种方法。
  python抓取动态网页数据技术文档操作数据的三种方法。它们是什么时候被用于数据抓取呢?这些操作所涉及的内容是什么?请在阅读本文时仔细思考。数据在个性化数据有一个让商家看起来很酷的名字:数据驱动。意味着数据驱动可以通过使用某种机器学习来加速抓取。当然,它依赖于成熟的经验,可以使网站获得更好的用户体验,并且应用程序的数据抓取能力提高。
  另一方面,网站的爬虫的采样要小得多,这样我们可以在数据领域对获取的数据进行任何预处理,并对其进行二次加工。虽然现在很多网站都在使用爬虫来通过留言和交易抓取小部分用户,但即使你计划将这些数据用作收益,这些数据通常没有很好的处理对象。例如,你能想象在一个真正有趣的过程中获取这些数据吗?你可以看到数据结构的相互关联,并且这些步骤可以逆过来在数据源之间进行交互。
  这可能没有你想要抓取的数据本身那么多,但是可以简单设置而且速度很快,使其成为数据驱动的一个很好的手段。那么,你应该怎么抓取网页呢?python抓取动态网页数据技术文档预处理步骤如下:找到网页中不存在或者明显含有错误数据的html类型;利用python工具从中提取并分析;使用pandas库从静态页面获取数据并将数据写入到一个pandas文件中;首先,当解决了数据库与数据抓取问题之后,也解决了与内容调制过程,至少每个页面有13个不同的调制器-更改页面xml格式并将其转换为link。
  a:修改html类型给出很多一站式服务,但不是所有的都适用于这个。首先从可从url中获取内容的网页类型开始。通常是:名为“the”的网页。new-html。new-html由带数据的url的第一行来编码。urlextension=”the”。例如。b:调制字符串上面的过程是创建pandas的数据并将数据写入文件中,然后您可以利用ipython将该操作结果传递给另一台电脑进行调制。
  它以pandas中的from_content函数来获取。另一种方法可以利用pipeline操作来完成-ipython会调制三个参数-一个在master和swpeer之间传递,另一个在package中传递,第三个在客户端。在url返回之前,所有这些都是文件。预处理成功抓取了网页之后,您可以使用在ipythonmessages中输出字符串的方法将数据内容传递给另一台电脑。
  这将为您准备了一个字符串,以便在单个电脑上查看。c:将数据导入文件您可以通过写入一个.ftp文件(通常由ipv4提供)或者.htaccess(一个文件)。d:修改返回的字符串您可以通过将数据写入pandas来取得其格式,但是这可能并不是最好的选择。row_name是不正确的。请用pandasm。 查看全部

  python抓取动态网页数据技术文档操作数据的三种方法。
  python抓取动态网页数据技术文档操作数据的三种方法。它们是什么时候被用于数据抓取呢?这些操作所涉及的内容是什么?请在阅读本文时仔细思考。数据在个性化数据有一个让商家看起来很酷的名字:数据驱动。意味着数据驱动可以通过使用某种机器学习来加速抓取。当然,它依赖于成熟的经验,可以使网站获得更好的用户体验,并且应用程序的数据抓取能力提高。
  另一方面,网站的爬虫的采样要小得多,这样我们可以在数据领域对获取的数据进行任何预处理,并对其进行二次加工。虽然现在很多网站都在使用爬虫来通过留言和交易抓取小部分用户,但即使你计划将这些数据用作收益,这些数据通常没有很好的处理对象。例如,你能想象在一个真正有趣的过程中获取这些数据吗?你可以看到数据结构的相互关联,并且这些步骤可以逆过来在数据源之间进行交互。
  这可能没有你想要抓取的数据本身那么多,但是可以简单设置而且速度很快,使其成为数据驱动的一个很好的手段。那么,你应该怎么抓取网页呢?python抓取动态网页数据技术文档预处理步骤如下:找到网页中不存在或者明显含有错误数据的html类型;利用python工具从中提取并分析;使用pandas库从静态页面获取数据并将数据写入到一个pandas文件中;首先,当解决了数据库与数据抓取问题之后,也解决了与内容调制过程,至少每个页面有13个不同的调制器-更改页面xml格式并将其转换为link。
  a:修改html类型给出很多一站式服务,但不是所有的都适用于这个。首先从可从url中获取内容的网页类型开始。通常是:名为“the”的网页。new-html。new-html由带数据的url的第一行来编码。urlextension=”the”。例如。b:调制字符串上面的过程是创建pandas的数据并将数据写入文件中,然后您可以利用ipython将该操作结果传递给另一台电脑进行调制。
  它以pandas中的from_content函数来获取。另一种方法可以利用pipeline操作来完成-ipython会调制三个参数-一个在master和swpeer之间传递,另一个在package中传递,第三个在客户端。在url返回之前,所有这些都是文件。预处理成功抓取了网页之后,您可以使用在ipythonmessages中输出字符串的方法将数据内容传递给另一台电脑。
  这将为您准备了一个字符串,以便在单个电脑上查看。c:将数据导入文件您可以通过写入一个.ftp文件(通常由ipv4提供)或者.htaccess(一个文件)。d:修改返回的字符串您可以通过将数据写入pandas来取得其格式,但是这可能并不是最好的选择。row_name是不正确的。请用pandasm。

爬虫Python入门好学吗?学什么?

网站优化优采云 发表了文章 • 0 个评论 • 23 次浏览 • 2022-05-30 12:18 • 来自相关话题

  爬虫Python入门好学吗?学什么?
  
  爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学。但要多看多练,有自己的逻辑想法。用Python达到自己的学习目的才算有价值。如果是入门学习了解,开始学习不难,但深入学习有难度,特别大项目。
  
  大部分爬虫按“发送请求——获得页面——解析页面——抽取并储存内容”的流程来进行,模拟了我们使用浏览器获取网页信息的过程。向服务器发送请求后,会得到返回的页面,通过解析页面之后,可以抽取我们想要的那部分信息,并存储在指定的文档或数据库中。
  爬虫Python入门学习分三个阶段:
  一、零基础阶段:
  从零开始学爬虫,系统入门,开始从0上手爬虫,爬虫除了必需的理论知识外更重要的是实际应用,带你抓取4种主流网站数据,掌握主流爬虫抓取方法。
  具备主流网站的数据抓取的能力是此阶段的学习目标
  学习重点:爬虫所需的计算机网络/前端/正则//xpath/CSS选择器等基础知识;实现静态网页,动态网页两大主流网页类型数据抓取;模拟登陆、应对反爬、识别验证码等难点详细讲解;多线程,多进程等工作常见应用场景难题讲解
  二、主流框架
  主流框架Scrapy实现海量数据抓取,从原生爬虫到框架的能力提升,学完你能彻底玩转Scrapy框架,开发一套自己的分布式爬虫系统,完全胜任中级Python工程师工作。获取高效抓取海量数据的能力。
  学习重点:Scrapy框架知识讲解spider/FormRequest/CrawlSpider等;从单机爬虫到分布式爬虫系统讲解;Scrapy突破反爬虫的限制以及Scrapy原理;Scrapy的更多高级特性包括sscrapy信号、自定义中间件;已有的海量数据结合Elasticsearch打造搜索引擎
  三、爬虫
  深入App数据抓取,爬虫能力提升,应对App数据抓取和数据可视化展示,能力不再局限于网页爬虫. 从此拓宽你的爬虫业务,增强自身核心竞争力。掌握App数据抓取实现数据可视化
  学习重点:学会主流抓包工具Fiddler/Mitmproxy 的应用;4种App数据抓取实战,学练结合深入掌握App爬虫技巧;基于Docker打造多任务抓取系统,提升工作效率;掌握Pyecharts库基础,绘制基本图形,地图等实现数据可视化。
  爬虫Python应用在很多领域,如爬取数据,进行市场调研和商业分析;作为机器学习、数据挖掘的原始数据;爬取优质的资源:图片、文本、视频。掌握正确的方法,在短时间内做到能够爬取主流网站的数据非常容易实现。建议爬虫Python入门从开始就树立一个具体的目标,在目标的驱动下,学习才会更加高效。
  end
  扫下方二维码加老师微信或是搜索老师微信号:XTUOL1988【备注学习Python】领取Python web开发,Python爬虫,Python数据分析,人工智能等学习教程。带你从零基础系统性的学好Python!也可以加老师建的Python技术学习教程qq裙:245345507,二者加一个就可以!
  
  
  欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
  万水千山总是情,点个【在看】行不行
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。 查看全部

  爬虫Python入门好学吗?学什么?
  
  爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学。但要多看多练,有自己的逻辑想法。用Python达到自己的学习目的才算有价值。如果是入门学习了解,开始学习不难,但深入学习有难度,特别大项目。
  
  大部分爬虫按“发送请求——获得页面——解析页面——抽取并储存内容”的流程来进行,模拟了我们使用浏览器获取网页信息的过程。向服务器发送请求后,会得到返回的页面,通过解析页面之后,可以抽取我们想要的那部分信息,并存储在指定的文档或数据库中。
  爬虫Python入门学习分三个阶段:
  一、零基础阶段:
  从零开始学爬虫,系统入门,开始从0上手爬虫,爬虫除了必需的理论知识外更重要的是实际应用,带你抓取4种主流网站数据,掌握主流爬虫抓取方法。
  具备主流网站的数据抓取的能力是此阶段的学习目标
  学习重点:爬虫所需的计算机网络/前端/正则//xpath/CSS选择器等基础知识;实现静态网页,动态网页两大主流网页类型数据抓取;模拟登陆、应对反爬、识别验证码等难点详细讲解;多线程,多进程等工作常见应用场景难题讲解
  二、主流框架
  主流框架Scrapy实现海量数据抓取,从原生爬虫到框架的能力提升,学完你能彻底玩转Scrapy框架,开发一套自己的分布式爬虫系统,完全胜任中级Python工程师工作。获取高效抓取海量数据的能力。
  学习重点:Scrapy框架知识讲解spider/FormRequest/CrawlSpider等;从单机爬虫到分布式爬虫系统讲解;Scrapy突破反爬虫的限制以及Scrapy原理;Scrapy的更多高级特性包括sscrapy信号、自定义中间件;已有的海量数据结合Elasticsearch打造搜索引擎
  三、爬虫
  深入App数据抓取,爬虫能力提升,应对App数据抓取和数据可视化展示,能力不再局限于网页爬虫. 从此拓宽你的爬虫业务,增强自身核心竞争力。掌握App数据抓取实现数据可视化
  学习重点:学会主流抓包工具Fiddler/Mitmproxy 的应用;4种App数据抓取实战,学练结合深入掌握App爬虫技巧;基于Docker打造多任务抓取系统,提升工作效率;掌握Pyecharts库基础,绘制基本图形,地图等实现数据可视化。
  爬虫Python应用在很多领域,如爬取数据,进行市场调研和商业分析;作为机器学习、数据挖掘的原始数据;爬取优质的资源:图片、文本、视频。掌握正确的方法,在短时间内做到能够爬取主流网站的数据非常容易实现。建议爬虫Python入门从开始就树立一个具体的目标,在目标的驱动下,学习才会更加高效。
  end
  扫下方二维码加老师微信或是搜索老师微信号:XTUOL1988【备注学习Python】领取Python web开发,Python爬虫,Python数据分析,人工智能等学习教程。带你从零基础系统性的学好Python!也可以加老师建的Python技术学习教程qq裙:245345507,二者加一个就可以!
  
  
  欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
  万水千山总是情,点个【在看】行不行
  *声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

官方客服QQ群

微信人工客服

QQ人工客服


线