动态网页抓取

动态网页抓取

动态网页抓取(网站建设的基础静态网页的网址形式和优点介绍)

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

  动态网页抓取(网站建设的基础静态网页的网址形式和优点介绍)
  网站构建的基础是静态网页,静态网页和动态网页并非互不兼容。静态网页的URL形式通常为:,即后缀为.htm、.html等,而后缀为.aspx.asp、.jsp、.php、.perl、.cgi等等等,还有一个标志性的符号——“?” 在动态网页 URL 中。
  
  静态网页的优点
  1)静态网页内容比较稳定,容易被搜索引擎检索;
  2)静态页面加载速度快,加载静态页面时无需搜索数据库;
  静态网页的缺点
  1)静态网页不支持数据库,不收录程序和非交互式网页。网站制作和维护的工作量比较大,在网站信息量很大的情况下很难完全依赖静态网页制作;
  2)静态网页的交互跨界在功能方面有较大的限制。
  动态网页的优点
  1)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  2)使用动态网页技术网站可以实现更多功能,如用户注册、用户登录、在线调查、用户管理、订单管理等;
  动态网页的缺点
  1)“?” 在动态网页中对于搜索引擎检索有一定的问题。一般来说,搜索引擎不可能从一个网站数据库中访问所有网页,或者出于技术考虑,搜索蜘蛛不会抓取“?”后面的内容。在URL中,所以使用动态网页的网站在推广搜索引擎时需要做一定的技术处理,以满足搜索引擎的要求;
  2)动态页面比较麻烦。网页接收到用户的指令后,将指令带到数据库中查找指令对应的数据,然后传递给服务器。动态页面通过服务器的编译被编译成标准的HTML。代码,它被传递给用户的浏览器,以便用户看到网页。结果,加载时间变长,用户不愿意再次访问您的页面。
  3)动态网页是用户输入指令后形成的页面。该页面不存在,搜索引擎只会抓取现成的,不会自行进入。虽然现在大部分搜索引擎都支持动态页面的爬取,但毕竟还不够完善。返回搜狐,查看更多 查看全部

  动态网页抓取(网站建设的基础静态网页的网址形式和优点介绍)
  网站构建的基础是静态网页,静态网页和动态网页并非互不兼容。静态网页的URL形式通常为:,即后缀为.htm、.html等,而后缀为.aspx.asp、.jsp、.php、.perl、.cgi等等等,还有一个标志性的符号——“?” 在动态网页 URL 中。
  
  静态网页的优点
  1)静态网页内容比较稳定,容易被搜索引擎检索;
  2)静态页面加载速度快,加载静态页面时无需搜索数据库;
  静态网页的缺点
  1)静态网页不支持数据库,不收录程序和非交互式网页。网站制作和维护的工作量比较大,在网站信息量很大的情况下很难完全依赖静态网页制作;
  2)静态网页的交互跨界在功能方面有较大的限制。
  动态网页的优点
  1)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  2)使用动态网页技术网站可以实现更多功能,如用户注册、用户登录、在线调查、用户管理、订单管理等;
  动态网页的缺点
  1)“?” 在动态网页中对于搜索引擎检索有一定的问题。一般来说,搜索引擎不可能从一个网站数据库中访问所有网页,或者出于技术考虑,搜索蜘蛛不会抓取“?”后面的内容。在URL中,所以使用动态网页的网站在推广搜索引擎时需要做一定的技术处理,以满足搜索引擎的要求;
  2)动态页面比较麻烦。网页接收到用户的指令后,将指令带到数据库中查找指令对应的数据,然后传递给服务器。动态页面通过服务器的编译被编译成标准的HTML。代码,它被传递给用户的浏览器,以便用户看到网页。结果,加载时间变长,用户不愿意再次访问您的页面。
  3)动态网页是用户输入指令后形成的页面。该页面不存在,搜索引擎只会抓取现成的,不会自行进入。虽然现在大部分搜索引擎都支持动态页面的爬取,但毕竟还不够完善。返回搜狐,查看更多

动态网页抓取(程序是否在服务器端运行是一个重要标志(一)_)

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

  动态网页抓取(程序是否在服务器端运行是一个重要标志(一)_)
  程序是否在服务器端运行是一个重要的指标。运行在服务器上的程序、网页和组件是动态网页,会在不同的时间从不同的客户端返回到不同的网页,例如JSP、ASP、PHP等。插件、组件、程序、网页、客户端运行的等属于静态网页,如html页面、Flash、JavaScript等,它们是永远不会改变的。
  静态网页和动态网页都有各自的特点。网站动态或静态网页的使用主要取决于网站的功能需求和网站的内容。如果网站的功能比较简单,内容更新量不大,使用纯静态网页的方法会比较简单,反之一般采用动态网页技术。
  静态网页是网站构建的基础,静态网页和动态网页并不矛盾。为了使网站适应搜索引擎检索的需要,即使采用动态网页技术,也可以将网页内容转换成静态网页进行发布。
  动态网站也可以采用动静结合的原则,适用于使用动态网页的动态网页。如果需要使用静态网页,可以考虑使用静态网页来实现。同样的网站,动态网页内容与静态网页内容共存也很常见。
  我们简要总结动态网页的一般特征如下:
  (1)网站配合动态网络技术可以实现更多功能,如用户注册、用户登录、用户管理、订单管理等;
  (2)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  (3)动态网页实际上并不是独立存在于服务器上的网页文件,服务器只有在用户请求时才返回完整的网页。
  (4)"?"对于动态网页中的搜索引擎检索有一定的问题。搜索引擎往往无法访问网站的数据库中的所有网页,或者由于技术原因,搜索蜘蛛不抓取网址“?”后面的内容,所以使用动态网页的网站在推广搜索引擎时需要进行一些技术处理,以满足搜索引擎的要求。
  注:本文版权归星宿云原创所有,禁止转载,一经发现追究版权责任! 查看全部

  动态网页抓取(程序是否在服务器端运行是一个重要标志(一)_)
  程序是否在服务器端运行是一个重要的指标。运行在服务器上的程序、网页和组件是动态网页,会在不同的时间从不同的客户端返回到不同的网页,例如JSP、ASP、PHP等。插件、组件、程序、网页、客户端运行的等属于静态网页,如html页面、Flash、JavaScript等,它们是永远不会改变的。
  静态网页和动态网页都有各自的特点。网站动态或静态网页的使用主要取决于网站的功能需求和网站的内容。如果网站的功能比较简单,内容更新量不大,使用纯静态网页的方法会比较简单,反之一般采用动态网页技术。
  静态网页是网站构建的基础,静态网页和动态网页并不矛盾。为了使网站适应搜索引擎检索的需要,即使采用动态网页技术,也可以将网页内容转换成静态网页进行发布。
  动态网站也可以采用动静结合的原则,适用于使用动态网页的动态网页。如果需要使用静态网页,可以考虑使用静态网页来实现。同样的网站,动态网页内容与静态网页内容共存也很常见。
  我们简要总结动态网页的一般特征如下:
  (1)网站配合动态网络技术可以实现更多功能,如用户注册、用户登录、用户管理、订单管理等;
  (2)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  (3)动态网页实际上并不是独立存在于服务器上的网页文件,服务器只有在用户请求时才返回完整的网页。
  (4)"?"对于动态网页中的搜索引擎检索有一定的问题。搜索引擎往往无法访问网站的数据库中的所有网页,或者由于技术原因,搜索蜘蛛不抓取网址“?”后面的内容,所以使用动态网页的网站在推广搜索引擎时需要进行一些技术处理,以满足搜索引擎的要求。
  注:本文版权归星宿云原创所有,禁止转载,一经发现追究版权责任!

动态网页抓取( 动态网站丰富了网站的功能但是要避免「搜索机器人陷阱spidertraps」的脚本错误)

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

  动态网页抓取(
动态网站丰富了网站的功能但是要避免「搜索机器人陷阱spidertraps」的脚本错误)
  
  动态网站搜索引擎策略动态网站搜索引擎策略动态网站丰富了网站的功能,但是对于搜索引擎来说,情况就不同了。它是在执行“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。另外,搜索引擎要避免“搜索机器人陷阱蜘蛛陷阱”的脚本错误——动态网站最早在互联网出现时的出现和优势,网站内容以HTML静态形式存储在服务器上页。访问者访问的页面是这些实际存在的静态页面。随着技术的发展,特别是PERLASP的数据库和脚本技术,PHP和JSP 越来越多的网站开始采用动态页面发布方式。例如,当我们在GoogleCOM上搜索一个内容时,搜索结果页面文件“本身”在Google服务器上并不存在,而是在我们输入搜索内容时被程序调用。后台数据库是实时生成的,也就是说这些结果页面是动态页面和静态页面。站点只涉及文件的传输,而动态站点要复杂得多。用户和网站之间有很多互动网站不再只是内容的发布,变成了一种“应用”,是软件产业向互联网的扩展。从软件的角度来看,动态站点是逻辑应用层和数据层的分离。数据库负责站点数据的存储和管理,还有ASP、PHP、JSP等。逻辑应用除了增加很多交互功能外,好处是站点的维护、更新、升级很多更方便。可以说,没有动态网站技术,互联网上这些超大型网站是不可能进行二次搜索的。引擎在抓取动态网站页面时面临的问题动态网站从用户的角度来说是很好的丰富了网站的功能,但是对于搜索引擎和网站排名seo来说,情况不同关于搜索引擎和分类的区别以及搜索引擎是如何工作的,请“了解搜索引擎”,根本问题是“输入” 而“选择”动态页面是由用户“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。比如我们想在当当书店网站上查看冯英健的《网络营销基础与实践》。介绍页面是动态生成的URL地址在这里。需要输入“”后的product_id参数值。“搜索机器人”可以通过链接找到页面,但无法在“”后面输入product_id参数值,无法抓取页面文件。带有“”的页面在技术上可以被搜索引擎抓取,但通常他们选择不抓取它。这是为了避免称为“
  
  这种将动态站点转换为静态页面的方法更适合页面发布后变化较少的站点。比如新浪的新闻中心等一些新闻网站一般都是动态的网站可以用下面的方法让搜索引擎抓取首先我们需要让动态页面看起来像一个“静态页面”动态页面的URL地址中的“” 可以使用以下技术来提供一种使用ASP技术的动态页面工具,称为XQASP。用。。。来代替 ””。对于使用 ColdFusion 技术的站点,您需要在服务器上重新配置 ColdFusion。使用“”而不是“”将参数传输到有关 URL 的更多详细信息,请参阅该站点。对于使用 Apache 服务器的站点,您可以使用重写模块将带参数的 URL 地址转换为搜索引擎支持的形式。默认情况下,模块 mod_rewrite 未安装在 Apache 服务器中。详细信息请参见其他动态技术,也可以找到相应的方法来改变URL的形式,然后创建一些静态页面指向这些动态页面来链接改变后的URL。前面说过,搜索引擎机器人本身不会“输入”参数,所以让上面的动态页面被搜索引擎抓取,我们还需要告诉机器人这些页面的地址,也就是参数。我们可以创建一些静态页面,在网络营销中一般称为“网关页面”。这些页面有大量指向这些动态页面的链接。这些页面和链接的动态页面的地址可以在更改URL形式后被搜索引擎抓取。当我们调整动态站点以适应搜索引擎时,四个搜索引擎对动态 网站 支持的改进至关重要。词搜索引擎也在发展。到目前为止,大多数搜索引擎不支持动态页面的爬取,但是GoogleHOTBOT等已经开始尝试爬取动态的网站页面,包括“”,这就是为什么我们现在在这些搜索引擎的结果中有动态链接避免“搜索机器人陷阱”当这些搜索引擎抓取仅从至少“看起来”静态的静态页面抓取的动态页面时,不再抓取该页面链接的动态页面以及从动态页面链接的动态页面,所以如果一个动态网站只针对以上搜索引擎,可以在上节介绍的方法的基础上进行简化,只需要创建一些入口页面链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。 查看全部

  动态网页抓取(
动态网站丰富了网站的功能但是要避免「搜索机器人陷阱spidertraps」的脚本错误)
  
  动态网站搜索引擎策略动态网站搜索引擎策略动态网站丰富了网站的功能,但是对于搜索引擎来说,情况就不同了。它是在执行“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。另外,搜索引擎要避免“搜索机器人陷阱蜘蛛陷阱”的脚本错误——动态网站最早在互联网出现时的出现和优势,网站内容以HTML静态形式存储在服务器上页。访问者访问的页面是这些实际存在的静态页面。随着技术的发展,特别是PERLASP的数据库和脚本技术,PHP和JSP 越来越多的网站开始采用动态页面发布方式。例如,当我们在GoogleCOM上搜索一个内容时,搜索结果页面文件“本身”在Google服务器上并不存在,而是在我们输入搜索内容时被程序调用。后台数据库是实时生成的,也就是说这些结果页面是动态页面和静态页面。站点只涉及文件的传输,而动态站点要复杂得多。用户和网站之间有很多互动网站不再只是内容的发布,变成了一种“应用”,是软件产业向互联网的扩展。从软件的角度来看,动态站点是逻辑应用层和数据层的分离。数据库负责站点数据的存储和管理,还有ASP、PHP、JSP等。逻辑应用除了增加很多交互功能外,好处是站点的维护、更新、升级很多更方便。可以说,没有动态网站技术,互联网上这些超大型网站是不可能进行二次搜索的。引擎在抓取动态网站页面时面临的问题动态网站从用户的角度来说是很好的丰富了网站的功能,但是对于搜索引擎和网站排名seo来说,情况不同关于搜索引擎和分类的区别以及搜索引擎是如何工作的,请“了解搜索引擎”,根本问题是“输入” 而“选择”动态页面是由用户“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。比如我们想在当当书店网站上查看冯英健的《网络营销基础与实践》。介绍页面是动态生成的URL地址在这里。需要输入“”后的product_id参数值。“搜索机器人”可以通过链接找到页面,但无法在“”后面输入product_id参数值,无法抓取页面文件。带有“”的页面在技术上可以被搜索引擎抓取,但通常他们选择不抓取它。这是为了避免称为“
  
  这种将动态站点转换为静态页面的方法更适合页面发布后变化较少的站点。比如新浪的新闻中心等一些新闻网站一般都是动态的网站可以用下面的方法让搜索引擎抓取首先我们需要让动态页面看起来像一个“静态页面”动态页面的URL地址中的“” 可以使用以下技术来提供一种使用ASP技术的动态页面工具,称为XQASP。用。。。来代替 ””。对于使用 ColdFusion 技术的站点,您需要在服务器上重新配置 ColdFusion。使用“”而不是“”将参数传输到有关 URL 的更多详细信息,请参阅该站点。对于使用 Apache 服务器的站点,您可以使用重写模块将带参数的 URL 地址转换为搜索引擎支持的形式。默认情况下,模块 mod_rewrite 未安装在 Apache 服务器中。详细信息请参见其他动态技术,也可以找到相应的方法来改变URL的形式,然后创建一些静态页面指向这些动态页面来链接改变后的URL。前面说过,搜索引擎机器人本身不会“输入”参数,所以让上面的动态页面被搜索引擎抓取,我们还需要告诉机器人这些页面的地址,也就是参数。我们可以创建一些静态页面,在网络营销中一般称为“网关页面”。这些页面有大量指向这些动态页面的链接。这些页面和链接的动态页面的地址可以在更改URL形式后被搜索引擎抓取。当我们调整动态站点以适应搜索引擎时,四个搜索引擎对动态 网站 支持的改进至关重要。词搜索引擎也在发展。到目前为止,大多数搜索引擎不支持动态页面的爬取,但是GoogleHOTBOT等已经开始尝试爬取动态的网站页面,包括“”,这就是为什么我们现在在这些搜索引擎的结果中有动态链接避免“搜索机器人陷阱”当这些搜索引擎抓取仅从至少“看起来”静态的静态页面抓取的动态页面时,不再抓取该页面链接的动态页面以及从动态页面链接的动态页面,所以如果一个动态网站只针对以上搜索引擎,可以在上节介绍的方法的基础上进行简化,只需要创建一些入口页面链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。

动态网页抓取(搜索引擎能否顺利抓取网站的基本信息是体现网络优化是否合格的标准)

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

  动态网页抓取(搜索引擎能否顺利抓取网站的基本信息是体现网络优化是否合格的标准)
  搜索引擎能否成功抓取网站的基本信息,是反映网络优化是否合格的标准。小编认为,当用户通过搜索引擎进行搜索时,能够出现在一个理想的位置,让用户能够找到相关的信息并引起兴趣是非常重要的。一般在制作网站的时候,应该参考各个搜索引擎提供的质量指南,尽量匹配或者接近相关的。
  
  例如: 谷歌提供的设计和内容指南:网站应该有清晰的层次结构和文本链接,每个网页应该至少有一个静态文本链接可以打开;为用户提供网站地图,列出网站重要位置的链接;如果 网站map 有超过 100 个或大约 100 个链接,最好将 网站map 拆分为多个页面;网站 应该信息丰富且有用,页面文本应该清晰准确地表达它试图传达的内容;考虑用户将使用哪些术语来查找您的页面,并尝试将该文本收录在您的 网站 中;尝试使用文本而不是图像来显示重要的名称、内容或链接,因为 Google 爬虫无法识别图像中收录的文本;确保 TITLE 和 ALT 标签具有描述性且准确;检查链接是否有错误,并确保 HTML 格式正确;如果您使用动态页面(即 URL 收录“?”字符),请注意并非每个搜索引擎蜘蛛都能抓取动态页面和静态页面;静态页面可以帮助缩短参数的长度,减少参数的数量;将给定页面上的链接数量限制为合理的数量(小于 100). 查看全部

  动态网页抓取(搜索引擎能否顺利抓取网站的基本信息是体现网络优化是否合格的标准)
  搜索引擎能否成功抓取网站的基本信息,是反映网络优化是否合格的标准。小编认为,当用户通过搜索引擎进行搜索时,能够出现在一个理想的位置,让用户能够找到相关的信息并引起兴趣是非常重要的。一般在制作网站的时候,应该参考各个搜索引擎提供的质量指南,尽量匹配或者接近相关的。
  
  例如: 谷歌提供的设计和内容指南:网站应该有清晰的层次结构和文本链接,每个网页应该至少有一个静态文本链接可以打开;为用户提供网站地图,列出网站重要位置的链接;如果 网站map 有超过 100 个或大约 100 个链接,最好将 网站map 拆分为多个页面;网站 应该信息丰富且有用,页面文本应该清晰准确地表达它试图传达的内容;考虑用户将使用哪些术语来查找您的页面,并尝试将该文本收录在您的 网站 中;尝试使用文本而不是图像来显示重要的名称、内容或链接,因为 Google 爬虫无法识别图像中收录的文本;确保 TITLE 和 ALT 标签具有描述性且准确;检查链接是否有错误,并确保 HTML 格式正确;如果您使用动态页面(即 URL 收录“?”字符),请注意并非每个搜索引擎蜘蛛都能抓取动态页面和静态页面;静态页面可以帮助缩短参数的长度,减少参数的数量;将给定页面上的链接数量限制为合理的数量(小于 100).

动态网页抓取( 前情介绍前段时间开发了一个功能,解决过程中遇到的问题)

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

  动态网页抓取(
前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  Java基于Selenium动态爬取页面
  介绍
  前段时间开发了一个功能,通过HttpClient访问某个页面,获取该页面的所有html内容;然后被抓取的整个页面显示在我自己的网页上;但是一段时间后,网页升级了,图片变成了动态加载,无法直接通过HttpClient获取完整的页面内容。图片处于延迟加载状态,无法显示正确的内容。
  解决方案
  由于没有办法直接爬取静态页面,可以尝试动态爬取页面;如何爬取动态页面,本文使用Selenium来动态爬取页面。Selenium 模拟正常打开浏览器并浏览网页的过程。当整个页面加载到页面底部,然后抓取整个网页的内容,就可以完整的获取到页面内容。
  Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  引用 Selenium 库的 jar 包
  
org.seleniumhq.selenium
selenium-java
3.141.59

  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作做好了,接下来就是开发代码了。废话不多说,直接上代码吧。
<p>public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i 查看全部

  动态网页抓取(
前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  Java基于Selenium动态爬取页面
  介绍
  前段时间开发了一个功能,通过HttpClient访问某个页面,获取该页面的所有html内容;然后被抓取的整个页面显示在我自己的网页上;但是一段时间后,网页升级了,图片变成了动态加载,无法直接通过HttpClient获取完整的页面内容。图片处于延迟加载状态,无法显示正确的内容。
  解决方案
  由于没有办法直接爬取静态页面,可以尝试动态爬取页面;如何爬取动态页面,本文使用Selenium来动态爬取页面。Selenium 模拟正常打开浏览器并浏览网页的过程。当整个页面加载到页面底部,然后抓取整个网页的内容,就可以完整的获取到页面内容。
  Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  引用 Selenium 库的 jar 包
  
org.seleniumhq.selenium
selenium-java
3.141.59

  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作做好了,接下来就是开发代码了。废话不多说,直接上代码吧。
<p>public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i

动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)

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

  动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)
  5-14更新
  注:目前,拉狗网已经更改了json结构。以前是content-result,现在改成content-positionResult-result,所以写代码的时候要特别注意加一层positionResult分析。
  现在很多网站使用了一种叫做Ajax(异步加载)的技术,也就是说,当一个网页打开的时候,会先把上面的一些东西展示给你,然后再慢慢加载剩下的。
  所以你可以看到很多网页,慢慢的刷,或者一些网站随着你的移动,很多信息都在慢慢加载。这种页面的好处是页面加载速度非常快(因为它不必一次加载整个内容)。
  但这对我们写爬虫来说很不方便,因为你不能总是爬你想要的!
  让我们举个例子。因为最近想分析一下拉狗网的工作情况数据,就去找他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)
  
  图片
  如您所见,这里有很多招聘信息。注意这里当我们点击下一页的时候
  
  图片
  我们可以发现网页地址是直接加载的,没有更新!!
  
  图片
  这显然是一个动态页面。让我们写一个爬虫来爬取页面,看看我们能得到什么内容。现在我们应该可以很快地编写(构建)这样一个爬虫了,对吧?(其实没什么)
  
  图片
  您可以看到输出,并且可以浏览所有源代码,而无需任何有关作业的信息!
  
  图片
  如果你觉得不直观,我教你一个技巧,我们简单的输出成一个html看看
  ![](爬虫/动态加载网页爬取/72.png" width=400px /&gt;
  就是这样。. 关键部分!空的!!!
  
  图片
  找到网站
  这个时候我们应该怎么做?信息爬不起来??
  当然不是,你想,只要显示在网页上,肯定是在某个地方,只是我们没有找到。
  但是,这一次,我们必须努力。我们还是回到刚才的网页,点击F12。这时候,我们使用网络功能
  
  图片
  这个时候你可能什么都看不到,因为它只记录了打开后的网络资源信息。
  让我们按 F5 刷新。
  
  图片
  可以看到有东西开始滑动了……太快了,我的眼睛跟不上,我们等它停止,我们点击任意资源,右边的框会出现,我们切换到响应
  
  图片
  然后我们开始寻找可疑的网络资源。首先,图片、css等可以跳过。这里有个窍门,就是一般来说这种数据会存储在json中,所以我们尝试在filter中输入json
  
  图片
  我们找到了2个感觉非常相似的资源,其中一个直接带有位置的名称,我们右键单击并在新选项卡中打开它。
  ![](爬虫/动态加载网页爬取/25.png" width=200px /&gt;
  虽然看起来杂乱无章(密集恐惧症估计难以忍受),但实际上非常有条理,都对应着关键值。这是json格式,特别适合网页数据交换。
  
  图片
  在这里我们发现它就是它!所有工作信息都在里面,我们快速记录下它的URL
  网页结构
  通过观察网页地址可以发现:
  这一段是固定的,剩下的我们发现上面有一个北京
  
  图片
  我们改成上海看看,可以看到又出现了一个网页,和之前工作地点改成上海的网页一模一样,对应的内容也一样。
  
  图片
  
  图片
  所以我们可以得出结论,这里的城市标签代表了你选择的工作地点,那么如果我们选择工作经验、学历要求等等一切呢?? 直接可以看到,URL变化很大
  src="爬虫/动态加载网页爬取/53.png)
  我们直接把这些复制到刚才找到的网页上
  
  图片
  可以发现和网页的内容是一致的
  
  图片
  现在我们可以得出结论,我们只需要这个 URL:
  然后您可以稍后添加这些参数:
  gj=应届毕业生&amp;xl=大专&amp;jd=成长型&amp;hy=移动互联网&amp;px=新&amp;city=上海
  通过修改这些参数,我们可以获得不同的作业信息。
  注意:这里的构造比较简单。有时,某些 URL 的构造远比这复杂得多。经常有 id= 或者你不知道是什么意思的东西。这个时候这个id的可能值可能在其他文件中,你可能要查一下,也可能在页面源代码的某个地方。
  还有一种情况可能会出现time=什么的,就是时间戳。在这种情况下,需要使用时间函数来构造它。总之,要具体情况具体分析。
  import time
time.time()
  写爬虫
  因为这个网页的格式是json,那么我们可以很好的读取json格式的内容。
  这里我们切换到预览,然后点击内容-结果,可以先找到一个列表,然后点击查看各个位置的内容。为什么从这里看?一个好处就是知道json文件的层次结构,方便后面编码。
  
  图片
  整个处理代码就那么几个字,就可以写出来,和刚才的层次结构完全一致。首先是内容,然后是结果,然后是每个位置的信息。
   jdict = json.loads(response.body)
jcontent = jdict["content"]
jresult = jcontent["result"]
for each in jresult:
print each['city']
print each['companyName']
print each['companySize']
print each['positionName']
print each['positionType']
print each['salary']
print ''
  当然,你还是要导入json
   import json
  
  图片
  我们可以运行看看效果
  ![](爬虫/动态加载网页爬取/91.png" width=400px /&gt;
  然后,我们可以将信息保存到文件或数据库中,这是我们之前学到的。
  修改 items.py
  添加你需要的东西
  
  图片
  修改settings.py
  正如我之前所说,这取决于您是否需要存储在数据库或文件中
  修改 pipelines.py
  如果需要加入数据库,请在此处添加数据库操作。如果你需要写一个文件,你可能不需要修改这个文件
  修改 parse()
  给item添加数据,然后yield,大家应该都很熟悉了
  
  图片
  但是,这里只爬取了一个网页的内容。如何获取更多页面的内容?我会在下一篇博客中介绍。有兴趣的童鞋可以自己试一试。如果您在下一页上获得内容,请使用上面教授的方法查找资源。 查看全部

  动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)
  5-14更新
  注:目前,拉狗网已经更改了json结构。以前是content-result,现在改成content-positionResult-result,所以写代码的时候要特别注意加一层positionResult分析。
  现在很多网站使用了一种叫做Ajax(异步加载)的技术,也就是说,当一个网页打开的时候,会先把上面的一些东西展示给你,然后再慢慢加载剩下的。
  所以你可以看到很多网页,慢慢的刷,或者一些网站随着你的移动,很多信息都在慢慢加载。这种页面的好处是页面加载速度非常快(因为它不必一次加载整个内容)。
  但这对我们写爬虫来说很不方便,因为你不能总是爬你想要的!
  让我们举个例子。因为最近想分析一下拉狗网的工作情况数据,就去找他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)
  
  图片
  如您所见,这里有很多招聘信息。注意这里当我们点击下一页的时候
  
  图片
  我们可以发现网页地址是直接加载的,没有更新!!
  
  图片
  这显然是一个动态页面。让我们写一个爬虫来爬取页面,看看我们能得到什么内容。现在我们应该可以很快地编写(构建)这样一个爬虫了,对吧?(其实没什么)
  
  图片
  您可以看到输出,并且可以浏览所有源代码,而无需任何有关作业的信息!
  
  图片
  如果你觉得不直观,我教你一个技巧,我们简单的输出成一个html看看
  ![](爬虫/动态加载网页爬取/72.png" width=400px /&gt;
  就是这样。. 关键部分!空的!!!
  
  图片
  找到网站
  这个时候我们应该怎么做?信息爬不起来??
  当然不是,你想,只要显示在网页上,肯定是在某个地方,只是我们没有找到。
  但是,这一次,我们必须努力。我们还是回到刚才的网页,点击F12。这时候,我们使用网络功能
  
  图片
  这个时候你可能什么都看不到,因为它只记录了打开后的网络资源信息。
  让我们按 F5 刷新。
  
  图片
  可以看到有东西开始滑动了……太快了,我的眼睛跟不上,我们等它停止,我们点击任意资源,右边的框会出现,我们切换到响应
  
  图片
  然后我们开始寻找可疑的网络资源。首先,图片、css等可以跳过。这里有个窍门,就是一般来说这种数据会存储在json中,所以我们尝试在filter中输入json
  
  图片
  我们找到了2个感觉非常相似的资源,其中一个直接带有位置的名称,我们右键单击并在新选项卡中打开它。
  ![](爬虫/动态加载网页爬取/25.png" width=200px /&gt;
  虽然看起来杂乱无章(密集恐惧症估计难以忍受),但实际上非常有条理,都对应着关键值。这是json格式,特别适合网页数据交换。
  
  图片
  在这里我们发现它就是它!所有工作信息都在里面,我们快速记录下它的URL
  网页结构
  通过观察网页地址可以发现:
  这一段是固定的,剩下的我们发现上面有一个北京
  
  图片
  我们改成上海看看,可以看到又出现了一个网页,和之前工作地点改成上海的网页一模一样,对应的内容也一样。
  
  图片
  
  图片
  所以我们可以得出结论,这里的城市标签代表了你选择的工作地点,那么如果我们选择工作经验、学历要求等等一切呢?? 直接可以看到,URL变化很大
  src="爬虫/动态加载网页爬取/53.png)
  我们直接把这些复制到刚才找到的网页上
  
  图片
  可以发现和网页的内容是一致的
  
  图片
  现在我们可以得出结论,我们只需要这个 URL:
  然后您可以稍后添加这些参数:
  gj=应届毕业生&amp;xl=大专&amp;jd=成长型&amp;hy=移动互联网&amp;px=新&amp;city=上海
  通过修改这些参数,我们可以获得不同的作业信息。
  注意:这里的构造比较简单。有时,某些 URL 的构造远比这复杂得多。经常有 id= 或者你不知道是什么意思的东西。这个时候这个id的可能值可能在其他文件中,你可能要查一下,也可能在页面源代码的某个地方。
  还有一种情况可能会出现time=什么的,就是时间戳。在这种情况下,需要使用时间函数来构造它。总之,要具体情况具体分析。
  import time
time.time()
  写爬虫
  因为这个网页的格式是json,那么我们可以很好的读取json格式的内容。
  这里我们切换到预览,然后点击内容-结果,可以先找到一个列表,然后点击查看各个位置的内容。为什么从这里看?一个好处就是知道json文件的层次结构,方便后面编码。
  
  图片
  整个处理代码就那么几个字,就可以写出来,和刚才的层次结构完全一致。首先是内容,然后是结果,然后是每个位置的信息。
   jdict = json.loads(response.body)
jcontent = jdict["content"]
jresult = jcontent["result"]
for each in jresult:
print each['city']
print each['companyName']
print each['companySize']
print each['positionName']
print each['positionType']
print each['salary']
print ''
  当然,你还是要导入json
   import json
  
  图片
  我们可以运行看看效果
  ![](爬虫/动态加载网页爬取/91.png" width=400px /&gt;
  然后,我们可以将信息保存到文件或数据库中,这是我们之前学到的。
  修改 items.py
  添加你需要的东西
  
  图片
  修改settings.py
  正如我之前所说,这取决于您是否需要存储在数据库或文件中
  修改 pipelines.py
  如果需要加入数据库,请在此处添加数据库操作。如果你需要写一个文件,你可能不需要修改这个文件
  修改 parse()
  给item添加数据,然后yield,大家应该都很熟悉了
  
  图片
  但是,这里只爬取了一个网页的内容。如何获取更多页面的内容?我会在下一篇博客中介绍。有兴趣的童鞋可以自己试一试。如果您在下一页上获得内容,请使用上面教授的方法查找资源。

动态网页抓取( 私信小编007或者01即可获取数十套PDF或者零基础入门资料一套)

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

  动态网页抓取(
私信小编007或者01即可获取数十套PDF或者零基础入门资料一套)
  
  写在前面的话
  夜凉如水,夜空下,秋叶翩翩起舞。
  天桥下,五彩缤纷的灯火一望无际,人来人往的十字路口,繁华热闹的城市。
  我需要看看这位年轻女士的照片,感受这个世界的温柔。
  私信编辑007或01获取几十套PDF或一套零基础的入门资料!
  一.思路分析
  根据爬行动物的基本规则:
  1.寻找目标
  2.获取目标
  3.处理目标内容以获取有用信息
  行动
  1.我们的目标是:
  这个网站是论坛式的网站,分为几类。无论如何,尝试各种动画。
  我们的目标是找到这些(采集的)(隐藏的)移动(行进的)图片(self)的(self)、地面(electrical)地址(brain)。
  2.看看各个模块的url,有什么规则?
  
  是的,没错,如果您以访问者的身份访问,每个模块的 URL 将如下所示:
  开始使用
  1.获取入口页面内容
  即根据传入的URL,获取整个页面的源码
  
  这里我们使用 webdriver 和 PhantomJS 之类的模块,为什么?因为网页是动态加载的,所以可以爬取的数据是满的。
  2.获取页码
  
  这里的页码处理使用了一个模板pq,它使用PyQuery来查找我们需要的元素。处理起来感觉更好,非常方便。
  同时,这里的处理有点意思。如果你观察这个页面,你会发现每个模板的页码上下都有一个,然后
  我这里截图了,因为我们只需要页码
  3-6 一起说一下步骤3到6
  其实就是根据页数进行遍历,得到每一页的内容
  然后获取每一页的所有图片地址
  
  在获取每个页面的内容时,需要重新组装页面地址。
  有了新地址就可以得到当前页面的内容,进行数据处理得到每张图片的地址列表
  得到图片列表后,再次解析得到每张图片的URL
  将图像保存在本地,并将数据写入数据库
  
  其实大致的内容到这里就讲完了。我们可以将本论坛各个模块的动画保存在本地,同时将数据存入数据库。
  数据库过滤
  把数据放入数据库后,想到直接调用数据库就可以保存图片了
  (为什么会有这个想法,因为我发现如果直接在主程序中存储图片,运行太慢,不如把所有数据都放到数据库中,然后专门调用数据库存储图片)
  但是这里有个问题,数据里面有很多内容,然后我们发现很多内容都是重复的,所以我们需要对数据库进行去重
  关于去重的内容,其实我之前已经写过文章(我写那个文章的时候,这个爬虫已经完成了~)
  主要思想是对某个元素的数量进行操作。pymongo中有一个方法可以统计指定元素的个数。如果只有一个当前元素,那没关系。如果它不是元素,则将其删除。
  核心代码如下:
  
  读取数据库中的内容并存储图片
  数据去重后,再次存储图片就方便多了。
  图片删除后,无需再次运行。核心代码如下:
  
  完整代码
  01_get_gif_url.py
  
  02_delete_repeat_url_in_mongodb.py
  
  谢谢阅读!!! 查看全部

  动态网页抓取(
私信小编007或者01即可获取数十套PDF或者零基础入门资料一套)
  
  写在前面的话
  夜凉如水,夜空下,秋叶翩翩起舞。
  天桥下,五彩缤纷的灯火一望无际,人来人往的十字路口,繁华热闹的城市。
  我需要看看这位年轻女士的照片,感受这个世界的温柔。
  私信编辑007或01获取几十套PDF或一套零基础的入门资料!
  一.思路分析
  根据爬行动物的基本规则:
  1.寻找目标
  2.获取目标
  3.处理目标内容以获取有用信息
  行动
  1.我们的目标是:
  这个网站是论坛式的网站,分为几类。无论如何,尝试各种动画。
  我们的目标是找到这些(采集的)(隐藏的)移动(行进的)图片(self)的(self)、地面(electrical)地址(brain)。
  2.看看各个模块的url,有什么规则?
  
  是的,没错,如果您以访问者的身份访问,每个模块的 URL 将如下所示:
  开始使用
  1.获取入口页面内容
  即根据传入的URL,获取整个页面的源码
  
  这里我们使用 webdriver 和 PhantomJS 之类的模块,为什么?因为网页是动态加载的,所以可以爬取的数据是满的。
  2.获取页码
  
  这里的页码处理使用了一个模板pq,它使用PyQuery来查找我们需要的元素。处理起来感觉更好,非常方便。
  同时,这里的处理有点意思。如果你观察这个页面,你会发现每个模板的页码上下都有一个,然后
  我这里截图了,因为我们只需要页码
  3-6 一起说一下步骤3到6
  其实就是根据页数进行遍历,得到每一页的内容
  然后获取每一页的所有图片地址
  
  在获取每个页面的内容时,需要重新组装页面地址。
  有了新地址就可以得到当前页面的内容,进行数据处理得到每张图片的地址列表
  得到图片列表后,再次解析得到每张图片的URL
  将图像保存在本地,并将数据写入数据库
  
  其实大致的内容到这里就讲完了。我们可以将本论坛各个模块的动画保存在本地,同时将数据存入数据库。
  数据库过滤
  把数据放入数据库后,想到直接调用数据库就可以保存图片了
  (为什么会有这个想法,因为我发现如果直接在主程序中存储图片,运行太慢,不如把所有数据都放到数据库中,然后专门调用数据库存储图片)
  但是这里有个问题,数据里面有很多内容,然后我们发现很多内容都是重复的,所以我们需要对数据库进行去重
  关于去重的内容,其实我之前已经写过文章(我写那个文章的时候,这个爬虫已经完成了~)
  主要思想是对某个元素的数量进行操作。pymongo中有一个方法可以统计指定元素的个数。如果只有一个当前元素,那没关系。如果它不是元素,则将其删除。
  核心代码如下:
  
  读取数据库中的内容并存储图片
  数据去重后,再次存储图片就方便多了。
  图片删除后,无需再次运行。核心代码如下:
  
  完整代码
  01_get_gif_url.py
  
  02_delete_repeat_url_in_mongodb.py
  
  谢谢阅读!!!

动态网页抓取(如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇))

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

  动态网页抓取(如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇))
  前天给大家分享了第一篇(理论篇)如何使用Python网络爬虫爬取微信朋友圈数据。今天给大家分享一下代码实现(实战篇),然后上一篇继续深入。
  一、代码实现
  1、修改 Scrapy 项目中的 items.py 文件。我们需要获取的数据是朋友圈和发布日期,所以我们在这里定义了两个属性,日期和动态,如下图所示。
  
  2、修改实现爬虫逻辑的主文件moment.py。首先,导入模块,特别是在 items.py 中导入 WeixinMomentItem 类。小心不要错过这一点。然后修改start_requests方法,具体代码实现如下。
  
  3、修改parse方法解析导航数据包。代码实现稍微复杂一些,如下图所示。
  
  4、定义parse_moment函数,提取朋友圈数据。返回的数据以 JSON 格式加载,JSON 用于提取数据。具体代码实现如下图所示。
  
  5、在setting.py文件中取消注释ITEM_PIPELINES,表示数据是通过这个管道处理的。
  
  6、 之后就可以在命令行运行程序了。在命令行输入scrapy crawl moment -o moment.json,就可以得到朋友圈的数据了。控制台输出的信息如下图所示。
  
  7、然后我们得到一个moment.json文件,里面存放着我们朋友圈的数据,如下图所示。
  
  8、嗯,你没看错,里面得到的数据确实是看不懂,不过这不是乱码,而是编码问题。解决这个问题的方法是删除原来的moment.json文件,然后在命令行重新输入如下命令:scrapy crawl moment -o moment.json -s FEED_EXPORT_ENCODING=utf-8,可以看到编码问题已解决 已解决,如下图所示。
  
  在下一篇文章中,小编将为大家直观的展示一下抓拍到的朋友圈数据,敬请期待~~ 查看全部

  动态网页抓取(如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇))
  前天给大家分享了第一篇(理论篇)如何使用Python网络爬虫爬取微信朋友圈数据。今天给大家分享一下代码实现(实战篇),然后上一篇继续深入。
  一、代码实现
  1、修改 Scrapy 项目中的 items.py 文件。我们需要获取的数据是朋友圈和发布日期,所以我们在这里定义了两个属性,日期和动态,如下图所示。
  
  2、修改实现爬虫逻辑的主文件moment.py。首先,导入模块,特别是在 items.py 中导入 WeixinMomentItem 类。小心不要错过这一点。然后修改start_requests方法,具体代码实现如下。
  
  3、修改parse方法解析导航数据包。代码实现稍微复杂一些,如下图所示。
  
  4、定义parse_moment函数,提取朋友圈数据。返回的数据以 JSON 格式加载,JSON 用于提取数据。具体代码实现如下图所示。
  
  5、在setting.py文件中取消注释ITEM_PIPELINES,表示数据是通过这个管道处理的。
  
  6、 之后就可以在命令行运行程序了。在命令行输入scrapy crawl moment -o moment.json,就可以得到朋友圈的数据了。控制台输出的信息如下图所示。
  
  7、然后我们得到一个moment.json文件,里面存放着我们朋友圈的数据,如下图所示。
  
  8、嗯,你没看错,里面得到的数据确实是看不懂,不过这不是乱码,而是编码问题。解决这个问题的方法是删除原来的moment.json文件,然后在命令行重新输入如下命令:scrapy crawl moment -o moment.json -s FEED_EXPORT_ENCODING=utf-8,可以看到编码问题已解决 已解决,如下图所示。
  
  在下一篇文章中,小编将为大家直观的展示一下抓拍到的朋友圈数据,敬请期待~~

动态网页抓取(一下如何利用robots文件来提高蜘蛛对动态网站的抓取频率)

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

  动态网页抓取(一下如何利用robots文件来提高蜘蛛对动态网站的抓取频率)
  很多为网站做seo的站长都会遇到这样的问题,就是动态的网站好像不太受搜索引擎蜘蛛的欢迎,所以很多站长会选择做静态生成的网站@网站。但是静态生成的网站在日常维护和更新中总是有些不便。那么,有什么办法可以提高搜索引擎蜘蛛对动态网站的抓取频率呢?答案是肯定的,那就是好好利用robots文件!今天就和大家一起阅读下面的文章,学习如何使用robots文件来增加蜘蛛对动态网站的抓取频率!相信看完之后,你会忍不住马上开始工作!
  
  动态网站不用担心,搜索引擎可以正常抓取动态链接,但是使用robots文件可以轻松提升动态网站的抓取效率。我们都知道robots协议(也称为爬虫协议、机器人协议等)的全称是“Robots Exclusion Protocol”。网站 告诉搜索引擎哪些页面可以爬取,哪些页面不能爬取。Robots协议的本质是网站与搜索引擎爬虫之间的通信方式,用于引导搜索引擎更好地抓取网站内容。
  百度官方建议所有网站都使用robots文件,以更好地利用蜘蛛爬行。事实上,机器人不仅告诉搜索引擎什么不能被抓取,也是网站优化的重要工具之一。
  robots文件实际上是一个txt文件。其基本写法如下:
  User-agent:*这里*代表所有类型的搜索引擎,*是通配符
  Disallow: /admin/ 这里的定义是禁止爬取admin目录下的目录
  Disallow: /require/ 这个定义是禁止爬取require目录下的目录
  Disallow: /ABC/ 这里的定义是禁止爬取ABC目录下的目录
  禁止:/cgi-bin/*.htm 禁止访问/cgi-bin/ 目录中所有以“.htm”为后缀的URL(包括子目录)。
  Disallow: /*?* 禁止访问 网站 中的所有动态页面
  Disallow: /.jpg$ 禁止抓取来自网络的所有 .jpg 图像
  Disallow:/ab/adc.html 禁止爬取ab文件夹下的adc.html文件。
  allow: /cgi-bin/这个定义是允许cgi-bin目录下的目录被爬取
  allow: /tmp 这里的定义是允许爬取tmp的整个目录
  允许:.htm$ 只允许访问以“.htm”为后缀的 URL。
  允许:.gif$ 允许抓取网页和 gif 格式的图片
  在网站优化方面,robots文件用于告诉搜索引擎哪些内容是重要的,建议robots文件禁止抓取不重要的内容。不重要内容的典型特征:网站 的搜索结果页面。
  对于静态 网站,我们可以使用 Disallow: /*?* 来禁用动态页面爬取。但是对于动态的网站,就不能这么简单了。不过对于动态网站站长来说,不用太担心,搜索引擎现在可以正常抓取动态页面了。那么在写的时候一定要注意,可以具体写搜索文件的名字。例如,你的网站是一个长长的列表,在 search.asp? 之后,那么你可以这样写:
  禁止:/search.asp?*
  这样就可以屏蔽搜索结果页面。写完可以去百度站长平台查看机器人,看看有没有错误!您可以输入 URL 以检查它是否正常工作。
  这里建议动态网站的站长一定要用robots文件来屏蔽不重要内容的动态链接,提高蜘蛛的抓取效率! 查看全部

  动态网页抓取(一下如何利用robots文件来提高蜘蛛对动态网站的抓取频率)
  很多为网站做seo的站长都会遇到这样的问题,就是动态的网站好像不太受搜索引擎蜘蛛的欢迎,所以很多站长会选择做静态生成的网站@网站。但是静态生成的网站在日常维护和更新中总是有些不便。那么,有什么办法可以提高搜索引擎蜘蛛对动态网站的抓取频率呢?答案是肯定的,那就是好好利用robots文件!今天就和大家一起阅读下面的文章,学习如何使用robots文件来增加蜘蛛对动态网站的抓取频率!相信看完之后,你会忍不住马上开始工作!
  
  动态网站不用担心,搜索引擎可以正常抓取动态链接,但是使用robots文件可以轻松提升动态网站的抓取效率。我们都知道robots协议(也称为爬虫协议、机器人协议等)的全称是“Robots Exclusion Protocol”。网站 告诉搜索引擎哪些页面可以爬取,哪些页面不能爬取。Robots协议的本质是网站与搜索引擎爬虫之间的通信方式,用于引导搜索引擎更好地抓取网站内容。
  百度官方建议所有网站都使用robots文件,以更好地利用蜘蛛爬行。事实上,机器人不仅告诉搜索引擎什么不能被抓取,也是网站优化的重要工具之一。
  robots文件实际上是一个txt文件。其基本写法如下:
  User-agent:*这里*代表所有类型的搜索引擎,*是通配符
  Disallow: /admin/ 这里的定义是禁止爬取admin目录下的目录
  Disallow: /require/ 这个定义是禁止爬取require目录下的目录
  Disallow: /ABC/ 这里的定义是禁止爬取ABC目录下的目录
  禁止:/cgi-bin/*.htm 禁止访问/cgi-bin/ 目录中所有以“.htm”为后缀的URL(包括子目录)。
  Disallow: /*?* 禁止访问 网站 中的所有动态页面
  Disallow: /.jpg$ 禁止抓取来自网络的所有 .jpg 图像
  Disallow:/ab/adc.html 禁止爬取ab文件夹下的adc.html文件。
  allow: /cgi-bin/这个定义是允许cgi-bin目录下的目录被爬取
  allow: /tmp 这里的定义是允许爬取tmp的整个目录
  允许:.htm$ 只允许访问以“.htm”为后缀的 URL。
  允许:.gif$ 允许抓取网页和 gif 格式的图片
  在网站优化方面,robots文件用于告诉搜索引擎哪些内容是重要的,建议robots文件禁止抓取不重要的内容。不重要内容的典型特征:网站 的搜索结果页面。
  对于静态 网站,我们可以使用 Disallow: /*?* 来禁用动态页面爬取。但是对于动态的网站,就不能这么简单了。不过对于动态网站站长来说,不用太担心,搜索引擎现在可以正常抓取动态页面了。那么在写的时候一定要注意,可以具体写搜索文件的名字。例如,你的网站是一个长长的列表,在 search.asp? 之后,那么你可以这样写:
  禁止:/search.asp?*
  这样就可以屏蔽搜索结果页面。写完可以去百度站长平台查看机器人,看看有没有错误!您可以输入 URL 以检查它是否正常工作。
  这里建议动态网站的站长一定要用robots文件来屏蔽不重要内容的动态链接,提高蜘蛛的抓取效率!

动态网页抓取([问题讨论]分析:您可以使用Chrome的开发者模式)

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

  动态网页抓取([问题讨论]分析:您可以使用Chrome的开发者模式)
  [答案1]:
  您可以使用 ghost.py 直接与页面上的 JavaScript 交互,而不是尝试对其进行逆向工程。
  如果您在 Chrome 控制台中运行以下查询,您会看到它返回了您想要的所有内容。
  document.getElementsByClassName('inline-text-org');
  退货
  [​University of Manchester​,
​University of California ...​​
etc...
  您可以使用 ghost.py 在现实生活中的 DOM 中从 python 运行 JavaScript。
  这真的很酷:
  from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://academic.research.microsoft.com/Search?query=lander')
result, resources = ghost.evaluate(
"document.getElementsByClassName('inline-text-org');")
  【问题讨论】:
  [答案2]:
  之前有人问过一个非常相似的问题。参考的是 selenium,它最初是一个 web-apps 的测试环境。
  我通常使用 Chrome 的开发者模式,恕我直言,它已经提供了比 Firefox 更详细的信息。
  【问题讨论】:
  【答案3】:
  要爬取动态内容,你需要的不是一个简单的爬虫,而是一个成熟的无头浏览器。
  dhamaniasad/HeadlessBrowsers:(几乎)所有存在的无头网络浏览器的列表是我见过的最完整的列表;它列出了每种语言的绑定语言。
  (请注意,列出的物品中有不少被遗弃了!)
  【问题讨论】: 查看全部

  动态网页抓取([问题讨论]分析:您可以使用Chrome的开发者模式)
  [答案1]:
  您可以使用 ghost.py 直接与页面上的 JavaScript 交互,而不是尝试对其进行逆向工程。
  如果您在 Chrome 控制台中运行以下查询,您会看到它返回了您想要的所有内容。
  document.getElementsByClassName('inline-text-org');
  退货
  [​University of Manchester​,
​University of California ...​​
etc...
  您可以使用 ghost.py 在现实生活中的 DOM 中从 python 运行 JavaScript。
  这真的很酷:
  from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://academic.research.microsoft.com/Search?query=lander')
result, resources = ghost.evaluate(
"document.getElementsByClassName('inline-text-org');")
  【问题讨论】:
  [答案2]:
  之前有人问过一个非常相似的问题。参考的是 selenium,它最初是一个 web-apps 的测试环境。
  我通常使用 Chrome 的开发者模式,恕我直言,它已经提供了比 Firefox 更详细的信息。
  【问题讨论】:
  【答案3】:
  要爬取动态内容,你需要的不是一个简单的爬虫,而是一个成熟的无头浏览器。
  dhamaniasad/HeadlessBrowsers:(几乎)所有存在的无头网络浏览器的列表是我见过的最完整的列表;它列出了每种语言的绑定语言。
  (请注意,列出的物品中有不少被遗弃了!)
  【问题讨论】:

动态网页抓取(AngularJS-pageapplication框架如何判断前端渲染判断页面多)

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

  动态网页抓取(AngularJS-pageapplication框架如何判断前端渲染判断页面多)
  抓取前端渲染的页面
  随着AJAX技术的不断普及和AngularJS等单页应用框架的出现,越来越多的页面使用js渲染。对于爬虫来说,这种页面比较烦人:只提取 HTML 内容,往往无法获取有效信息。那么如何处理这种页面呢?一般有两种方法:
  爬取阶段,爬虫内置浏览器内核,爬取前执行js渲染页面。这方面的相应工具是 Selenium、HtmlUnit 或 PhantomJs。但这些工具都存在一定的效率问题,同时也不是那么稳定。优点是编写规则与静态页面相同。因为js渲染页面的数据也是从后端获取的,而且基本上都是通过AJAX获取的,所以分析AJAX请求,找到数据对应的请求也是可行的。而且相对于页面样式,这个界面是不太可能改变的。缺点是找到这个请求并模拟它是一个比较困难的过程,需要比较大量的分析经验。
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法省时省力。但对于长期、大规模的需求,第二种更为可靠。对于某些网站,甚至还有一些 js 混淆技术。这时候第一种方法基本是万能的,第二种方法会很复杂。
  这里我们以AngularJS中文社区{{global.metatitle}}为例。
  1 如何判断前端渲染
  判断页面是否为js渲染的方式比较简单。可以直接在浏览器中查看源码(Windows下Ctrl+U,Mac下command+alt+u)。如果没有找到有效信息,基本上就是js渲染了。
  本例中在源码中找不到页面中的标题“优符计算机网-前端攻城师”,因此可以断定是js渲染,这个数据是通过AJAX获取的。
  2 分析请求
  现在我们到了最难的部分:找到这个数据请求。这一步帮助我们的工具,主要是浏览器中的开发者工具查看网络请求。
  以Chome为例,我们打开“开发者工具”(Windows下F12,Mac下command+alt+i),然后刷新页面(也可能是一个下拉页面,总之所有的操作你觉得可能会触发新的数据)),那就记得保留场景,一一分析请求!
  这一步需要一点耐心,但不是随机的。首先可以帮助我们的是上面的分类过滤器(All、Document 和其他选项)。如果是普通的 AJAX,会显示在 XHR 标签下,而 JSONP 请求会显示在 Scripts 标签下。这是两种更常见的数据类型。
  然后你可以根据数据的大小来判断。一般来说,较大的结果更有可能是返回数据的接口。其余的基本上都是凭经验。比如这里的“latest?p=1&amp;s=20”,一看就很可疑……
  对于可疑地址,此时可以查看响应正文的内容。在这里的开发者工具中并不清楚。我们把/api/article/latest?p=1&amp;s=20复制到地址栏再请求一次(如果用Chrome推荐安装一个jsonviewer,查看AJAX结果很方便)。查看结果,看起来我们找到了我们想要的东西。
  同样的方法,我们进入帖子详情页面,找到具体内容的请求:/api/article/A0y2。
  以上信息摘自webMagic 查看全部

  动态网页抓取(AngularJS-pageapplication框架如何判断前端渲染判断页面多)
  抓取前端渲染的页面
  随着AJAX技术的不断普及和AngularJS等单页应用框架的出现,越来越多的页面使用js渲染。对于爬虫来说,这种页面比较烦人:只提取 HTML 内容,往往无法获取有效信息。那么如何处理这种页面呢?一般有两种方法:
  爬取阶段,爬虫内置浏览器内核,爬取前执行js渲染页面。这方面的相应工具是 Selenium、HtmlUnit 或 PhantomJs。但这些工具都存在一定的效率问题,同时也不是那么稳定。优点是编写规则与静态页面相同。因为js渲染页面的数据也是从后端获取的,而且基本上都是通过AJAX获取的,所以分析AJAX请求,找到数据对应的请求也是可行的。而且相对于页面样式,这个界面是不太可能改变的。缺点是找到这个请求并模拟它是一个比较困难的过程,需要比较大量的分析经验。
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法省时省力。但对于长期、大规模的需求,第二种更为可靠。对于某些网站,甚至还有一些 js 混淆技术。这时候第一种方法基本是万能的,第二种方法会很复杂。
  这里我们以AngularJS中文社区{{global.metatitle}}为例。
  1 如何判断前端渲染
  判断页面是否为js渲染的方式比较简单。可以直接在浏览器中查看源码(Windows下Ctrl+U,Mac下command+alt+u)。如果没有找到有效信息,基本上就是js渲染了。
  本例中在源码中找不到页面中的标题“优符计算机网-前端攻城师”,因此可以断定是js渲染,这个数据是通过AJAX获取的。
  2 分析请求
  现在我们到了最难的部分:找到这个数据请求。这一步帮助我们的工具,主要是浏览器中的开发者工具查看网络请求。
  以Chome为例,我们打开“开发者工具”(Windows下F12,Mac下command+alt+i),然后刷新页面(也可能是一个下拉页面,总之所有的操作你觉得可能会触发新的数据)),那就记得保留场景,一一分析请求!
  这一步需要一点耐心,但不是随机的。首先可以帮助我们的是上面的分类过滤器(All、Document 和其他选项)。如果是普通的 AJAX,会显示在 XHR 标签下,而 JSONP 请求会显示在 Scripts 标签下。这是两种更常见的数据类型。
  然后你可以根据数据的大小来判断。一般来说,较大的结果更有可能是返回数据的接口。其余的基本上都是凭经验。比如这里的“latest?p=1&amp;s=20”,一看就很可疑……
  对于可疑地址,此时可以查看响应正文的内容。在这里的开发者工具中并不清楚。我们把/api/article/latest?p=1&amp;s=20复制到地址栏再请求一次(如果用Chrome推荐安装一个jsonviewer,查看AJAX结果很方便)。查看结果,看起来我们找到了我们想要的东西。
  同样的方法,我们进入帖子详情页面,找到具体内容的请求:/api/article/A0y2。
  以上信息摘自webMagic

动态网页抓取(抓取街拍图片数据1.抓取抓取抓取)

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

  动态网页抓取(抓取街拍图片数据1.抓取抓取抓取)
  捕捉街道照片数据
  1. 拍摄街拍
  街拍网址
  
  2.解析街拍结构
  
  
  keyword: 街拍
pd: atlas
dvpf: pc
aid: 4916
page_num: 1
search_json: {"from_search_id":"20220104115420010212192151532E8188","origin_keyword":"街拍","image_keyword":"街拍"}
rawJSON: 1
search_id: 202201041159040101501341671A4749C4
  可以找到规则,page_num从1开始累加,其他参数不变
  3.根据不同的功能编写不同的方法组织代码3.1 获取网页json格式数据
  def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
  3.2 从json格式数据中提取街景图片
  def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
  3.3 用 md5 代码命名街道照片并保存图像
  实现方法 save_image() 来保存图像,其中 item 是前面的 get_images() 方法返回的字典。该方法首先根据item的标题创建一个文件夹,然后请求图片链接,获取图片的二进制数据,以二进制形式写入文件。图片名称可以使用其内容的MD5值,可以去除重复。相关代码如下:
  def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
  3.4 main() 调用其他函数
  def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
  4 捕获20page今日头条街拍数据
  这里定义了分页的起始页和结束页,分别是 GROUP_START 和 GROUP_END。也使用了多线程线程池,调用它的map()方法实现多线程下载。
  if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  import requests
from urllib.parse import urlencode
from hashlib import md5
from multiprocessing.pool import Pool
def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  
  参考链接 查看全部

  动态网页抓取(抓取街拍图片数据1.抓取抓取抓取)
  捕捉街道照片数据
  1. 拍摄街拍
  街拍网址
  
  2.解析街拍结构
  
  
  keyword: 街拍
pd: atlas
dvpf: pc
aid: 4916
page_num: 1
search_json: {"from_search_id":"20220104115420010212192151532E8188","origin_keyword":"街拍","image_keyword":"街拍"}
rawJSON: 1
search_id: 202201041159040101501341671A4749C4
  可以找到规则,page_num从1开始累加,其他参数不变
  3.根据不同的功能编写不同的方法组织代码3.1 获取网页json格式数据
  def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
  3.2 从json格式数据中提取街景图片
  def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
  3.3 用 md5 代码命名街道照片并保存图像
  实现方法 save_image() 来保存图像,其中 item 是前面的 get_images() 方法返回的字典。该方法首先根据item的标题创建一个文件夹,然后请求图片链接,获取图片的二进制数据,以二进制形式写入文件。图片名称可以使用其内容的MD5值,可以去除重复。相关代码如下:
  def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
  3.4 main() 调用其他函数
  def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
  4 捕获20page今日头条街拍数据
  这里定义了分页的起始页和结束页,分别是 GROUP_START 和 GROUP_END。也使用了多线程线程池,调用它的map()方法实现多线程下载。
  if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  import requests
from urllib.parse import urlencode
from hashlib import md5
from multiprocessing.pool import Pool
def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  
  参考链接

动态网页抓取(如何构建一个网页数据爬取程序?(二)或开发人员来说)

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

  动态网页抓取(如何构建一个网页数据爬取程序?(二)或开发人员来说)
  网页数据抓取是指从网站中提取特定内容,而不需要请求网站的API接口来获取内容。“网页数据”是 网站 用户体验的一部分,例如网页上的文本、图像、声音、视频和动画。受限,这个时候必须借助IP海代理的帮助,才能最大限度地提高效率和效果。
  
  对于程序员或开发人员来说,拥有编程技能使得构建网络抓取程序变得非常容易和有趣。但是对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页中获取特定的内容。
  1、从动态网页中提取内容
  网页可以是静态的或动态的。通常,您要提取的网页内容会随着您访问 网站 的时间而改变。通常,这个 网站 是一个动态的网站,它使用 AJAX 技术或其他技术来使 Web 内容保持最新。AJAX 是一种延迟加载和异步更新的脚本技术。通过在后台与服务器交换少量数据,可以在不重新加载整个网页的情况下更新网页的某一部分。性能特点是当点击网页中的某个选项时,网站的大部分URL都不会改变;网页没有完全加载,而只是部分加载了数据,这些数据会发生变化。
  2、从网页中抓取隐藏的内容
  你有没有想过从 网站 获取特定的数据,但是当你触发链接或鼠标悬停在某处时,内容就会出现?网站您需要将鼠标移到选择选项上才能显示类别。对于此功能,您可以设置“鼠标悬停在链接上”来抓取网页中的隐藏内容。
  3、从无限滚动的网页中提取内容
  滚动到页面底部后,有些网站只有你要提取的一部分数据。比如今日头条首页,需要不断滚动到页面底部加载更多文章内容,无限滚动网站一般使用AJAX或者JavaScript向网站@请求额外内容&gt; 内容。在这种情况下,您可以设置 AJAX 超时设置并选择滚动方式和滚动时间以从网页中提取内容。
  4、 从网络上抓取所有链接
  一个普通的网站至少会收录一个超链接,如果你想把一个网页的所有链接都提取出来,可以使用IP海代理软件来获取网页上发布的所有超链接。 查看全部

  动态网页抓取(如何构建一个网页数据爬取程序?(二)或开发人员来说)
  网页数据抓取是指从网站中提取特定内容,而不需要请求网站的API接口来获取内容。“网页数据”是 网站 用户体验的一部分,例如网页上的文本、图像、声音、视频和动画。受限,这个时候必须借助IP海代理的帮助,才能最大限度地提高效率和效果。
  
  对于程序员或开发人员来说,拥有编程技能使得构建网络抓取程序变得非常容易和有趣。但是对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页中获取特定的内容。
  1、从动态网页中提取内容
  网页可以是静态的或动态的。通常,您要提取的网页内容会随着您访问 网站 的时间而改变。通常,这个 网站 是一个动态的网站,它使用 AJAX 技术或其他技术来使 Web 内容保持最新。AJAX 是一种延迟加载和异步更新的脚本技术。通过在后台与服务器交换少量数据,可以在不重新加载整个网页的情况下更新网页的某一部分。性能特点是当点击网页中的某个选项时,网站的大部分URL都不会改变;网页没有完全加载,而只是部分加载了数据,这些数据会发生变化。
  2、从网页中抓取隐藏的内容
  你有没有想过从 网站 获取特定的数据,但是当你触发链接或鼠标悬停在某处时,内容就会出现?网站您需要将鼠标移到选择选项上才能显示类别。对于此功能,您可以设置“鼠标悬停在链接上”来抓取网页中的隐藏内容。
  3、从无限滚动的网页中提取内容
  滚动到页面底部后,有些网站只有你要提取的一部分数据。比如今日头条首页,需要不断滚动到页面底部加载更多文章内容,无限滚动网站一般使用AJAX或者JavaScript向网站@请求额外内容&gt; 内容。在这种情况下,您可以设置 AJAX 超时设置并选择滚动方式和滚动时间以从网页中提取内容。
  4、 从网络上抓取所有链接
  一个普通的网站至少会收录一个超链接,如果你想把一个网页的所有链接都提取出来,可以使用IP海代理软件来获取网页上发布的所有超链接。

动态网页抓取(动态网页抓取是什么意思_e操盘培训软件_软件)

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

  动态网页抓取(动态网页抓取是什么意思_e操盘培训软件_软件)
  动态网页抓取,按照主要手段有三种:1.基于页面动态加载实现,通过获取页面的完整js代码,可以实现动态的页面更新,有些页面甚至可以实现持续更新的状态,然后通过缓存数据,实现了定时刷新,这种动态网页抓取一般用于静态的页面,或者简单的页面版面更新,对于使用js页面实现动态网页的网站来说,这是最方便快捷的抓取手段2.基于web框架实现,通过设置一些代理来进行页面抓取,web框架比如jsoup、selenium、urllib等等,这种页面抓取一般会返回html文件,然后在浏览器中进行解析,最终页面显示3.通过静态的页面抓取,通过构造动态的静态页面,然后使用代理和scrapy等进行抓取,这种一般适用于多种静态页面抓取,如各种评论系统,如、新浪新闻等,这种抓取一般有种代理访问内容的策略,一般对应于需要抓取的页面多种数据模型,如表格型数据抓取,查询型数据抓取,分页等,所以有可能抓取很多内容,且抓取后生成动态页面这一点无法控制,就是一旦生成动态页面,除非该动态页面被注册,否则无法控制页面抓取实现的过程。
  总结来说:1.基于jsoup等库抓取。2.构造完整js代码,一般是利用jsoup比如selenium、urllib、jsoup等库实现。3.通过静态页面抓取,采用web框架实现,一般是使用其他库自己封装了一些http请求,一般抓取某些页面会采用动态页面的封装代理或者设置authentication等代理来解析页面,然后在浏览器进行解析。 查看全部

  动态网页抓取(动态网页抓取是什么意思_e操盘培训软件_软件)
  动态网页抓取,按照主要手段有三种:1.基于页面动态加载实现,通过获取页面的完整js代码,可以实现动态的页面更新,有些页面甚至可以实现持续更新的状态,然后通过缓存数据,实现了定时刷新,这种动态网页抓取一般用于静态的页面,或者简单的页面版面更新,对于使用js页面实现动态网页的网站来说,这是最方便快捷的抓取手段2.基于web框架实现,通过设置一些代理来进行页面抓取,web框架比如jsoup、selenium、urllib等等,这种页面抓取一般会返回html文件,然后在浏览器中进行解析,最终页面显示3.通过静态的页面抓取,通过构造动态的静态页面,然后使用代理和scrapy等进行抓取,这种一般适用于多种静态页面抓取,如各种评论系统,如、新浪新闻等,这种抓取一般有种代理访问内容的策略,一般对应于需要抓取的页面多种数据模型,如表格型数据抓取,查询型数据抓取,分页等,所以有可能抓取很多内容,且抓取后生成动态页面这一点无法控制,就是一旦生成动态页面,除非该动态页面被注册,否则无法控制页面抓取实现的过程。
  总结来说:1.基于jsoup等库抓取。2.构造完整js代码,一般是利用jsoup比如selenium、urllib、jsoup等库实现。3.通过静态页面抓取,采用web框架实现,一般是使用其他库自己封装了一些http请求,一般抓取某些页面会采用动态页面的封装代理或者设置authentication等代理来解析页面,然后在浏览器进行解析。

动态网页抓取(国内有可以买的7种网页代理:动态网页抓取)

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

  动态网页抓取(国内有可以买的7种网页代理:动态网页抓取)
  动态网页抓取。用w3c的canvas,两种分辨率对应相应代码,用base64就可以解密。高级的用到ethernet,ethernet_help,ethernet_meta。
  国内有可以买的7种网页代理:
  比如我们在用beamer
  meteor
  lockin-httpbaseddatastructuredetectionortraceanalysis
  也许可以考虑用知乎自己的服务器api?
  开发一个,分享出来。
  抓包处理,app抓包,网页抓包都可以。
  比如直接用requests
  可以找找panda的cookies,然后就可以用panda的api自动抓取,
  现在有可以自动http抓包的小工具fishme
  方法很多。1.使用工具抓包,非常便捷的解决方案2.请求get和post,使用json,处理很简单。非常常见的问题是有时候网站会返回错误数据或其他奇怪的东西3.用一些开源库,可以看到网站返回的内容,抓包也很方便,
  官方有methodindex可以在国内使用googleapi,做大的博客也能做官方开发工具,
  可以给项目使用beamer,推荐
  webflowes
  很好奇如果已经配置好了对redis服务器进行数据抓取,然后还想抓取微博,最近本地又有一个前端分发任务的需求,微博请求全靠openid,然后又想抓取微博内容, 查看全部

  动态网页抓取(国内有可以买的7种网页代理:动态网页抓取)
  动态网页抓取。用w3c的canvas,两种分辨率对应相应代码,用base64就可以解密。高级的用到ethernet,ethernet_help,ethernet_meta。
  国内有可以买的7种网页代理:
  比如我们在用beamer
  meteor
  lockin-httpbaseddatastructuredetectionortraceanalysis
  也许可以考虑用知乎自己的服务器api?
  开发一个,分享出来。
  抓包处理,app抓包,网页抓包都可以。
  比如直接用requests
  可以找找panda的cookies,然后就可以用panda的api自动抓取,
  现在有可以自动http抓包的小工具fishme
  方法很多。1.使用工具抓包,非常便捷的解决方案2.请求get和post,使用json,处理很简单。非常常见的问题是有时候网站会返回错误数据或其他奇怪的东西3.用一些开源库,可以看到网站返回的内容,抓包也很方便,
  官方有methodindex可以在国内使用googleapi,做大的博客也能做官方开发工具,
  可以给项目使用beamer,推荐
  webflowes
  很好奇如果已经配置好了对redis服务器进行数据抓取,然后还想抓取微博,最近本地又有一个前端分发任务的需求,微博请求全靠openid,然后又想抓取微博内容,

动态网页抓取(网页没有标题中没有包含有效的关键词,大量动态网页影响搜索引擎)

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

  动态网页抓取(网页没有标题中没有包含有效的关键词,大量动态网页影响搜索引擎)
  网页没有标题,或者标题不收录有效的关键词,网页正文中有效的关键词比较少,网站导航系统进行搜索引擎“看不懂”,大量动态网页影响搜索引擎检索
  
  图 25815-1:
  SEO优化是英文搜索引擎优化的缩写,中文翻译是“搜索引擎优化”!SEO优化是指网站(网站网站结构调整、网站内容构建、网站代码优化和编码等)的现场优化和修复和非网站优化,从而提高网站的网站关键词的排名和公司产品的曝光度。通过搜索引擎搜索信息是网民查找网上信息和资源的主要方式。搜索引擎营销已经成为网络营销中最重要的部分。
  seo全称:搜索引擎优化,即搜索引擎优化。为了说明什么是网站针对搜索引擎优化,未针对搜索引擎优化网站的站长分为以下几个特点:
  1、网页中大量使用图片或flash等富媒体,没有可检索的文字信息,最基础的SEO优化是文章SEO和图片SEO;
  2、页面没有标题,或者标题不收录有效的关键词;
  3、网页正文中有效的关键词比较少(最好是自然集中分布,没有特殊堆叠关键词);
  4、网站导航系统让搜索引擎“看不懂”;
  5、大量动态网页影响搜索引擎检索;
  6、收录 的搜索引擎中的网站 没有提供其他链接;
  7、网站充斥着大量欺骗搜索引擎的垃圾信息,如“桥页(也称门页、过渡页)”和与背景色同色的文字;
  8、网站中缺少原创的内容,完全抄袭别人的内容等。 查看全部

  动态网页抓取(网页没有标题中没有包含有效的关键词,大量动态网页影响搜索引擎)
  网页没有标题,或者标题不收录有效的关键词,网页正文中有效的关键词比较少,网站导航系统进行搜索引擎“看不懂”,大量动态网页影响搜索引擎检索
  
  图 25815-1:
  SEO优化是英文搜索引擎优化的缩写,中文翻译是“搜索引擎优化”!SEO优化是指网站(网站网站结构调整、网站内容构建、网站代码优化和编码等)的现场优化和修复和非网站优化,从而提高网站的网站关键词的排名和公司产品的曝光度。通过搜索引擎搜索信息是网民查找网上信息和资源的主要方式。搜索引擎营销已经成为网络营销中最重要的部分。
  seo全称:搜索引擎优化,即搜索引擎优化。为了说明什么是网站针对搜索引擎优化,未针对搜索引擎优化网站的站长分为以下几个特点:
  1、网页中大量使用图片或flash等富媒体,没有可检索的文字信息,最基础的SEO优化是文章SEO和图片SEO;
  2、页面没有标题,或者标题不收录有效的关键词;
  3、网页正文中有效的关键词比较少(最好是自然集中分布,没有特殊堆叠关键词);
  4、网站导航系统让搜索引擎“看不懂”;
  5、大量动态网页影响搜索引擎检索;
  6、收录 的搜索引擎中的网站 没有提供其他链接;
  7、网站充斥着大量欺骗搜索引擎的垃圾信息,如“桥页(也称门页、过渡页)”和与背景色同色的文字;
  8、网站中缺少原创的内容,完全抄袭别人的内容等。

动态网页抓取(网站如何设置反爬虫,爬虫又该如何应对?(图))

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

  动态网页抓取(网站如何设置反爬虫,爬虫又该如何应对?(图))
  有爬虫,自然就有反爬虫。网站越成熟,它的反爬机制就越完善。初始IP限制、验证码限制等限制,今天就来了解一下网站 反爬虫如何设置,爬虫应该如何应对。
  
  网站的反爬虫策略有哪些以及如何应对
  1、用户行为反爬虫
  网站的一部分是通过检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。
  大多数网站都是前一种情况,使用IP代理就可以了。检测后我们可以将代理IP保存在文件中,但是这种方法不可取,代理IP失败的可能性非常高,所以从真实的专用代理IP网站中抓取是个不错的选择时间。
  对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。
  还有就是对于cookies,通过检查cookies来判断用户是否是合法用户,网站需要登录的人经常会用到这个技术。更深入地讲,一些 网站 登录会动态更新身份验证。登录时会随机分配用于登录认证的authentication_token,并将authentication_token连同用户提交的登录名和密码一起发送回服务器。
  
  网站的反爬虫策略有哪些以及如何应对
  2、通过Headers反爬虫
  反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。
  如果遇到这样的反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
  3、限制对某些 IP 的访问
  免费代理 IP 可以从许多 网站 处获得。由于爬虫可以使用这些代理 IP 进行 网站 的爬取,所以 网站 也可以使用这些代理 IP 进行反向限制。IP 保留在服务器上,以限制使用代理 IP 进行爬取的爬虫。
  
  网站的反爬虫策略有哪些以及如何应对
  4、动态页面的反爬虫
  有时候抓取目标页面,发现关键信息内容是空白的,只有frame code,这是因为网站的信息通过用户Post的XHR动态返回内容信息,解决这个问题的方法是通过开发者工具(FireBug等)分析网站流,找到单独的内容信息请求(如Json),爬取内容信息,获取需要的内容。
  稍微复杂一点的是动态请求是加密的,无法解析参数,所以无法爬取。在这种情况下,可以使用 Mechanize 和 selenium RC 调用浏览器内核,就像使用浏览器上网一样,可以最大限度地捕获成功,但效率会降低。 查看全部

  动态网页抓取(网站如何设置反爬虫,爬虫又该如何应对?(图))
  有爬虫,自然就有反爬虫。网站越成熟,它的反爬机制就越完善。初始IP限制、验证码限制等限制,今天就来了解一下网站 反爬虫如何设置,爬虫应该如何应对。
  
  网站的反爬虫策略有哪些以及如何应对
  1、用户行为反爬虫
  网站的一部分是通过检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。
  大多数网站都是前一种情况,使用IP代理就可以了。检测后我们可以将代理IP保存在文件中,但是这种方法不可取,代理IP失败的可能性非常高,所以从真实的专用代理IP网站中抓取是个不错的选择时间。
  对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。
  还有就是对于cookies,通过检查cookies来判断用户是否是合法用户,网站需要登录的人经常会用到这个技术。更深入地讲,一些 网站 登录会动态更新身份验证。登录时会随机分配用于登录认证的authentication_token,并将authentication_token连同用户提交的登录名和密码一起发送回服务器。
  
  网站的反爬虫策略有哪些以及如何应对
  2、通过Headers反爬虫
  反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。
  如果遇到这样的反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
  3、限制对某些 IP 的访问
  免费代理 IP 可以从许多 网站 处获得。由于爬虫可以使用这些代理 IP 进行 网站 的爬取,所以 网站 也可以使用这些代理 IP 进行反向限制。IP 保留在服务器上,以限制使用代理 IP 进行爬取的爬虫。
  
  网站的反爬虫策略有哪些以及如何应对
  4、动态页面的反爬虫
  有时候抓取目标页面,发现关键信息内容是空白的,只有frame code,这是因为网站的信息通过用户Post的XHR动态返回内容信息,解决这个问题的方法是通过开发者工具(FireBug等)分析网站流,找到单独的内容信息请求(如Json),爬取内容信息,获取需要的内容。
  稍微复杂一点的是动态请求是加密的,无法解析参数,所以无法爬取。在这种情况下,可以使用 Mechanize 和 selenium RC 调用浏览器内核,就像使用浏览器上网一样,可以最大限度地捕获成功,但效率会降低。

动态网页抓取(如何用Java获取Javascript动态生成的html内容?(图))

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

  动态网页抓取(如何用Java获取Javascript动态生成的html内容?(图))
  首先明确我所说的动态数据是什么意思。
  术语定义:这里的动态数据是指网页中通过Javascript动态生成的页面内容,即不在网页的源文件中,而是在页面加载到浏览器后动态生成的。
  输入下面的主题。
  抓取一个静态页面非常简单,通过Java获取html源代码,然后分析源代码得到想要的信息。比如要在中国天气网获取杭州的天气,只需要找到对应的html页面()即可。
  假设我需要输入城市名称来获取变更后城市的天气,而数据源仍然来自中国天气网。首先要做的是根据城市找到对应的页面。通过简单分析,发现城市对应页面的URL,比如杭州对应101210101,所以程序的关键是找到城市和页面的对应关系。
  发现网站的搜索框有国内大部分城市的链接,可以得到city和_id的对应关系。找到突破口并开始采取行动。进入首页,查看其源码,找到搜索框的位置。
  (图1捕获_1.JPG)
  原来数据是通过Javascript动态添加的,通过Chrome的inspect元素可以看到如下内容。
  (图2捕获_2.JPG)
  现在可以做的就是用Chrome将html复制到一个文件中,然后解析该文件得到城市和URL的关系。问题是如果城市和网站的URL的对应关系发生变化,很被动,需要改程序。
  现在的问题是如何获取Java中Javascript动态生成的html内容。 查看全部

  动态网页抓取(如何用Java获取Javascript动态生成的html内容?(图))
  首先明确我所说的动态数据是什么意思。
  术语定义:这里的动态数据是指网页中通过Javascript动态生成的页面内容,即不在网页的源文件中,而是在页面加载到浏览器后动态生成的。
  输入下面的主题。
  抓取一个静态页面非常简单,通过Java获取html源代码,然后分析源代码得到想要的信息。比如要在中国天气网获取杭州的天气,只需要找到对应的html页面()即可。
  假设我需要输入城市名称来获取变更后城市的天气,而数据源仍然来自中国天气网。首先要做的是根据城市找到对应的页面。通过简单分析,发现城市对应页面的URL,比如杭州对应101210101,所以程序的关键是找到城市和页面的对应关系。
  发现网站的搜索框有国内大部分城市的链接,可以得到city和_id的对应关系。找到突破口并开始采取行动。进入首页,查看其源码,找到搜索框的位置。
  (图1捕获_1.JPG)
  原来数据是通过Javascript动态添加的,通过Chrome的inspect元素可以看到如下内容。
  (图2捕获_2.JPG)
  现在可以做的就是用Chrome将html复制到一个文件中,然后解析该文件得到城市和URL的关系。问题是如果城市和网站的URL的对应关系发生变化,很被动,需要改程序。
  现在的问题是如何获取Java中Javascript动态生成的html内容。

动态网页抓取(动态网页抓取的可访问性和静态页面介绍(图))

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

  动态网页抓取(动态网页抓取的可访问性和静态页面介绍(图))
  动态网页抓取就是指利用http或ftp等ssl传输协议抓取的网页。网页分为静态页和动态页。网页如果要实现抓取,首先要根据查询的关键词进行分类,然后抓取,这个过程是一个链式路由过程。用户可以通过搜索引擎进行搜索。网页抓取为热门网站,像豆瓣,知乎,新浪微博等。接下来,在网页页面上抓取主要通过上下文渲染,然后获取页面各个元素。
  随着html5出现后,大量的浏览器加入到新标准,解决这一问题。在对html5标准进行学习浏览器的交互爬取、静态页抓取、google爬虫,这几个方面需要更多对javascript、html、http协议、互联网标准、搜索引擎等技术的理解。
  01.静态页提高网站的可访问性和可读性1.1静态页面1.1.1静态页面介绍1.1.2响应式浏览器1.1.3手机站,微信站,内容就在身边1.1.4实现抓取需要针对某个站点抓取静态页1.2响应式页面1.2.1页面的上下文1.2.2查看页面内容1.2.3抓取方式1.2.4如何实现1.3要取代静态页面,需要的功能点1.4抓取页面,进行数据的分析1.5服务器端如何实现1.6实现代码注释,文档结构化,网站路由等能力1.7抓取不同内容的技术1.8baidu快照,自动发布,制作抓取地址。 查看全部

  动态网页抓取(动态网页抓取的可访问性和静态页面介绍(图))
  动态网页抓取就是指利用http或ftp等ssl传输协议抓取的网页。网页分为静态页和动态页。网页如果要实现抓取,首先要根据查询的关键词进行分类,然后抓取,这个过程是一个链式路由过程。用户可以通过搜索引擎进行搜索。网页抓取为热门网站,像豆瓣,知乎,新浪微博等。接下来,在网页页面上抓取主要通过上下文渲染,然后获取页面各个元素。
  随着html5出现后,大量的浏览器加入到新标准,解决这一问题。在对html5标准进行学习浏览器的交互爬取、静态页抓取、google爬虫,这几个方面需要更多对javascript、html、http协议、互联网标准、搜索引擎等技术的理解。
  01.静态页提高网站的可访问性和可读性1.1静态页面1.1.1静态页面介绍1.1.2响应式浏览器1.1.3手机站,微信站,内容就在身边1.1.4实现抓取需要针对某个站点抓取静态页1.2响应式页面1.2.1页面的上下文1.2.2查看页面内容1.2.3抓取方式1.2.4如何实现1.3要取代静态页面,需要的功能点1.4抓取页面,进行数据的分析1.5服务器端如何实现1.6实现代码注释,文档结构化,网站路由等能力1.7抓取不同内容的技术1.8baidu快照,自动发布,制作抓取地址。

动态网页抓取(交互selenium模拟执行方法总结(一):浏览器模拟用法)

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

  动态网页抓取(交互selenium模拟执行方法总结(一):浏览器模拟用法)
  内容
  这里解释了用法,安装和配置就不详细解释了。我最喜欢的浏览器驱动程序是 ChromeDriver 和无界面的 PhantomJS。
  1:浏览器信息测试1.初始化浏览器
  使用以下代码初始化浏览器
  from selenium import webdriver
# 把浏览器对象赋值为browser对象,然后就可以进行模拟浏览器操作
browser = webdriver.Chrome()
  2.访问网页
  browser.get('url地址')
# 这个是打印网页源代码
print(browser.page_source)
browser.close() # 处理完后要关闭这个对象
  二:找到节点
  如果我们要执行一个操作,比如填写表单、模拟点击等,或者在输入框中输入文本,首先要知道位置,selenium提供了一系列查找节点的方法,如下。
  1.单节点
  如何找到 | 指示
  -|-|-
  find_element_by_id | 按 id 查找标签
  find_element_by_name | 按名称属性查找标签
  find_element_by_xpath | 通过 xpath 查找标签
  find_element_by_link_text | 通过链接文本查找标签
  find_element_by_partial_link_text | 通过链接的关键字查找标签
  find_element_by_tag_name | 按标签名称查找标签
  find_element_by_class_name | 按类属性查找标签
  find_element_by_css_selector | 通过 css 选择器查找标签
  另一种通用的方法是给find_element()传递两个参数,一个是By。search方法,另一个是value。例如 find_element(By.ID, id) 和 find_element_by_id 的结果是一样的。
  2.多个节点
  查找多个节点时,在查找单个节点的方法中直接加s,如find_elements_by_name或find_elements(By.NAME,name),列表中的每个节点都是WebElement类型。
  三:测试动作1.简单交互
  Selenium 可以驱动浏览器执行一些操作,也就是让浏览器模拟一些动作。下面是一些常用方法的总结。
  方法 | 描述
  -|-|-
  发送键 | 输入文字
  明确 | 明文
  点击 | 点击按钮
  2.特殊互动
  有些交互操作没有具体的执行对象,比如鼠标拖拽、键盘按键等,这些比较复杂的动作是在一个动作链中执行的。此处暂时不用,暂且略过。
  3. 模拟运行 JavaScript
  execute_script() 方法可以模拟运行JavaScript,基本上所有复杂的动作都可以通过执行JavaScript来实现。
  四:获取节点信息
  使用 get_attribute() 方法获取节点的属性。
  使用 text 属性获取节点的文本值。
  使用 id 属性获取节点 id。
  使用 location 属性获取节点在页面上的相对位置。
  使用 tag_name 属性获取标签名称。
  使用 size 属性获取节点的大小。
  五:切换子页面Frame
  一个网页的节点之一是iframe,它是一个子框架,相当于页面的一个子页面。网页打开时,默认是在父Frame中操作。要获取子Frame的节点,需要使用switch_to.frame()方法进行切换。
  使用 switch_to.parent_frame() 获取父页面的内容。
  六、延迟请求
  在 selenium 中,get() 方法会在网页框架加载完成后结束执行。此时如果获取到网页源代码,则可能不是浏览器完全加载的页面。如果有额外的ajax请求,网页源代码可能不会成功。要获取,需要延迟并等待一定的时间,以确保动态网页的所有源代码都加载完毕。
  等待有两种方式,一种是隐式等待,另一种是显式等待。
  1.隐式等待
  隐式等待是一般等待。执行测试时,等待下一步后,使用implicitly_wait(),参数为时间。
  2.显式等待
  隐式等待不是那么好,它们只是指定一个固定的时间,网页的加载时间会受到网络条件的影响。
  这里有一个显式的等待方法,就是指定要搜索的节点,然后指定一个最大等待时间。如果在指定时间内加载,它将返回。如果无法加载,则会抛出异常。
  一个例子如下:
  from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('url地址')
# 先指定最长等待时间为20s
wait = WebDriverWait(browser,20)
# 传入等待条件expected_conditions,这里的presence_of_element_located代表节点出现的意思
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# 按钮等待条件,这里的element_to_be_clickable表示可点击的,10秒内能点击,就成功
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)
  以下是所有等待条件:
  等待条件 | 描述
  -|-|-
  标题是 | 标题是东西
  标题_收录 | 标题收录一些东西
  Presence_of_all_elements_located | 节点是否加载
  visibility_of_element_located | 节点是否可见
  可见性_of | 节点是否可见,传入节点对象
  Presence_of_all_elements_located | 加载所有节点
  text_to_be_present_in_element | 节点文本收录文本
  text_to_be_present_in_element_value | 节点值收录文本
  frame_to_be_available_and_switch_to_it | 负载和开关
  invisibility_of_element_located | 节点不可见
  element_to_be_clickable | 节点可点击
  staleness_of | 判断DOM中是否存在节点,可以判断页面是否刷新过
  element_to_be_selected | 可以选择节点,传入节点对象
  element_located_to_be_selected | 可以选择节点,传入一个定位元组
  element_selection_state_to_be | 传入节点对象和状态,相等返回True,否则返回False
  element_located_selection_state_to_be | 传入定位元组和状态,相等返回True,否则返回False
  alert_is_present | 是否存在警报
  七:前进后退
  Selenium 测试使用 back() 方法返回,并使用 forward() 方法进行。
  八:饼干
  使用 selenium 可以轻松操作 Cookie。
  使用 get_cookies() 方法获取所有 cookie。
  使用 add_cookies() 方法添加 Cookie。
  使用 delete_all_cookies() 和 delete_cookies() 方法删除 Cookie。
  八:标签处理
  访问网页时,标签页是一个一个打开的,标签页也可以在 selenium 中进行操作。
  browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])
  使用 execute_script 方法执行 JavaScript 语句,其中 window_handles 获取所有当前打开的选项卡并返回选项卡的代码名称列表。使用 browser.window_handles[index] 跳转到索引索引对应的选项卡。
  九:捕捉异常
  捕获异常是一种常用的方法。该语句是 try-except-finally。它对于不同的错误非常有用,无论是网络连接、代码运行时超时还是找不到数据。 查看全部

  动态网页抓取(交互selenium模拟执行方法总结(一):浏览器模拟用法)
  内容
  这里解释了用法,安装和配置就不详细解释了。我最喜欢的浏览器驱动程序是 ChromeDriver 和无界面的 PhantomJS。
  1:浏览器信息测试1.初始化浏览器
  使用以下代码初始化浏览器
  from selenium import webdriver
# 把浏览器对象赋值为browser对象,然后就可以进行模拟浏览器操作
browser = webdriver.Chrome()
  2.访问网页
  browser.get('url地址')
# 这个是打印网页源代码
print(browser.page_source)
browser.close() # 处理完后要关闭这个对象
  二:找到节点
  如果我们要执行一个操作,比如填写表单、模拟点击等,或者在输入框中输入文本,首先要知道位置,selenium提供了一系列查找节点的方法,如下。
  1.单节点
  如何找到 | 指示
  -|-|-
  find_element_by_id | 按 id 查找标签
  find_element_by_name | 按名称属性查找标签
  find_element_by_xpath | 通过 xpath 查找标签
  find_element_by_link_text | 通过链接文本查找标签
  find_element_by_partial_link_text | 通过链接的关键字查找标签
  find_element_by_tag_name | 按标签名称查找标签
  find_element_by_class_name | 按类属性查找标签
  find_element_by_css_selector | 通过 css 选择器查找标签
  另一种通用的方法是给find_element()传递两个参数,一个是By。search方法,另一个是value。例如 find_element(By.ID, id) 和 find_element_by_id 的结果是一样的。
  2.多个节点
  查找多个节点时,在查找单个节点的方法中直接加s,如find_elements_by_name或find_elements(By.NAME,name),列表中的每个节点都是WebElement类型。
  三:测试动作1.简单交互
  Selenium 可以驱动浏览器执行一些操作,也就是让浏览器模拟一些动作。下面是一些常用方法的总结。
  方法 | 描述
  -|-|-
  发送键 | 输入文字
  明确 | 明文
  点击 | 点击按钮
  2.特殊互动
  有些交互操作没有具体的执行对象,比如鼠标拖拽、键盘按键等,这些比较复杂的动作是在一个动作链中执行的。此处暂时不用,暂且略过。
  3. 模拟运行 JavaScript
  execute_script() 方法可以模拟运行JavaScript,基本上所有复杂的动作都可以通过执行JavaScript来实现。
  四:获取节点信息
  使用 get_attribute() 方法获取节点的属性。
  使用 text 属性获取节点的文本值。
  使用 id 属性获取节点 id。
  使用 location 属性获取节点在页面上的相对位置。
  使用 tag_name 属性获取标签名称。
  使用 size 属性获取节点的大小。
  五:切换子页面Frame
  一个网页的节点之一是iframe,它是一个子框架,相当于页面的一个子页面。网页打开时,默认是在父Frame中操作。要获取子Frame的节点,需要使用switch_to.frame()方法进行切换。
  使用 switch_to.parent_frame() 获取父页面的内容。
  六、延迟请求
  在 selenium 中,get() 方法会在网页框架加载完成后结束执行。此时如果获取到网页源代码,则可能不是浏览器完全加载的页面。如果有额外的ajax请求,网页源代码可能不会成功。要获取,需要延迟并等待一定的时间,以确保动态网页的所有源代码都加载完毕。
  等待有两种方式,一种是隐式等待,另一种是显式等待。
  1.隐式等待
  隐式等待是一般等待。执行测试时,等待下一步后,使用implicitly_wait(),参数为时间。
  2.显式等待
  隐式等待不是那么好,它们只是指定一个固定的时间,网页的加载时间会受到网络条件的影响。
  这里有一个显式的等待方法,就是指定要搜索的节点,然后指定一个最大等待时间。如果在指定时间内加载,它将返回。如果无法加载,则会抛出异常。
  一个例子如下:
  from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('url地址')
# 先指定最长等待时间为20s
wait = WebDriverWait(browser,20)
# 传入等待条件expected_conditions,这里的presence_of_element_located代表节点出现的意思
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# 按钮等待条件,这里的element_to_be_clickable表示可点击的,10秒内能点击,就成功
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)
  以下是所有等待条件:
  等待条件 | 描述
  -|-|-
  标题是 | 标题是东西
  标题_收录 | 标题收录一些东西
  Presence_of_all_elements_located | 节点是否加载
  visibility_of_element_located | 节点是否可见
  可见性_of | 节点是否可见,传入节点对象
  Presence_of_all_elements_located | 加载所有节点
  text_to_be_present_in_element | 节点文本收录文本
  text_to_be_present_in_element_value | 节点值收录文本
  frame_to_be_available_and_switch_to_it | 负载和开关
  invisibility_of_element_located | 节点不可见
  element_to_be_clickable | 节点可点击
  staleness_of | 判断DOM中是否存在节点,可以判断页面是否刷新过
  element_to_be_selected | 可以选择节点,传入节点对象
  element_located_to_be_selected | 可以选择节点,传入一个定位元组
  element_selection_state_to_be | 传入节点对象和状态,相等返回True,否则返回False
  element_located_selection_state_to_be | 传入定位元组和状态,相等返回True,否则返回False
  alert_is_present | 是否存在警报
  七:前进后退
  Selenium 测试使用 back() 方法返回,并使用 forward() 方法进行。
  八:饼干
  使用 selenium 可以轻松操作 Cookie。
  使用 get_cookies() 方法获取所有 cookie。
  使用 add_cookies() 方法添加 Cookie。
  使用 delete_all_cookies() 和 delete_cookies() 方法删除 Cookie。
  八:标签处理
  访问网页时,标签页是一个一个打开的,标签页也可以在 selenium 中进行操作。
  browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])
  使用 execute_script 方法执行 JavaScript 语句,其中 window_handles 获取所有当前打开的选项卡并返回选项卡的代码名称列表。使用 browser.window_handles[index] 跳转到索引索引对应的选项卡。
  九:捕捉异常
  捕获异常是一种常用的方法。该语句是 try-except-finally。它对于不同的错误非常有用,无论是网络连接、代码运行时超时还是找不到数据。

动态网页抓取(网站建设的基础静态网页的网址形式和优点介绍)

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

  动态网页抓取(网站建设的基础静态网页的网址形式和优点介绍)
  网站构建的基础是静态网页,静态网页和动态网页并非互不兼容。静态网页的URL形式通常为:,即后缀为.htm、.html等,而后缀为.aspx.asp、.jsp、.php、.perl、.cgi等等等,还有一个标志性的符号——“?” 在动态网页 URL 中。
  
  静态网页的优点
  1)静态网页内容比较稳定,容易被搜索引擎检索;
  2)静态页面加载速度快,加载静态页面时无需搜索数据库;
  静态网页的缺点
  1)静态网页不支持数据库,不收录程序和非交互式网页。网站制作和维护的工作量比较大,在网站信息量很大的情况下很难完全依赖静态网页制作;
  2)静态网页的交互跨界在功能方面有较大的限制。
  动态网页的优点
  1)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  2)使用动态网页技术网站可以实现更多功能,如用户注册、用户登录、在线调查、用户管理、订单管理等;
  动态网页的缺点
  1)“?” 在动态网页中对于搜索引擎检索有一定的问题。一般来说,搜索引擎不可能从一个网站数据库中访问所有网页,或者出于技术考虑,搜索蜘蛛不会抓取“?”后面的内容。在URL中,所以使用动态网页的网站在推广搜索引擎时需要做一定的技术处理,以满足搜索引擎的要求;
  2)动态页面比较麻烦。网页接收到用户的指令后,将指令带到数据库中查找指令对应的数据,然后传递给服务器。动态页面通过服务器的编译被编译成标准的HTML。代码,它被传递给用户的浏览器,以便用户看到网页。结果,加载时间变长,用户不愿意再次访问您的页面。
  3)动态网页是用户输入指令后形成的页面。该页面不存在,搜索引擎只会抓取现成的,不会自行进入。虽然现在大部分搜索引擎都支持动态页面的爬取,但毕竟还不够完善。返回搜狐,查看更多 查看全部

  动态网页抓取(网站建设的基础静态网页的网址形式和优点介绍)
  网站构建的基础是静态网页,静态网页和动态网页并非互不兼容。静态网页的URL形式通常为:,即后缀为.htm、.html等,而后缀为.aspx.asp、.jsp、.php、.perl、.cgi等等等,还有一个标志性的符号——“?” 在动态网页 URL 中。
  
  静态网页的优点
  1)静态网页内容比较稳定,容易被搜索引擎检索;
  2)静态页面加载速度快,加载静态页面时无需搜索数据库;
  静态网页的缺点
  1)静态网页不支持数据库,不收录程序和非交互式网页。网站制作和维护的工作量比较大,在网站信息量很大的情况下很难完全依赖静态网页制作;
  2)静态网页的交互跨界在功能方面有较大的限制。
  动态网页的优点
  1)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  2)使用动态网页技术网站可以实现更多功能,如用户注册、用户登录、在线调查、用户管理、订单管理等;
  动态网页的缺点
  1)“?” 在动态网页中对于搜索引擎检索有一定的问题。一般来说,搜索引擎不可能从一个网站数据库中访问所有网页,或者出于技术考虑,搜索蜘蛛不会抓取“?”后面的内容。在URL中,所以使用动态网页的网站在推广搜索引擎时需要做一定的技术处理,以满足搜索引擎的要求;
  2)动态页面比较麻烦。网页接收到用户的指令后,将指令带到数据库中查找指令对应的数据,然后传递给服务器。动态页面通过服务器的编译被编译成标准的HTML。代码,它被传递给用户的浏览器,以便用户看到网页。结果,加载时间变长,用户不愿意再次访问您的页面。
  3)动态网页是用户输入指令后形成的页面。该页面不存在,搜索引擎只会抓取现成的,不会自行进入。虽然现在大部分搜索引擎都支持动态页面的爬取,但毕竟还不够完善。返回搜狐,查看更多

动态网页抓取(程序是否在服务器端运行是一个重要标志(一)_)

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

  动态网页抓取(程序是否在服务器端运行是一个重要标志(一)_)
  程序是否在服务器端运行是一个重要的指标。运行在服务器上的程序、网页和组件是动态网页,会在不同的时间从不同的客户端返回到不同的网页,例如JSP、ASP、PHP等。插件、组件、程序、网页、客户端运行的等属于静态网页,如html页面、Flash、JavaScript等,它们是永远不会改变的。
  静态网页和动态网页都有各自的特点。网站动态或静态网页的使用主要取决于网站的功能需求和网站的内容。如果网站的功能比较简单,内容更新量不大,使用纯静态网页的方法会比较简单,反之一般采用动态网页技术。
  静态网页是网站构建的基础,静态网页和动态网页并不矛盾。为了使网站适应搜索引擎检索的需要,即使采用动态网页技术,也可以将网页内容转换成静态网页进行发布。
  动态网站也可以采用动静结合的原则,适用于使用动态网页的动态网页。如果需要使用静态网页,可以考虑使用静态网页来实现。同样的网站,动态网页内容与静态网页内容共存也很常见。
  我们简要总结动态网页的一般特征如下:
  (1)网站配合动态网络技术可以实现更多功能,如用户注册、用户登录、用户管理、订单管理等;
  (2)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  (3)动态网页实际上并不是独立存在于服务器上的网页文件,服务器只有在用户请求时才返回完整的网页。
  (4)"?"对于动态网页中的搜索引擎检索有一定的问题。搜索引擎往往无法访问网站的数据库中的所有网页,或者由于技术原因,搜索蜘蛛不抓取网址“?”后面的内容,所以使用动态网页的网站在推广搜索引擎时需要进行一些技术处理,以满足搜索引擎的要求。
  注:本文版权归星宿云原创所有,禁止转载,一经发现追究版权责任! 查看全部

  动态网页抓取(程序是否在服务器端运行是一个重要标志(一)_)
  程序是否在服务器端运行是一个重要的指标。运行在服务器上的程序、网页和组件是动态网页,会在不同的时间从不同的客户端返回到不同的网页,例如JSP、ASP、PHP等。插件、组件、程序、网页、客户端运行的等属于静态网页,如html页面、Flash、JavaScript等,它们是永远不会改变的。
  静态网页和动态网页都有各自的特点。网站动态或静态网页的使用主要取决于网站的功能需求和网站的内容。如果网站的功能比较简单,内容更新量不大,使用纯静态网页的方法会比较简单,反之一般采用动态网页技术。
  静态网页是网站构建的基础,静态网页和动态网页并不矛盾。为了使网站适应搜索引擎检索的需要,即使采用动态网页技术,也可以将网页内容转换成静态网页进行发布。
  动态网站也可以采用动静结合的原则,适用于使用动态网页的动态网页。如果需要使用静态网页,可以考虑使用静态网页来实现。同样的网站,动态网页内容与静态网页内容共存也很常见。
  我们简要总结动态网页的一般特征如下:
  (1)网站配合动态网络技术可以实现更多功能,如用户注册、用户登录、用户管理、订单管理等;
  (2)动态网页基于数据库技术,可以大大减少网站维护的工作量;
  (3)动态网页实际上并不是独立存在于服务器上的网页文件,服务器只有在用户请求时才返回完整的网页。
  (4)"?"对于动态网页中的搜索引擎检索有一定的问题。搜索引擎往往无法访问网站的数据库中的所有网页,或者由于技术原因,搜索蜘蛛不抓取网址“?”后面的内容,所以使用动态网页的网站在推广搜索引擎时需要进行一些技术处理,以满足搜索引擎的要求。
  注:本文版权归星宿云原创所有,禁止转载,一经发现追究版权责任!

动态网页抓取( 动态网站丰富了网站的功能但是要避免「搜索机器人陷阱spidertraps」的脚本错误)

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

  动态网页抓取(
动态网站丰富了网站的功能但是要避免「搜索机器人陷阱spidertraps」的脚本错误)
  
  动态网站搜索引擎策略动态网站搜索引擎策略动态网站丰富了网站的功能,但是对于搜索引擎来说,情况就不同了。它是在执行“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。另外,搜索引擎要避免“搜索机器人陷阱蜘蛛陷阱”的脚本错误——动态网站最早在互联网出现时的出现和优势,网站内容以HTML静态形式存储在服务器上页。访问者访问的页面是这些实际存在的静态页面。随着技术的发展,特别是PERLASP的数据库和脚本技术,PHP和JSP 越来越多的网站开始采用动态页面发布方式。例如,当我们在GoogleCOM上搜索一个内容时,搜索结果页面文件“本身”在Google服务器上并不存在,而是在我们输入搜索内容时被程序调用。后台数据库是实时生成的,也就是说这些结果页面是动态页面和静态页面。站点只涉及文件的传输,而动态站点要复杂得多。用户和网站之间有很多互动网站不再只是内容的发布,变成了一种“应用”,是软件产业向互联网的扩展。从软件的角度来看,动态站点是逻辑应用层和数据层的分离。数据库负责站点数据的存储和管理,还有ASP、PHP、JSP等。逻辑应用除了增加很多交互功能外,好处是站点的维护、更新、升级很多更方便。可以说,没有动态网站技术,互联网上这些超大型网站是不可能进行二次搜索的。引擎在抓取动态网站页面时面临的问题动态网站从用户的角度来说是很好的丰富了网站的功能,但是对于搜索引擎和网站排名seo来说,情况不同关于搜索引擎和分类的区别以及搜索引擎是如何工作的,请“了解搜索引擎”,根本问题是“输入” 而“选择”动态页面是由用户“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。比如我们想在当当书店网站上查看冯英健的《网络营销基础与实践》。介绍页面是动态生成的URL地址在这里。需要输入“”后的product_id参数值。“搜索机器人”可以通过链接找到页面,但无法在“”后面输入product_id参数值,无法抓取页面文件。带有“”的页面在技术上可以被搜索引擎抓取,但通常他们选择不抓取它。这是为了避免称为“
  
  这种将动态站点转换为静态页面的方法更适合页面发布后变化较少的站点。比如新浪的新闻中心等一些新闻网站一般都是动态的网站可以用下面的方法让搜索引擎抓取首先我们需要让动态页面看起来像一个“静态页面”动态页面的URL地址中的“” 可以使用以下技术来提供一种使用ASP技术的动态页面工具,称为XQASP。用。。。来代替 ””。对于使用 ColdFusion 技术的站点,您需要在服务器上重新配置 ColdFusion。使用“”而不是“”将参数传输到有关 URL 的更多详细信息,请参阅该站点。对于使用 Apache 服务器的站点,您可以使用重写模块将带参数的 URL 地址转换为搜索引擎支持的形式。默认情况下,模块 mod_rewrite 未安装在 Apache 服务器中。详细信息请参见其他动态技术,也可以找到相应的方法来改变URL的形式,然后创建一些静态页面指向这些动态页面来链接改变后的URL。前面说过,搜索引擎机器人本身不会“输入”参数,所以让上面的动态页面被搜索引擎抓取,我们还需要告诉机器人这些页面的地址,也就是参数。我们可以创建一些静态页面,在网络营销中一般称为“网关页面”。这些页面有大量指向这些动态页面的链接。这些页面和链接的动态页面的地址可以在更改URL形式后被搜索引擎抓取。当我们调整动态站点以适应搜索引擎时,四个搜索引擎对动态 网站 支持的改进至关重要。词搜索引擎也在发展。到目前为止,大多数搜索引擎不支持动态页面的爬取,但是GoogleHOTBOT等已经开始尝试爬取动态的网站页面,包括“”,这就是为什么我们现在在这些搜索引擎的结果中有动态链接避免“搜索机器人陷阱”当这些搜索引擎抓取仅从至少“看起来”静态的静态页面抓取的动态页面时,不再抓取该页面链接的动态页面以及从动态页面链接的动态页面,所以如果一个动态网站只针对以上搜索引擎,可以在上节介绍的方法的基础上进行简化,只需要创建一些入口页面链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。 查看全部

  动态网页抓取(
动态网站丰富了网站的功能但是要避免「搜索机器人陷阱spidertraps」的脚本错误)
  
  动态网站搜索引擎策略动态网站搜索引擎策略动态网站丰富了网站的功能,但是对于搜索引擎来说,情况就不同了。它是在执行“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。另外,搜索引擎要避免“搜索机器人陷阱蜘蛛陷阱”的脚本错误——动态网站最早在互联网出现时的出现和优势,网站内容以HTML静态形式存储在服务器上页。访问者访问的页面是这些实际存在的静态页面。随着技术的发展,特别是PERLASP的数据库和脚本技术,PHP和JSP 越来越多的网站开始采用动态页面发布方式。例如,当我们在GoogleCOM上搜索一个内容时,搜索结果页面文件“本身”在Google服务器上并不存在,而是在我们输入搜索内容时被程序调用。后台数据库是实时生成的,也就是说这些结果页面是动态页面和静态页面。站点只涉及文件的传输,而动态站点要复杂得多。用户和网站之间有很多互动网站不再只是内容的发布,变成了一种“应用”,是软件产业向互联网的扩展。从软件的角度来看,动态站点是逻辑应用层和数据层的分离。数据库负责站点数据的存储和管理,还有ASP、PHP、JSP等。逻辑应用除了增加很多交互功能外,好处是站点的维护、更新、升级很多更方便。可以说,没有动态网站技术,互联网上这些超大型网站是不可能进行二次搜索的。引擎在抓取动态网站页面时面临的问题动态网站从用户的角度来说是很好的丰富了网站的功能,但是对于搜索引擎和网站排名seo来说,情况不同关于搜索引擎和分类的区别以及搜索引擎是如何工作的,请“了解搜索引擎”,根本问题是“输入” 而“选择”动态页面是由用户“输入内容”或“选择”时动态生成的,但搜索引擎的“搜索机器人”无法“输入”和“选择”。比如我们想在当当书店网站上查看冯英健的《网络营销基础与实践》。介绍页面是动态生成的URL地址在这里。需要输入“”后的product_id参数值。“搜索机器人”可以通过链接找到页面,但无法在“”后面输入product_id参数值,无法抓取页面文件。带有“”的页面在技术上可以被搜索引擎抓取,但通常他们选择不抓取它。这是为了避免称为“
  
  这种将动态站点转换为静态页面的方法更适合页面发布后变化较少的站点。比如新浪的新闻中心等一些新闻网站一般都是动态的网站可以用下面的方法让搜索引擎抓取首先我们需要让动态页面看起来像一个“静态页面”动态页面的URL地址中的“” 可以使用以下技术来提供一种使用ASP技术的动态页面工具,称为XQASP。用。。。来代替 ””。对于使用 ColdFusion 技术的站点,您需要在服务器上重新配置 ColdFusion。使用“”而不是“”将参数传输到有关 URL 的更多详细信息,请参阅该站点。对于使用 Apache 服务器的站点,您可以使用重写模块将带参数的 URL 地址转换为搜索引擎支持的形式。默认情况下,模块 mod_rewrite 未安装在 Apache 服务器中。详细信息请参见其他动态技术,也可以找到相应的方法来改变URL的形式,然后创建一些静态页面指向这些动态页面来链接改变后的URL。前面说过,搜索引擎机器人本身不会“输入”参数,所以让上面的动态页面被搜索引擎抓取,我们还需要告诉机器人这些页面的地址,也就是参数。我们可以创建一些静态页面,在网络营销中一般称为“网关页面”。这些页面有大量指向这些动态页面的链接。这些页面和链接的动态页面的地址可以在更改URL形式后被搜索引擎抓取。当我们调整动态站点以适应搜索引擎时,四个搜索引擎对动态 网站 支持的改进至关重要。词搜索引擎也在发展。到目前为止,大多数搜索引擎不支持动态页面的爬取,但是GoogleHOTBOT等已经开始尝试爬取动态的网站页面,包括“”,这就是为什么我们现在在这些搜索引擎的结果中有动态链接避免“搜索机器人陷阱”当这些搜索引擎抓取仅从至少“看起来”静态的静态页面抓取的动态页面时,不再抓取该页面链接的动态页面以及从动态页面链接的动态页面,所以如果一个动态网站只针对以上搜索引擎,可以在上节介绍的方法的基础上进行简化,只需要创建一些入口页面链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。并且只需要创建一些入口页面来链接很多动态页面,然后将这些入口页面提交给这些搜索引擎。直接使用动态URL地址,请注意文件URL中不能有SessionId,不要使用ID作为参数名。尤其是谷歌参数,越少越好,尽量不要超过 2 可以在 URL 中不使用任何参数。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。尽量不要使用某些参数转移到其他地方。这可以增加抓取的动态页面的深度和数量。

动态网页抓取(搜索引擎能否顺利抓取网站的基本信息是体现网络优化是否合格的标准)

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

  动态网页抓取(搜索引擎能否顺利抓取网站的基本信息是体现网络优化是否合格的标准)
  搜索引擎能否成功抓取网站的基本信息,是反映网络优化是否合格的标准。小编认为,当用户通过搜索引擎进行搜索时,能够出现在一个理想的位置,让用户能够找到相关的信息并引起兴趣是非常重要的。一般在制作网站的时候,应该参考各个搜索引擎提供的质量指南,尽量匹配或者接近相关的。
  
  例如: 谷歌提供的设计和内容指南:网站应该有清晰的层次结构和文本链接,每个网页应该至少有一个静态文本链接可以打开;为用户提供网站地图,列出网站重要位置的链接;如果 网站map 有超过 100 个或大约 100 个链接,最好将 网站map 拆分为多个页面;网站 应该信息丰富且有用,页面文本应该清晰准确地表达它试图传达的内容;考虑用户将使用哪些术语来查找您的页面,并尝试将该文本收录在您的 网站 中;尝试使用文本而不是图像来显示重要的名称、内容或链接,因为 Google 爬虫无法识别图像中收录的文本;确保 TITLE 和 ALT 标签具有描述性且准确;检查链接是否有错误,并确保 HTML 格式正确;如果您使用动态页面(即 URL 收录“?”字符),请注意并非每个搜索引擎蜘蛛都能抓取动态页面和静态页面;静态页面可以帮助缩短参数的长度,减少参数的数量;将给定页面上的链接数量限制为合理的数量(小于 100). 查看全部

  动态网页抓取(搜索引擎能否顺利抓取网站的基本信息是体现网络优化是否合格的标准)
  搜索引擎能否成功抓取网站的基本信息,是反映网络优化是否合格的标准。小编认为,当用户通过搜索引擎进行搜索时,能够出现在一个理想的位置,让用户能够找到相关的信息并引起兴趣是非常重要的。一般在制作网站的时候,应该参考各个搜索引擎提供的质量指南,尽量匹配或者接近相关的。
  
  例如: 谷歌提供的设计和内容指南:网站应该有清晰的层次结构和文本链接,每个网页应该至少有一个静态文本链接可以打开;为用户提供网站地图,列出网站重要位置的链接;如果 网站map 有超过 100 个或大约 100 个链接,最好将 网站map 拆分为多个页面;网站 应该信息丰富且有用,页面文本应该清晰准确地表达它试图传达的内容;考虑用户将使用哪些术语来查找您的页面,并尝试将该文本收录在您的 网站 中;尝试使用文本而不是图像来显示重要的名称、内容或链接,因为 Google 爬虫无法识别图像中收录的文本;确保 TITLE 和 ALT 标签具有描述性且准确;检查链接是否有错误,并确保 HTML 格式正确;如果您使用动态页面(即 URL 收录“?”字符),请注意并非每个搜索引擎蜘蛛都能抓取动态页面和静态页面;静态页面可以帮助缩短参数的长度,减少参数的数量;将给定页面上的链接数量限制为合理的数量(小于 100).

动态网页抓取( 前情介绍前段时间开发了一个功能,解决过程中遇到的问题)

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

  动态网页抓取(
前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  Java基于Selenium动态爬取页面
  介绍
  前段时间开发了一个功能,通过HttpClient访问某个页面,获取该页面的所有html内容;然后被抓取的整个页面显示在我自己的网页上;但是一段时间后,网页升级了,图片变成了动态加载,无法直接通过HttpClient获取完整的页面内容。图片处于延迟加载状态,无法显示正确的内容。
  解决方案
  由于没有办法直接爬取静态页面,可以尝试动态爬取页面;如何爬取动态页面,本文使用Selenium来动态爬取页面。Selenium 模拟正常打开浏览器并浏览网页的过程。当整个页面加载到页面底部,然后抓取整个网页的内容,就可以完整的获取到页面内容。
  Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  引用 Selenium 库的 jar 包
  
org.seleniumhq.selenium
selenium-java
3.141.59

  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作做好了,接下来就是开发代码了。废话不多说,直接上代码吧。
<p>public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i 查看全部

  动态网页抓取(
前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  Java基于Selenium动态爬取页面
  介绍
  前段时间开发了一个功能,通过HttpClient访问某个页面,获取该页面的所有html内容;然后被抓取的整个页面显示在我自己的网页上;但是一段时间后,网页升级了,图片变成了动态加载,无法直接通过HttpClient获取完整的页面内容。图片处于延迟加载状态,无法显示正确的内容。
  解决方案
  由于没有办法直接爬取静态页面,可以尝试动态爬取页面;如何爬取动态页面,本文使用Selenium来动态爬取页面。Selenium 模拟正常打开浏览器并浏览网页的过程。当整个页面加载到页面底部,然后抓取整个网页的内容,就可以完整的获取到页面内容。
  Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  引用 Selenium 库的 jar 包
  
org.seleniumhq.selenium
selenium-java
3.141.59

  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作做好了,接下来就是开发代码了。废话不多说,直接上代码吧。
<p>public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i

动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)

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

  动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)
  5-14更新
  注:目前,拉狗网已经更改了json结构。以前是content-result,现在改成content-positionResult-result,所以写代码的时候要特别注意加一层positionResult分析。
  现在很多网站使用了一种叫做Ajax(异步加载)的技术,也就是说,当一个网页打开的时候,会先把上面的一些东西展示给你,然后再慢慢加载剩下的。
  所以你可以看到很多网页,慢慢的刷,或者一些网站随着你的移动,很多信息都在慢慢加载。这种页面的好处是页面加载速度非常快(因为它不必一次加载整个内容)。
  但这对我们写爬虫来说很不方便,因为你不能总是爬你想要的!
  让我们举个例子。因为最近想分析一下拉狗网的工作情况数据,就去找他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)
  
  图片
  如您所见,这里有很多招聘信息。注意这里当我们点击下一页的时候
  
  图片
  我们可以发现网页地址是直接加载的,没有更新!!
  
  图片
  这显然是一个动态页面。让我们写一个爬虫来爬取页面,看看我们能得到什么内容。现在我们应该可以很快地编写(构建)这样一个爬虫了,对吧?(其实没什么)
  
  图片
  您可以看到输出,并且可以浏览所有源代码,而无需任何有关作业的信息!
  
  图片
  如果你觉得不直观,我教你一个技巧,我们简单的输出成一个html看看
  ![](爬虫/动态加载网页爬取/72.png" width=400px /&gt;
  就是这样。. 关键部分!空的!!!
  
  图片
  找到网站
  这个时候我们应该怎么做?信息爬不起来??
  当然不是,你想,只要显示在网页上,肯定是在某个地方,只是我们没有找到。
  但是,这一次,我们必须努力。我们还是回到刚才的网页,点击F12。这时候,我们使用网络功能
  
  图片
  这个时候你可能什么都看不到,因为它只记录了打开后的网络资源信息。
  让我们按 F5 刷新。
  
  图片
  可以看到有东西开始滑动了……太快了,我的眼睛跟不上,我们等它停止,我们点击任意资源,右边的框会出现,我们切换到响应
  
  图片
  然后我们开始寻找可疑的网络资源。首先,图片、css等可以跳过。这里有个窍门,就是一般来说这种数据会存储在json中,所以我们尝试在filter中输入json
  
  图片
  我们找到了2个感觉非常相似的资源,其中一个直接带有位置的名称,我们右键单击并在新选项卡中打开它。
  ![](爬虫/动态加载网页爬取/25.png" width=200px /&gt;
  虽然看起来杂乱无章(密集恐惧症估计难以忍受),但实际上非常有条理,都对应着关键值。这是json格式,特别适合网页数据交换。
  
  图片
  在这里我们发现它就是它!所有工作信息都在里面,我们快速记录下它的URL
  网页结构
  通过观察网页地址可以发现:
  这一段是固定的,剩下的我们发现上面有一个北京
  
  图片
  我们改成上海看看,可以看到又出现了一个网页,和之前工作地点改成上海的网页一模一样,对应的内容也一样。
  
  图片
  
  图片
  所以我们可以得出结论,这里的城市标签代表了你选择的工作地点,那么如果我们选择工作经验、学历要求等等一切呢?? 直接可以看到,URL变化很大
  src="爬虫/动态加载网页爬取/53.png)
  我们直接把这些复制到刚才找到的网页上
  
  图片
  可以发现和网页的内容是一致的
  
  图片
  现在我们可以得出结论,我们只需要这个 URL:
  然后您可以稍后添加这些参数:
  gj=应届毕业生&amp;xl=大专&amp;jd=成长型&amp;hy=移动互联网&amp;px=新&amp;city=上海
  通过修改这些参数,我们可以获得不同的作业信息。
  注意:这里的构造比较简单。有时,某些 URL 的构造远比这复杂得多。经常有 id= 或者你不知道是什么意思的东西。这个时候这个id的可能值可能在其他文件中,你可能要查一下,也可能在页面源代码的某个地方。
  还有一种情况可能会出现time=什么的,就是时间戳。在这种情况下,需要使用时间函数来构造它。总之,要具体情况具体分析。
  import time
time.time()
  写爬虫
  因为这个网页的格式是json,那么我们可以很好的读取json格式的内容。
  这里我们切换到预览,然后点击内容-结果,可以先找到一个列表,然后点击查看各个位置的内容。为什么从这里看?一个好处就是知道json文件的层次结构,方便后面编码。
  
  图片
  整个处理代码就那么几个字,就可以写出来,和刚才的层次结构完全一致。首先是内容,然后是结果,然后是每个位置的信息。
   jdict = json.loads(response.body)
jcontent = jdict["content"]
jresult = jcontent["result"]
for each in jresult:
print each['city']
print each['companyName']
print each['companySize']
print each['positionName']
print each['positionType']
print each['salary']
print ''
  当然,你还是要导入json
   import json
  
  图片
  我们可以运行看看效果
  ![](爬虫/动态加载网页爬取/91.png" width=400px /&gt;
  然后,我们可以将信息保存到文件或数据库中,这是我们之前学到的。
  修改 items.py
  添加你需要的东西
  
  图片
  修改settings.py
  正如我之前所说,这取决于您是否需要存储在数据库或文件中
  修改 pipelines.py
  如果需要加入数据库,请在此处添加数据库操作。如果你需要写一个文件,你可能不需要修改这个文件
  修改 parse()
  给item添加数据,然后yield,大家应该都很熟悉了
  
  图片
  但是,这里只爬取了一个网页的内容。如何获取更多页面的内容?我会在下一篇博客中介绍。有兴趣的童鞋可以自己试一试。如果您在下一页上获得内容,请使用上面教授的方法查找资源。 查看全部

  动态网页抓取(【干货】拉勾网换的更新注意:目前拉勾了json结构)
  5-14更新
  注:目前,拉狗网已经更改了json结构。以前是content-result,现在改成content-positionResult-result,所以写代码的时候要特别注意加一层positionResult分析。
  现在很多网站使用了一种叫做Ajax(异步加载)的技术,也就是说,当一个网页打开的时候,会先把上面的一些东西展示给你,然后再慢慢加载剩下的。
  所以你可以看到很多网页,慢慢的刷,或者一些网站随着你的移动,很多信息都在慢慢加载。这种页面的好处是页面加载速度非常快(因为它不必一次加载整个内容)。
  但这对我们写爬虫来说很不方便,因为你不能总是爬你想要的!
  让我们举个例子。因为最近想分析一下拉狗网的工作情况数据,就去找他们网站:(注意!爬取的内容仅限于学术交流!请勿用于商业用途!)
  
  图片
  如您所见,这里有很多招聘信息。注意这里当我们点击下一页的时候
  
  图片
  我们可以发现网页地址是直接加载的,没有更新!!
  
  图片
  这显然是一个动态页面。让我们写一个爬虫来爬取页面,看看我们能得到什么内容。现在我们应该可以很快地编写(构建)这样一个爬虫了,对吧?(其实没什么)
  
  图片
  您可以看到输出,并且可以浏览所有源代码,而无需任何有关作业的信息!
  
  图片
  如果你觉得不直观,我教你一个技巧,我们简单的输出成一个html看看
  ![](爬虫/动态加载网页爬取/72.png" width=400px /&gt;
  就是这样。. 关键部分!空的!!!
  
  图片
  找到网站
  这个时候我们应该怎么做?信息爬不起来??
  当然不是,你想,只要显示在网页上,肯定是在某个地方,只是我们没有找到。
  但是,这一次,我们必须努力。我们还是回到刚才的网页,点击F12。这时候,我们使用网络功能
  
  图片
  这个时候你可能什么都看不到,因为它只记录了打开后的网络资源信息。
  让我们按 F5 刷新。
  
  图片
  可以看到有东西开始滑动了……太快了,我的眼睛跟不上,我们等它停止,我们点击任意资源,右边的框会出现,我们切换到响应
  
  图片
  然后我们开始寻找可疑的网络资源。首先,图片、css等可以跳过。这里有个窍门,就是一般来说这种数据会存储在json中,所以我们尝试在filter中输入json
  
  图片
  我们找到了2个感觉非常相似的资源,其中一个直接带有位置的名称,我们右键单击并在新选项卡中打开它。
  ![](爬虫/动态加载网页爬取/25.png" width=200px /&gt;
  虽然看起来杂乱无章(密集恐惧症估计难以忍受),但实际上非常有条理,都对应着关键值。这是json格式,特别适合网页数据交换。
  
  图片
  在这里我们发现它就是它!所有工作信息都在里面,我们快速记录下它的URL
  网页结构
  通过观察网页地址可以发现:
  这一段是固定的,剩下的我们发现上面有一个北京
  
  图片
  我们改成上海看看,可以看到又出现了一个网页,和之前工作地点改成上海的网页一模一样,对应的内容也一样。
  
  图片
  
  图片
  所以我们可以得出结论,这里的城市标签代表了你选择的工作地点,那么如果我们选择工作经验、学历要求等等一切呢?? 直接可以看到,URL变化很大
  src="爬虫/动态加载网页爬取/53.png)
  我们直接把这些复制到刚才找到的网页上
  
  图片
  可以发现和网页的内容是一致的
  
  图片
  现在我们可以得出结论,我们只需要这个 URL:
  然后您可以稍后添加这些参数:
  gj=应届毕业生&amp;xl=大专&amp;jd=成长型&amp;hy=移动互联网&amp;px=新&amp;city=上海
  通过修改这些参数,我们可以获得不同的作业信息。
  注意:这里的构造比较简单。有时,某些 URL 的构造远比这复杂得多。经常有 id= 或者你不知道是什么意思的东西。这个时候这个id的可能值可能在其他文件中,你可能要查一下,也可能在页面源代码的某个地方。
  还有一种情况可能会出现time=什么的,就是时间戳。在这种情况下,需要使用时间函数来构造它。总之,要具体情况具体分析。
  import time
time.time()
  写爬虫
  因为这个网页的格式是json,那么我们可以很好的读取json格式的内容。
  这里我们切换到预览,然后点击内容-结果,可以先找到一个列表,然后点击查看各个位置的内容。为什么从这里看?一个好处就是知道json文件的层次结构,方便后面编码。
  
  图片
  整个处理代码就那么几个字,就可以写出来,和刚才的层次结构完全一致。首先是内容,然后是结果,然后是每个位置的信息。
   jdict = json.loads(response.body)
jcontent = jdict["content"]
jresult = jcontent["result"]
for each in jresult:
print each['city']
print each['companyName']
print each['companySize']
print each['positionName']
print each['positionType']
print each['salary']
print ''
  当然,你还是要导入json
   import json
  
  图片
  我们可以运行看看效果
  ![](爬虫/动态加载网页爬取/91.png" width=400px /&gt;
  然后,我们可以将信息保存到文件或数据库中,这是我们之前学到的。
  修改 items.py
  添加你需要的东西
  
  图片
  修改settings.py
  正如我之前所说,这取决于您是否需要存储在数据库或文件中
  修改 pipelines.py
  如果需要加入数据库,请在此处添加数据库操作。如果你需要写一个文件,你可能不需要修改这个文件
  修改 parse()
  给item添加数据,然后yield,大家应该都很熟悉了
  
  图片
  但是,这里只爬取了一个网页的内容。如何获取更多页面的内容?我会在下一篇博客中介绍。有兴趣的童鞋可以自己试一试。如果您在下一页上获得内容,请使用上面教授的方法查找资源。

动态网页抓取( 私信小编007或者01即可获取数十套PDF或者零基础入门资料一套)

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

  动态网页抓取(
私信小编007或者01即可获取数十套PDF或者零基础入门资料一套)
  
  写在前面的话
  夜凉如水,夜空下,秋叶翩翩起舞。
  天桥下,五彩缤纷的灯火一望无际,人来人往的十字路口,繁华热闹的城市。
  我需要看看这位年轻女士的照片,感受这个世界的温柔。
  私信编辑007或01获取几十套PDF或一套零基础的入门资料!
  一.思路分析
  根据爬行动物的基本规则:
  1.寻找目标
  2.获取目标
  3.处理目标内容以获取有用信息
  行动
  1.我们的目标是:
  这个网站是论坛式的网站,分为几类。无论如何,尝试各种动画。
  我们的目标是找到这些(采集的)(隐藏的)移动(行进的)图片(self)的(self)、地面(electrical)地址(brain)。
  2.看看各个模块的url,有什么规则?
  
  是的,没错,如果您以访问者的身份访问,每个模块的 URL 将如下所示:
  开始使用
  1.获取入口页面内容
  即根据传入的URL,获取整个页面的源码
  
  这里我们使用 webdriver 和 PhantomJS 之类的模块,为什么?因为网页是动态加载的,所以可以爬取的数据是满的。
  2.获取页码
  
  这里的页码处理使用了一个模板pq,它使用PyQuery来查找我们需要的元素。处理起来感觉更好,非常方便。
  同时,这里的处理有点意思。如果你观察这个页面,你会发现每个模板的页码上下都有一个,然后
  我这里截图了,因为我们只需要页码
  3-6 一起说一下步骤3到6
  其实就是根据页数进行遍历,得到每一页的内容
  然后获取每一页的所有图片地址
  
  在获取每个页面的内容时,需要重新组装页面地址。
  有了新地址就可以得到当前页面的内容,进行数据处理得到每张图片的地址列表
  得到图片列表后,再次解析得到每张图片的URL
  将图像保存在本地,并将数据写入数据库
  
  其实大致的内容到这里就讲完了。我们可以将本论坛各个模块的动画保存在本地,同时将数据存入数据库。
  数据库过滤
  把数据放入数据库后,想到直接调用数据库就可以保存图片了
  (为什么会有这个想法,因为我发现如果直接在主程序中存储图片,运行太慢,不如把所有数据都放到数据库中,然后专门调用数据库存储图片)
  但是这里有个问题,数据里面有很多内容,然后我们发现很多内容都是重复的,所以我们需要对数据库进行去重
  关于去重的内容,其实我之前已经写过文章(我写那个文章的时候,这个爬虫已经完成了~)
  主要思想是对某个元素的数量进行操作。pymongo中有一个方法可以统计指定元素的个数。如果只有一个当前元素,那没关系。如果它不是元素,则将其删除。
  核心代码如下:
  
  读取数据库中的内容并存储图片
  数据去重后,再次存储图片就方便多了。
  图片删除后,无需再次运行。核心代码如下:
  
  完整代码
  01_get_gif_url.py
  
  02_delete_repeat_url_in_mongodb.py
  
  谢谢阅读!!! 查看全部

  动态网页抓取(
私信小编007或者01即可获取数十套PDF或者零基础入门资料一套)
  
  写在前面的话
  夜凉如水,夜空下,秋叶翩翩起舞。
  天桥下,五彩缤纷的灯火一望无际,人来人往的十字路口,繁华热闹的城市。
  我需要看看这位年轻女士的照片,感受这个世界的温柔。
  私信编辑007或01获取几十套PDF或一套零基础的入门资料!
  一.思路分析
  根据爬行动物的基本规则:
  1.寻找目标
  2.获取目标
  3.处理目标内容以获取有用信息
  行动
  1.我们的目标是:
  这个网站是论坛式的网站,分为几类。无论如何,尝试各种动画。
  我们的目标是找到这些(采集的)(隐藏的)移动(行进的)图片(self)的(self)、地面(electrical)地址(brain)。
  2.看看各个模块的url,有什么规则?
  
  是的,没错,如果您以访问者的身份访问,每个模块的 URL 将如下所示:
  开始使用
  1.获取入口页面内容
  即根据传入的URL,获取整个页面的源码
  
  这里我们使用 webdriver 和 PhantomJS 之类的模块,为什么?因为网页是动态加载的,所以可以爬取的数据是满的。
  2.获取页码
  
  这里的页码处理使用了一个模板pq,它使用PyQuery来查找我们需要的元素。处理起来感觉更好,非常方便。
  同时,这里的处理有点意思。如果你观察这个页面,你会发现每个模板的页码上下都有一个,然后
  我这里截图了,因为我们只需要页码
  3-6 一起说一下步骤3到6
  其实就是根据页数进行遍历,得到每一页的内容
  然后获取每一页的所有图片地址
  
  在获取每个页面的内容时,需要重新组装页面地址。
  有了新地址就可以得到当前页面的内容,进行数据处理得到每张图片的地址列表
  得到图片列表后,再次解析得到每张图片的URL
  将图像保存在本地,并将数据写入数据库
  
  其实大致的内容到这里就讲完了。我们可以将本论坛各个模块的动画保存在本地,同时将数据存入数据库。
  数据库过滤
  把数据放入数据库后,想到直接调用数据库就可以保存图片了
  (为什么会有这个想法,因为我发现如果直接在主程序中存储图片,运行太慢,不如把所有数据都放到数据库中,然后专门调用数据库存储图片)
  但是这里有个问题,数据里面有很多内容,然后我们发现很多内容都是重复的,所以我们需要对数据库进行去重
  关于去重的内容,其实我之前已经写过文章(我写那个文章的时候,这个爬虫已经完成了~)
  主要思想是对某个元素的数量进行操作。pymongo中有一个方法可以统计指定元素的个数。如果只有一个当前元素,那没关系。如果它不是元素,则将其删除。
  核心代码如下:
  
  读取数据库中的内容并存储图片
  数据去重后,再次存储图片就方便多了。
  图片删除后,无需再次运行。核心代码如下:
  
  完整代码
  01_get_gif_url.py
  
  02_delete_repeat_url_in_mongodb.py
  
  谢谢阅读!!!

动态网页抓取(如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇))

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

  动态网页抓取(如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇))
  前天给大家分享了第一篇(理论篇)如何使用Python网络爬虫爬取微信朋友圈数据。今天给大家分享一下代码实现(实战篇),然后上一篇继续深入。
  一、代码实现
  1、修改 Scrapy 项目中的 items.py 文件。我们需要获取的数据是朋友圈和发布日期,所以我们在这里定义了两个属性,日期和动态,如下图所示。
  
  2、修改实现爬虫逻辑的主文件moment.py。首先,导入模块,特别是在 items.py 中导入 WeixinMomentItem 类。小心不要错过这一点。然后修改start_requests方法,具体代码实现如下。
  
  3、修改parse方法解析导航数据包。代码实现稍微复杂一些,如下图所示。
  
  4、定义parse_moment函数,提取朋友圈数据。返回的数据以 JSON 格式加载,JSON 用于提取数据。具体代码实现如下图所示。
  
  5、在setting.py文件中取消注释ITEM_PIPELINES,表示数据是通过这个管道处理的。
  
  6、 之后就可以在命令行运行程序了。在命令行输入scrapy crawl moment -o moment.json,就可以得到朋友圈的数据了。控制台输出的信息如下图所示。
  
  7、然后我们得到一个moment.json文件,里面存放着我们朋友圈的数据,如下图所示。
  
  8、嗯,你没看错,里面得到的数据确实是看不懂,不过这不是乱码,而是编码问题。解决这个问题的方法是删除原来的moment.json文件,然后在命令行重新输入如下命令:scrapy crawl moment -o moment.json -s FEED_EXPORT_ENCODING=utf-8,可以看到编码问题已解决 已解决,如下图所示。
  
  在下一篇文章中,小编将为大家直观的展示一下抓拍到的朋友圈数据,敬请期待~~ 查看全部

  动态网页抓取(如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇))
  前天给大家分享了第一篇(理论篇)如何使用Python网络爬虫爬取微信朋友圈数据。今天给大家分享一下代码实现(实战篇),然后上一篇继续深入。
  一、代码实现
  1、修改 Scrapy 项目中的 items.py 文件。我们需要获取的数据是朋友圈和发布日期,所以我们在这里定义了两个属性,日期和动态,如下图所示。
  
  2、修改实现爬虫逻辑的主文件moment.py。首先,导入模块,特别是在 items.py 中导入 WeixinMomentItem 类。小心不要错过这一点。然后修改start_requests方法,具体代码实现如下。
  
  3、修改parse方法解析导航数据包。代码实现稍微复杂一些,如下图所示。
  
  4、定义parse_moment函数,提取朋友圈数据。返回的数据以 JSON 格式加载,JSON 用于提取数据。具体代码实现如下图所示。
  
  5、在setting.py文件中取消注释ITEM_PIPELINES,表示数据是通过这个管道处理的。
  
  6、 之后就可以在命令行运行程序了。在命令行输入scrapy crawl moment -o moment.json,就可以得到朋友圈的数据了。控制台输出的信息如下图所示。
  
  7、然后我们得到一个moment.json文件,里面存放着我们朋友圈的数据,如下图所示。
  
  8、嗯,你没看错,里面得到的数据确实是看不懂,不过这不是乱码,而是编码问题。解决这个问题的方法是删除原来的moment.json文件,然后在命令行重新输入如下命令:scrapy crawl moment -o moment.json -s FEED_EXPORT_ENCODING=utf-8,可以看到编码问题已解决 已解决,如下图所示。
  
  在下一篇文章中,小编将为大家直观的展示一下抓拍到的朋友圈数据,敬请期待~~

动态网页抓取(一下如何利用robots文件来提高蜘蛛对动态网站的抓取频率)

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

  动态网页抓取(一下如何利用robots文件来提高蜘蛛对动态网站的抓取频率)
  很多为网站做seo的站长都会遇到这样的问题,就是动态的网站好像不太受搜索引擎蜘蛛的欢迎,所以很多站长会选择做静态生成的网站@网站。但是静态生成的网站在日常维护和更新中总是有些不便。那么,有什么办法可以提高搜索引擎蜘蛛对动态网站的抓取频率呢?答案是肯定的,那就是好好利用robots文件!今天就和大家一起阅读下面的文章,学习如何使用robots文件来增加蜘蛛对动态网站的抓取频率!相信看完之后,你会忍不住马上开始工作!
  
  动态网站不用担心,搜索引擎可以正常抓取动态链接,但是使用robots文件可以轻松提升动态网站的抓取效率。我们都知道robots协议(也称为爬虫协议、机器人协议等)的全称是“Robots Exclusion Protocol”。网站 告诉搜索引擎哪些页面可以爬取,哪些页面不能爬取。Robots协议的本质是网站与搜索引擎爬虫之间的通信方式,用于引导搜索引擎更好地抓取网站内容。
  百度官方建议所有网站都使用robots文件,以更好地利用蜘蛛爬行。事实上,机器人不仅告诉搜索引擎什么不能被抓取,也是网站优化的重要工具之一。
  robots文件实际上是一个txt文件。其基本写法如下:
  User-agent:*这里*代表所有类型的搜索引擎,*是通配符
  Disallow: /admin/ 这里的定义是禁止爬取admin目录下的目录
  Disallow: /require/ 这个定义是禁止爬取require目录下的目录
  Disallow: /ABC/ 这里的定义是禁止爬取ABC目录下的目录
  禁止:/cgi-bin/*.htm 禁止访问/cgi-bin/ 目录中所有以“.htm”为后缀的URL(包括子目录)。
  Disallow: /*?* 禁止访问 网站 中的所有动态页面
  Disallow: /.jpg$ 禁止抓取来自网络的所有 .jpg 图像
  Disallow:/ab/adc.html 禁止爬取ab文件夹下的adc.html文件。
  allow: /cgi-bin/这个定义是允许cgi-bin目录下的目录被爬取
  allow: /tmp 这里的定义是允许爬取tmp的整个目录
  允许:.htm$ 只允许访问以“.htm”为后缀的 URL。
  允许:.gif$ 允许抓取网页和 gif 格式的图片
  在网站优化方面,robots文件用于告诉搜索引擎哪些内容是重要的,建议robots文件禁止抓取不重要的内容。不重要内容的典型特征:网站 的搜索结果页面。
  对于静态 网站,我们可以使用 Disallow: /*?* 来禁用动态页面爬取。但是对于动态的网站,就不能这么简单了。不过对于动态网站站长来说,不用太担心,搜索引擎现在可以正常抓取动态页面了。那么在写的时候一定要注意,可以具体写搜索文件的名字。例如,你的网站是一个长长的列表,在 search.asp? 之后,那么你可以这样写:
  禁止:/search.asp?*
  这样就可以屏蔽搜索结果页面。写完可以去百度站长平台查看机器人,看看有没有错误!您可以输入 URL 以检查它是否正常工作。
  这里建议动态网站的站长一定要用robots文件来屏蔽不重要内容的动态链接,提高蜘蛛的抓取效率! 查看全部

  动态网页抓取(一下如何利用robots文件来提高蜘蛛对动态网站的抓取频率)
  很多为网站做seo的站长都会遇到这样的问题,就是动态的网站好像不太受搜索引擎蜘蛛的欢迎,所以很多站长会选择做静态生成的网站@网站。但是静态生成的网站在日常维护和更新中总是有些不便。那么,有什么办法可以提高搜索引擎蜘蛛对动态网站的抓取频率呢?答案是肯定的,那就是好好利用robots文件!今天就和大家一起阅读下面的文章,学习如何使用robots文件来增加蜘蛛对动态网站的抓取频率!相信看完之后,你会忍不住马上开始工作!
  
  动态网站不用担心,搜索引擎可以正常抓取动态链接,但是使用robots文件可以轻松提升动态网站的抓取效率。我们都知道robots协议(也称为爬虫协议、机器人协议等)的全称是“Robots Exclusion Protocol”。网站 告诉搜索引擎哪些页面可以爬取,哪些页面不能爬取。Robots协议的本质是网站与搜索引擎爬虫之间的通信方式,用于引导搜索引擎更好地抓取网站内容。
  百度官方建议所有网站都使用robots文件,以更好地利用蜘蛛爬行。事实上,机器人不仅告诉搜索引擎什么不能被抓取,也是网站优化的重要工具之一。
  robots文件实际上是一个txt文件。其基本写法如下:
  User-agent:*这里*代表所有类型的搜索引擎,*是通配符
  Disallow: /admin/ 这里的定义是禁止爬取admin目录下的目录
  Disallow: /require/ 这个定义是禁止爬取require目录下的目录
  Disallow: /ABC/ 这里的定义是禁止爬取ABC目录下的目录
  禁止:/cgi-bin/*.htm 禁止访问/cgi-bin/ 目录中所有以“.htm”为后缀的URL(包括子目录)。
  Disallow: /*?* 禁止访问 网站 中的所有动态页面
  Disallow: /.jpg$ 禁止抓取来自网络的所有 .jpg 图像
  Disallow:/ab/adc.html 禁止爬取ab文件夹下的adc.html文件。
  allow: /cgi-bin/这个定义是允许cgi-bin目录下的目录被爬取
  allow: /tmp 这里的定义是允许爬取tmp的整个目录
  允许:.htm$ 只允许访问以“.htm”为后缀的 URL。
  允许:.gif$ 允许抓取网页和 gif 格式的图片
  在网站优化方面,robots文件用于告诉搜索引擎哪些内容是重要的,建议robots文件禁止抓取不重要的内容。不重要内容的典型特征:网站 的搜索结果页面。
  对于静态 网站,我们可以使用 Disallow: /*?* 来禁用动态页面爬取。但是对于动态的网站,就不能这么简单了。不过对于动态网站站长来说,不用太担心,搜索引擎现在可以正常抓取动态页面了。那么在写的时候一定要注意,可以具体写搜索文件的名字。例如,你的网站是一个长长的列表,在 search.asp? 之后,那么你可以这样写:
  禁止:/search.asp?*
  这样就可以屏蔽搜索结果页面。写完可以去百度站长平台查看机器人,看看有没有错误!您可以输入 URL 以检查它是否正常工作。
  这里建议动态网站的站长一定要用robots文件来屏蔽不重要内容的动态链接,提高蜘蛛的抓取效率!

动态网页抓取([问题讨论]分析:您可以使用Chrome的开发者模式)

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

  动态网页抓取([问题讨论]分析:您可以使用Chrome的开发者模式)
  [答案1]:
  您可以使用 ghost.py 直接与页面上的 JavaScript 交互,而不是尝试对其进行逆向工程。
  如果您在 Chrome 控制台中运行以下查询,您会看到它返回了您想要的所有内容。
  document.getElementsByClassName('inline-text-org');
  退货
  [​University of Manchester​,
​University of California ...​​
etc...
  您可以使用 ghost.py 在现实生活中的 DOM 中从 python 运行 JavaScript。
  这真的很酷:
  from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://academic.research.microsoft.com/Search?query=lander')
result, resources = ghost.evaluate(
"document.getElementsByClassName('inline-text-org');")
  【问题讨论】:
  [答案2]:
  之前有人问过一个非常相似的问题。参考的是 selenium,它最初是一个 web-apps 的测试环境。
  我通常使用 Chrome 的开发者模式,恕我直言,它已经提供了比 Firefox 更详细的信息。
  【问题讨论】:
  【答案3】:
  要爬取动态内容,你需要的不是一个简单的爬虫,而是一个成熟的无头浏览器。
  dhamaniasad/HeadlessBrowsers:(几乎)所有存在的无头网络浏览器的列表是我见过的最完整的列表;它列出了每种语言的绑定语言。
  (请注意,列出的物品中有不少被遗弃了!)
  【问题讨论】: 查看全部

  动态网页抓取([问题讨论]分析:您可以使用Chrome的开发者模式)
  [答案1]:
  您可以使用 ghost.py 直接与页面上的 JavaScript 交互,而不是尝试对其进行逆向工程。
  如果您在 Chrome 控制台中运行以下查询,您会看到它返回了您想要的所有内容。
  document.getElementsByClassName('inline-text-org');
  退货
  [​University of Manchester​,
​University of California ...​​
etc...
  您可以使用 ghost.py 在现实生活中的 DOM 中从 python 运行 JavaScript。
  这真的很酷:
  from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://academic.research.microsoft.com/Search?query=lander')
result, resources = ghost.evaluate(
"document.getElementsByClassName('inline-text-org');")
  【问题讨论】:
  [答案2]:
  之前有人问过一个非常相似的问题。参考的是 selenium,它最初是一个 web-apps 的测试环境。
  我通常使用 Chrome 的开发者模式,恕我直言,它已经提供了比 Firefox 更详细的信息。
  【问题讨论】:
  【答案3】:
  要爬取动态内容,你需要的不是一个简单的爬虫,而是一个成熟的无头浏览器。
  dhamaniasad/HeadlessBrowsers:(几乎)所有存在的无头网络浏览器的列表是我见过的最完整的列表;它列出了每种语言的绑定语言。
  (请注意,列出的物品中有不少被遗弃了!)
  【问题讨论】:

动态网页抓取(AngularJS-pageapplication框架如何判断前端渲染判断页面多)

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

  动态网页抓取(AngularJS-pageapplication框架如何判断前端渲染判断页面多)
  抓取前端渲染的页面
  随着AJAX技术的不断普及和AngularJS等单页应用框架的出现,越来越多的页面使用js渲染。对于爬虫来说,这种页面比较烦人:只提取 HTML 内容,往往无法获取有效信息。那么如何处理这种页面呢?一般有两种方法:
  爬取阶段,爬虫内置浏览器内核,爬取前执行js渲染页面。这方面的相应工具是 Selenium、HtmlUnit 或 PhantomJs。但这些工具都存在一定的效率问题,同时也不是那么稳定。优点是编写规则与静态页面相同。因为js渲染页面的数据也是从后端获取的,而且基本上都是通过AJAX获取的,所以分析AJAX请求,找到数据对应的请求也是可行的。而且相对于页面样式,这个界面是不太可能改变的。缺点是找到这个请求并模拟它是一个比较困难的过程,需要比较大量的分析经验。
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法省时省力。但对于长期、大规模的需求,第二种更为可靠。对于某些网站,甚至还有一些 js 混淆技术。这时候第一种方法基本是万能的,第二种方法会很复杂。
  这里我们以AngularJS中文社区{{global.metatitle}}为例。
  1 如何判断前端渲染
  判断页面是否为js渲染的方式比较简单。可以直接在浏览器中查看源码(Windows下Ctrl+U,Mac下command+alt+u)。如果没有找到有效信息,基本上就是js渲染了。
  本例中在源码中找不到页面中的标题“优符计算机网-前端攻城师”,因此可以断定是js渲染,这个数据是通过AJAX获取的。
  2 分析请求
  现在我们到了最难的部分:找到这个数据请求。这一步帮助我们的工具,主要是浏览器中的开发者工具查看网络请求。
  以Chome为例,我们打开“开发者工具”(Windows下F12,Mac下command+alt+i),然后刷新页面(也可能是一个下拉页面,总之所有的操作你觉得可能会触发新的数据)),那就记得保留场景,一一分析请求!
  这一步需要一点耐心,但不是随机的。首先可以帮助我们的是上面的分类过滤器(All、Document 和其他选项)。如果是普通的 AJAX,会显示在 XHR 标签下,而 JSONP 请求会显示在 Scripts 标签下。这是两种更常见的数据类型。
  然后你可以根据数据的大小来判断。一般来说,较大的结果更有可能是返回数据的接口。其余的基本上都是凭经验。比如这里的“latest?p=1&amp;s=20”,一看就很可疑……
  对于可疑地址,此时可以查看响应正文的内容。在这里的开发者工具中并不清楚。我们把/api/article/latest?p=1&amp;s=20复制到地址栏再请求一次(如果用Chrome推荐安装一个jsonviewer,查看AJAX结果很方便)。查看结果,看起来我们找到了我们想要的东西。
  同样的方法,我们进入帖子详情页面,找到具体内容的请求:/api/article/A0y2。
  以上信息摘自webMagic 查看全部

  动态网页抓取(AngularJS-pageapplication框架如何判断前端渲染判断页面多)
  抓取前端渲染的页面
  随着AJAX技术的不断普及和AngularJS等单页应用框架的出现,越来越多的页面使用js渲染。对于爬虫来说,这种页面比较烦人:只提取 HTML 内容,往往无法获取有效信息。那么如何处理这种页面呢?一般有两种方法:
  爬取阶段,爬虫内置浏览器内核,爬取前执行js渲染页面。这方面的相应工具是 Selenium、HtmlUnit 或 PhantomJs。但这些工具都存在一定的效率问题,同时也不是那么稳定。优点是编写规则与静态页面相同。因为js渲染页面的数据也是从后端获取的,而且基本上都是通过AJAX获取的,所以分析AJAX请求,找到数据对应的请求也是可行的。而且相对于页面样式,这个界面是不太可能改变的。缺点是找到这个请求并模拟它是一个比较困难的过程,需要比较大量的分析经验。
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法省时省力。但对于长期、大规模的需求,第二种更为可靠。对于某些网站,甚至还有一些 js 混淆技术。这时候第一种方法基本是万能的,第二种方法会很复杂。
  这里我们以AngularJS中文社区{{global.metatitle}}为例。
  1 如何判断前端渲染
  判断页面是否为js渲染的方式比较简单。可以直接在浏览器中查看源码(Windows下Ctrl+U,Mac下command+alt+u)。如果没有找到有效信息,基本上就是js渲染了。
  本例中在源码中找不到页面中的标题“优符计算机网-前端攻城师”,因此可以断定是js渲染,这个数据是通过AJAX获取的。
  2 分析请求
  现在我们到了最难的部分:找到这个数据请求。这一步帮助我们的工具,主要是浏览器中的开发者工具查看网络请求。
  以Chome为例,我们打开“开发者工具”(Windows下F12,Mac下command+alt+i),然后刷新页面(也可能是一个下拉页面,总之所有的操作你觉得可能会触发新的数据)),那就记得保留场景,一一分析请求!
  这一步需要一点耐心,但不是随机的。首先可以帮助我们的是上面的分类过滤器(All、Document 和其他选项)。如果是普通的 AJAX,会显示在 XHR 标签下,而 JSONP 请求会显示在 Scripts 标签下。这是两种更常见的数据类型。
  然后你可以根据数据的大小来判断。一般来说,较大的结果更有可能是返回数据的接口。其余的基本上都是凭经验。比如这里的“latest?p=1&amp;s=20”,一看就很可疑……
  对于可疑地址,此时可以查看响应正文的内容。在这里的开发者工具中并不清楚。我们把/api/article/latest?p=1&amp;s=20复制到地址栏再请求一次(如果用Chrome推荐安装一个jsonviewer,查看AJAX结果很方便)。查看结果,看起来我们找到了我们想要的东西。
  同样的方法,我们进入帖子详情页面,找到具体内容的请求:/api/article/A0y2。
  以上信息摘自webMagic

动态网页抓取(抓取街拍图片数据1.抓取抓取抓取)

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

  动态网页抓取(抓取街拍图片数据1.抓取抓取抓取)
  捕捉街道照片数据
  1. 拍摄街拍
  街拍网址
  
  2.解析街拍结构
  
  
  keyword: 街拍
pd: atlas
dvpf: pc
aid: 4916
page_num: 1
search_json: {"from_search_id":"20220104115420010212192151532E8188","origin_keyword":"街拍","image_keyword":"街拍"}
rawJSON: 1
search_id: 202201041159040101501341671A4749C4
  可以找到规则,page_num从1开始累加,其他参数不变
  3.根据不同的功能编写不同的方法组织代码3.1 获取网页json格式数据
  def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
  3.2 从json格式数据中提取街景图片
  def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
  3.3 用 md5 代码命名街道照片并保存图像
  实现方法 save_image() 来保存图像,其中 item 是前面的 get_images() 方法返回的字典。该方法首先根据item的标题创建一个文件夹,然后请求图片链接,获取图片的二进制数据,以二进制形式写入文件。图片名称可以使用其内容的MD5值,可以去除重复。相关代码如下:
  def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
  3.4 main() 调用其他函数
  def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
  4 捕获20page今日头条街拍数据
  这里定义了分页的起始页和结束页,分别是 GROUP_START 和 GROUP_END。也使用了多线程线程池,调用它的map()方法实现多线程下载。
  if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  import requests
from urllib.parse import urlencode
from hashlib import md5
from multiprocessing.pool import Pool
def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  
  参考链接 查看全部

  动态网页抓取(抓取街拍图片数据1.抓取抓取抓取)
  捕捉街道照片数据
  1. 拍摄街拍
  街拍网址
  
  2.解析街拍结构
  
  
  keyword: 街拍
pd: atlas
dvpf: pc
aid: 4916
page_num: 1
search_json: {"from_search_id":"20220104115420010212192151532E8188","origin_keyword":"街拍","image_keyword":"街拍"}
rawJSON: 1
search_id: 202201041159040101501341671A4749C4
  可以找到规则,page_num从1开始累加,其他参数不变
  3.根据不同的功能编写不同的方法组织代码3.1 获取网页json格式数据
  def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
  3.2 从json格式数据中提取街景图片
  def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
  3.3 用 md5 代码命名街道照片并保存图像
  实现方法 save_image() 来保存图像,其中 item 是前面的 get_images() 方法返回的字典。该方法首先根据item的标题创建一个文件夹,然后请求图片链接,获取图片的二进制数据,以二进制形式写入文件。图片名称可以使用其内容的MD5值,可以去除重复。相关代码如下:
  def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
  3.4 main() 调用其他函数
  def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
  4 捕获20page今日头条街拍数据
  这里定义了分页的起始页和结束页,分别是 GROUP_START 和 GROUP_END。也使用了多线程线程池,调用它的map()方法实现多线程下载。
  if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  import requests
from urllib.parse import urlencode
from hashlib import md5
from multiprocessing.pool import Pool
def get_page(page_num):
global headers
headers = {
&#39;Host&#39;: &#39;so.toutiao.com&#39;,
#&#39;Referer&#39;: &#39;https://so.toutiao.com/search% ... on%3D{%22from_search_id%22:%22202112272022060101510440283EE83D67%22,%22origin_keyword%22:%22%E8%A1%97%E6%8B%8D%22,%22image_keyword%22:%22%E8%A1%97%E6%8B%8D%22}&#39;,
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&#39;,
&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;,
&#39;Cookie&#39;: &#39;msToken=S0DFBkZ9hmyLOGYd3_QjhhXgrm38qTyOITnkNb0t_oavfbVxuYV1JZ0tT5hLgswSfmZLFD6c2lONm_5TomUQXVXjen7CIxM2AGwbhHRYKjhg; _S_DPR=1.5; _S_IPAD=0; MONITOR_WEB_ID=7046351002275317255; ttwid=1%7C0YdWalNdIiSpIk3CvvHwV25U8drq3QAj08E8QOApXhs%7C1640607595%7C720e971d353416921df127996ed708931b4ae28a0a8691a5466347697e581ce8; _S_WIN_WH=262_623&#39;
}
params = {
&#39;keyword&#39;: &#39;街拍&#39;,
&#39;pd&#39;: &#39;atlas&#39;,
&#39;dvpf&#39;: &#39;pc&#39;,
&#39;aid&#39;: &#39;4916&#39;,
&#39;page_num&#39;: page_num,
&#39;search_json&#39;: &#39;%7B%22from_search_id%22%3A%22202112272022060101510440283EE83D67%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D&#39;,
&#39;rawJSON&#39;: 1,
&#39;search_id&#39;: &#39;2021122721183101015104402851E3883D&#39;
}
url = &#39;https://so.toutiao.com/search?&#39; + urlencode(params)
print(url)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code == 200:
#if response.content:
#print(response.json())
return response.json()
except requests.ConnectionError:
return None
def get_images(json):
images = json.get(&#39;rawData&#39;).get(&#39;data&#39;)
for image in images:
link = image.get(&#39;img_url&#39;)
yield link
def save_image(link):
data = requests.get(link).content
with open(f&#39;./image/{md5(data).hexdigest()}.jpg&#39;, &#39;wb&#39;)as f:#使用data的md5码作为图片名
f.write(data)
def main(page_num):
json = get_page(page_num)
for link in get_images(json):
#print(link)
save_image(link)
if __name__ == &#39;__main__&#39;:
GROUP_START = 1
GROUP_END = 20
pool = Pool()
groups = ([x for x in range(GROUP_START, GROUP_END + 1)])
#print(groups)
pool.map(main, groups)
pool.close()
pool.join()
  
  参考链接

动态网页抓取(如何构建一个网页数据爬取程序?(二)或开发人员来说)

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

  动态网页抓取(如何构建一个网页数据爬取程序?(二)或开发人员来说)
  网页数据抓取是指从网站中提取特定内容,而不需要请求网站的API接口来获取内容。“网页数据”是 网站 用户体验的一部分,例如网页上的文本、图像、声音、视频和动画。受限,这个时候必须借助IP海代理的帮助,才能最大限度地提高效率和效果。
  
  对于程序员或开发人员来说,拥有编程技能使得构建网络抓取程序变得非常容易和有趣。但是对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页中获取特定的内容。
  1、从动态网页中提取内容
  网页可以是静态的或动态的。通常,您要提取的网页内容会随着您访问 网站 的时间而改变。通常,这个 网站 是一个动态的网站,它使用 AJAX 技术或其他技术来使 Web 内容保持最新。AJAX 是一种延迟加载和异步更新的脚本技术。通过在后台与服务器交换少量数据,可以在不重新加载整个网页的情况下更新网页的某一部分。性能特点是当点击网页中的某个选项时,网站的大部分URL都不会改变;网页没有完全加载,而只是部分加载了数据,这些数据会发生变化。
  2、从网页中抓取隐藏的内容
  你有没有想过从 网站 获取特定的数据,但是当你触发链接或鼠标悬停在某处时,内容就会出现?网站您需要将鼠标移到选择选项上才能显示类别。对于此功能,您可以设置“鼠标悬停在链接上”来抓取网页中的隐藏内容。
  3、从无限滚动的网页中提取内容
  滚动到页面底部后,有些网站只有你要提取的一部分数据。比如今日头条首页,需要不断滚动到页面底部加载更多文章内容,无限滚动网站一般使用AJAX或者JavaScript向网站@请求额外内容&gt; 内容。在这种情况下,您可以设置 AJAX 超时设置并选择滚动方式和滚动时间以从网页中提取内容。
  4、 从网络上抓取所有链接
  一个普通的网站至少会收录一个超链接,如果你想把一个网页的所有链接都提取出来,可以使用IP海代理软件来获取网页上发布的所有超链接。 查看全部

  动态网页抓取(如何构建一个网页数据爬取程序?(二)或开发人员来说)
  网页数据抓取是指从网站中提取特定内容,而不需要请求网站的API接口来获取内容。“网页数据”是 网站 用户体验的一部分,例如网页上的文本、图像、声音、视频和动画。受限,这个时候必须借助IP海代理的帮助,才能最大限度地提高效率和效果。
  
  对于程序员或开发人员来说,拥有编程技能使得构建网络抓取程序变得非常容易和有趣。但是对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定的网页中获取特定的内容。
  1、从动态网页中提取内容
  网页可以是静态的或动态的。通常,您要提取的网页内容会随着您访问 网站 的时间而改变。通常,这个 网站 是一个动态的网站,它使用 AJAX 技术或其他技术来使 Web 内容保持最新。AJAX 是一种延迟加载和异步更新的脚本技术。通过在后台与服务器交换少量数据,可以在不重新加载整个网页的情况下更新网页的某一部分。性能特点是当点击网页中的某个选项时,网站的大部分URL都不会改变;网页没有完全加载,而只是部分加载了数据,这些数据会发生变化。
  2、从网页中抓取隐藏的内容
  你有没有想过从 网站 获取特定的数据,但是当你触发链接或鼠标悬停在某处时,内容就会出现?网站您需要将鼠标移到选择选项上才能显示类别。对于此功能,您可以设置“鼠标悬停在链接上”来抓取网页中的隐藏内容。
  3、从无限滚动的网页中提取内容
  滚动到页面底部后,有些网站只有你要提取的一部分数据。比如今日头条首页,需要不断滚动到页面底部加载更多文章内容,无限滚动网站一般使用AJAX或者JavaScript向网站@请求额外内容&gt; 内容。在这种情况下,您可以设置 AJAX 超时设置并选择滚动方式和滚动时间以从网页中提取内容。
  4、 从网络上抓取所有链接
  一个普通的网站至少会收录一个超链接,如果你想把一个网页的所有链接都提取出来,可以使用IP海代理软件来获取网页上发布的所有超链接。

动态网页抓取(动态网页抓取是什么意思_e操盘培训软件_软件)

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

  动态网页抓取(动态网页抓取是什么意思_e操盘培训软件_软件)
  动态网页抓取,按照主要手段有三种:1.基于页面动态加载实现,通过获取页面的完整js代码,可以实现动态的页面更新,有些页面甚至可以实现持续更新的状态,然后通过缓存数据,实现了定时刷新,这种动态网页抓取一般用于静态的页面,或者简单的页面版面更新,对于使用js页面实现动态网页的网站来说,这是最方便快捷的抓取手段2.基于web框架实现,通过设置一些代理来进行页面抓取,web框架比如jsoup、selenium、urllib等等,这种页面抓取一般会返回html文件,然后在浏览器中进行解析,最终页面显示3.通过静态的页面抓取,通过构造动态的静态页面,然后使用代理和scrapy等进行抓取,这种一般适用于多种静态页面抓取,如各种评论系统,如、新浪新闻等,这种抓取一般有种代理访问内容的策略,一般对应于需要抓取的页面多种数据模型,如表格型数据抓取,查询型数据抓取,分页等,所以有可能抓取很多内容,且抓取后生成动态页面这一点无法控制,就是一旦生成动态页面,除非该动态页面被注册,否则无法控制页面抓取实现的过程。
  总结来说:1.基于jsoup等库抓取。2.构造完整js代码,一般是利用jsoup比如selenium、urllib、jsoup等库实现。3.通过静态页面抓取,采用web框架实现,一般是使用其他库自己封装了一些http请求,一般抓取某些页面会采用动态页面的封装代理或者设置authentication等代理来解析页面,然后在浏览器进行解析。 查看全部

  动态网页抓取(动态网页抓取是什么意思_e操盘培训软件_软件)
  动态网页抓取,按照主要手段有三种:1.基于页面动态加载实现,通过获取页面的完整js代码,可以实现动态的页面更新,有些页面甚至可以实现持续更新的状态,然后通过缓存数据,实现了定时刷新,这种动态网页抓取一般用于静态的页面,或者简单的页面版面更新,对于使用js页面实现动态网页的网站来说,这是最方便快捷的抓取手段2.基于web框架实现,通过设置一些代理来进行页面抓取,web框架比如jsoup、selenium、urllib等等,这种页面抓取一般会返回html文件,然后在浏览器中进行解析,最终页面显示3.通过静态的页面抓取,通过构造动态的静态页面,然后使用代理和scrapy等进行抓取,这种一般适用于多种静态页面抓取,如各种评论系统,如、新浪新闻等,这种抓取一般有种代理访问内容的策略,一般对应于需要抓取的页面多种数据模型,如表格型数据抓取,查询型数据抓取,分页等,所以有可能抓取很多内容,且抓取后生成动态页面这一点无法控制,就是一旦生成动态页面,除非该动态页面被注册,否则无法控制页面抓取实现的过程。
  总结来说:1.基于jsoup等库抓取。2.构造完整js代码,一般是利用jsoup比如selenium、urllib、jsoup等库实现。3.通过静态页面抓取,采用web框架实现,一般是使用其他库自己封装了一些http请求,一般抓取某些页面会采用动态页面的封装代理或者设置authentication等代理来解析页面,然后在浏览器进行解析。

动态网页抓取(国内有可以买的7种网页代理:动态网页抓取)

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

  动态网页抓取(国内有可以买的7种网页代理:动态网页抓取)
  动态网页抓取。用w3c的canvas,两种分辨率对应相应代码,用base64就可以解密。高级的用到ethernet,ethernet_help,ethernet_meta。
  国内有可以买的7种网页代理:
  比如我们在用beamer
  meteor
  lockin-httpbaseddatastructuredetectionortraceanalysis
  也许可以考虑用知乎自己的服务器api?
  开发一个,分享出来。
  抓包处理,app抓包,网页抓包都可以。
  比如直接用requests
  可以找找panda的cookies,然后就可以用panda的api自动抓取,
  现在有可以自动http抓包的小工具fishme
  方法很多。1.使用工具抓包,非常便捷的解决方案2.请求get和post,使用json,处理很简单。非常常见的问题是有时候网站会返回错误数据或其他奇怪的东西3.用一些开源库,可以看到网站返回的内容,抓包也很方便,
  官方有methodindex可以在国内使用googleapi,做大的博客也能做官方开发工具,
  可以给项目使用beamer,推荐
  webflowes
  很好奇如果已经配置好了对redis服务器进行数据抓取,然后还想抓取微博,最近本地又有一个前端分发任务的需求,微博请求全靠openid,然后又想抓取微博内容, 查看全部

  动态网页抓取(国内有可以买的7种网页代理:动态网页抓取)
  动态网页抓取。用w3c的canvas,两种分辨率对应相应代码,用base64就可以解密。高级的用到ethernet,ethernet_help,ethernet_meta。
  国内有可以买的7种网页代理:
  比如我们在用beamer
  meteor
  lockin-httpbaseddatastructuredetectionortraceanalysis
  也许可以考虑用知乎自己的服务器api?
  开发一个,分享出来。
  抓包处理,app抓包,网页抓包都可以。
  比如直接用requests
  可以找找panda的cookies,然后就可以用panda的api自动抓取,
  现在有可以自动http抓包的小工具fishme
  方法很多。1.使用工具抓包,非常便捷的解决方案2.请求get和post,使用json,处理很简单。非常常见的问题是有时候网站会返回错误数据或其他奇怪的东西3.用一些开源库,可以看到网站返回的内容,抓包也很方便,
  官方有methodindex可以在国内使用googleapi,做大的博客也能做官方开发工具,
  可以给项目使用beamer,推荐
  webflowes
  很好奇如果已经配置好了对redis服务器进行数据抓取,然后还想抓取微博,最近本地又有一个前端分发任务的需求,微博请求全靠openid,然后又想抓取微博内容,

动态网页抓取(网页没有标题中没有包含有效的关键词,大量动态网页影响搜索引擎)

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

  动态网页抓取(网页没有标题中没有包含有效的关键词,大量动态网页影响搜索引擎)
  网页没有标题,或者标题不收录有效的关键词,网页正文中有效的关键词比较少,网站导航系统进行搜索引擎“看不懂”,大量动态网页影响搜索引擎检索
  
  图 25815-1:
  SEO优化是英文搜索引擎优化的缩写,中文翻译是“搜索引擎优化”!SEO优化是指网站(网站网站结构调整、网站内容构建、网站代码优化和编码等)的现场优化和修复和非网站优化,从而提高网站的网站关键词的排名和公司产品的曝光度。通过搜索引擎搜索信息是网民查找网上信息和资源的主要方式。搜索引擎营销已经成为网络营销中最重要的部分。
  seo全称:搜索引擎优化,即搜索引擎优化。为了说明什么是网站针对搜索引擎优化,未针对搜索引擎优化网站的站长分为以下几个特点:
  1、网页中大量使用图片或flash等富媒体,没有可检索的文字信息,最基础的SEO优化是文章SEO和图片SEO;
  2、页面没有标题,或者标题不收录有效的关键词;
  3、网页正文中有效的关键词比较少(最好是自然集中分布,没有特殊堆叠关键词);
  4、网站导航系统让搜索引擎“看不懂”;
  5、大量动态网页影响搜索引擎检索;
  6、收录 的搜索引擎中的网站 没有提供其他链接;
  7、网站充斥着大量欺骗搜索引擎的垃圾信息,如“桥页(也称门页、过渡页)”和与背景色同色的文字;
  8、网站中缺少原创的内容,完全抄袭别人的内容等。 查看全部

  动态网页抓取(网页没有标题中没有包含有效的关键词,大量动态网页影响搜索引擎)
  网页没有标题,或者标题不收录有效的关键词,网页正文中有效的关键词比较少,网站导航系统进行搜索引擎“看不懂”,大量动态网页影响搜索引擎检索
  
  图 25815-1:
  SEO优化是英文搜索引擎优化的缩写,中文翻译是“搜索引擎优化”!SEO优化是指网站(网站网站结构调整、网站内容构建、网站代码优化和编码等)的现场优化和修复和非网站优化,从而提高网站的网站关键词的排名和公司产品的曝光度。通过搜索引擎搜索信息是网民查找网上信息和资源的主要方式。搜索引擎营销已经成为网络营销中最重要的部分。
  seo全称:搜索引擎优化,即搜索引擎优化。为了说明什么是网站针对搜索引擎优化,未针对搜索引擎优化网站的站长分为以下几个特点:
  1、网页中大量使用图片或flash等富媒体,没有可检索的文字信息,最基础的SEO优化是文章SEO和图片SEO;
  2、页面没有标题,或者标题不收录有效的关键词;
  3、网页正文中有效的关键词比较少(最好是自然集中分布,没有特殊堆叠关键词);
  4、网站导航系统让搜索引擎“看不懂”;
  5、大量动态网页影响搜索引擎检索;
  6、收录 的搜索引擎中的网站 没有提供其他链接;
  7、网站充斥着大量欺骗搜索引擎的垃圾信息,如“桥页(也称门页、过渡页)”和与背景色同色的文字;
  8、网站中缺少原创的内容,完全抄袭别人的内容等。

动态网页抓取(网站如何设置反爬虫,爬虫又该如何应对?(图))

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

  动态网页抓取(网站如何设置反爬虫,爬虫又该如何应对?(图))
  有爬虫,自然就有反爬虫。网站越成熟,它的反爬机制就越完善。初始IP限制、验证码限制等限制,今天就来了解一下网站 反爬虫如何设置,爬虫应该如何应对。
  
  网站的反爬虫策略有哪些以及如何应对
  1、用户行为反爬虫
  网站的一部分是通过检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。
  大多数网站都是前一种情况,使用IP代理就可以了。检测后我们可以将代理IP保存在文件中,但是这种方法不可取,代理IP失败的可能性非常高,所以从真实的专用代理IP网站中抓取是个不错的选择时间。
  对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。
  还有就是对于cookies,通过检查cookies来判断用户是否是合法用户,网站需要登录的人经常会用到这个技术。更深入地讲,一些 网站 登录会动态更新身份验证。登录时会随机分配用于登录认证的authentication_token,并将authentication_token连同用户提交的登录名和密码一起发送回服务器。
  
  网站的反爬虫策略有哪些以及如何应对
  2、通过Headers反爬虫
  反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。
  如果遇到这样的反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
  3、限制对某些 IP 的访问
  免费代理 IP 可以从许多 网站 处获得。由于爬虫可以使用这些代理 IP 进行 网站 的爬取,所以 网站 也可以使用这些代理 IP 进行反向限制。IP 保留在服务器上,以限制使用代理 IP 进行爬取的爬虫。
  
  网站的反爬虫策略有哪些以及如何应对
  4、动态页面的反爬虫
  有时候抓取目标页面,发现关键信息内容是空白的,只有frame code,这是因为网站的信息通过用户Post的XHR动态返回内容信息,解决这个问题的方法是通过开发者工具(FireBug等)分析网站流,找到单独的内容信息请求(如Json),爬取内容信息,获取需要的内容。
  稍微复杂一点的是动态请求是加密的,无法解析参数,所以无法爬取。在这种情况下,可以使用 Mechanize 和 selenium RC 调用浏览器内核,就像使用浏览器上网一样,可以最大限度地捕获成功,但效率会降低。 查看全部

  动态网页抓取(网站如何设置反爬虫,爬虫又该如何应对?(图))
  有爬虫,自然就有反爬虫。网站越成熟,它的反爬机制就越完善。初始IP限制、验证码限制等限制,今天就来了解一下网站 反爬虫如何设置,爬虫应该如何应对。
  
  网站的反爬虫策略有哪些以及如何应对
  1、用户行为反爬虫
  网站的一部分是通过检测用户行为,比如同一个IP在短时间内多次访问同一个页面,或者同一个账号在短时间内多次执行相同的操作。
  大多数网站都是前一种情况,使用IP代理就可以了。检测后我们可以将代理IP保存在文件中,但是这种方法不可取,代理IP失败的可能性非常高,所以从真实的专用代理IP网站中抓取是个不错的选择时间。
  对于第二种情况,下一个请求可以在每个请求之后以几秒的随机间隔发出。一些有逻辑漏洞的网站可以通过多次请求、注销、重新登录、继续请求的方式绕过同一账号短时间内不能多次请求的限制。
  还有就是对于cookies,通过检查cookies来判断用户是否是合法用户,网站需要登录的人经常会用到这个技术。更深入地讲,一些 网站 登录会动态更新身份验证。登录时会随机分配用于登录认证的authentication_token,并将authentication_token连同用户提交的登录名和密码一起发送回服务器。
  
  网站的反爬虫策略有哪些以及如何应对
  2、通过Headers反爬虫
  反爬取用户请求的头部是最常见的反爬取策略。很多网站会检测Headers的User-Agent,有的网站会检测Referer(有些资源的防盗链网站就是检测Referer)。
  如果遇到这样的反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或添加Headers可以很好的绕过。
  3、限制对某些 IP 的访问
  免费代理 IP 可以从许多 网站 处获得。由于爬虫可以使用这些代理 IP 进行 网站 的爬取,所以 网站 也可以使用这些代理 IP 进行反向限制。IP 保留在服务器上,以限制使用代理 IP 进行爬取的爬虫。
  
  网站的反爬虫策略有哪些以及如何应对
  4、动态页面的反爬虫
  有时候抓取目标页面,发现关键信息内容是空白的,只有frame code,这是因为网站的信息通过用户Post的XHR动态返回内容信息,解决这个问题的方法是通过开发者工具(FireBug等)分析网站流,找到单独的内容信息请求(如Json),爬取内容信息,获取需要的内容。
  稍微复杂一点的是动态请求是加密的,无法解析参数,所以无法爬取。在这种情况下,可以使用 Mechanize 和 selenium RC 调用浏览器内核,就像使用浏览器上网一样,可以最大限度地捕获成功,但效率会降低。

动态网页抓取(如何用Java获取Javascript动态生成的html内容?(图))

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

  动态网页抓取(如何用Java获取Javascript动态生成的html内容?(图))
  首先明确我所说的动态数据是什么意思。
  术语定义:这里的动态数据是指网页中通过Javascript动态生成的页面内容,即不在网页的源文件中,而是在页面加载到浏览器后动态生成的。
  输入下面的主题。
  抓取一个静态页面非常简单,通过Java获取html源代码,然后分析源代码得到想要的信息。比如要在中国天气网获取杭州的天气,只需要找到对应的html页面()即可。
  假设我需要输入城市名称来获取变更后城市的天气,而数据源仍然来自中国天气网。首先要做的是根据城市找到对应的页面。通过简单分析,发现城市对应页面的URL,比如杭州对应101210101,所以程序的关键是找到城市和页面的对应关系。
  发现网站的搜索框有国内大部分城市的链接,可以得到city和_id的对应关系。找到突破口并开始采取行动。进入首页,查看其源码,找到搜索框的位置。
  (图1捕获_1.JPG)
  原来数据是通过Javascript动态添加的,通过Chrome的inspect元素可以看到如下内容。
  (图2捕获_2.JPG)
  现在可以做的就是用Chrome将html复制到一个文件中,然后解析该文件得到城市和URL的关系。问题是如果城市和网站的URL的对应关系发生变化,很被动,需要改程序。
  现在的问题是如何获取Java中Javascript动态生成的html内容。 查看全部

  动态网页抓取(如何用Java获取Javascript动态生成的html内容?(图))
  首先明确我所说的动态数据是什么意思。
  术语定义:这里的动态数据是指网页中通过Javascript动态生成的页面内容,即不在网页的源文件中,而是在页面加载到浏览器后动态生成的。
  输入下面的主题。
  抓取一个静态页面非常简单,通过Java获取html源代码,然后分析源代码得到想要的信息。比如要在中国天气网获取杭州的天气,只需要找到对应的html页面()即可。
  假设我需要输入城市名称来获取变更后城市的天气,而数据源仍然来自中国天气网。首先要做的是根据城市找到对应的页面。通过简单分析,发现城市对应页面的URL,比如杭州对应101210101,所以程序的关键是找到城市和页面的对应关系。
  发现网站的搜索框有国内大部分城市的链接,可以得到city和_id的对应关系。找到突破口并开始采取行动。进入首页,查看其源码,找到搜索框的位置。
  (图1捕获_1.JPG)
  原来数据是通过Javascript动态添加的,通过Chrome的inspect元素可以看到如下内容。
  (图2捕获_2.JPG)
  现在可以做的就是用Chrome将html复制到一个文件中,然后解析该文件得到城市和URL的关系。问题是如果城市和网站的URL的对应关系发生变化,很被动,需要改程序。
  现在的问题是如何获取Java中Javascript动态生成的html内容。

动态网页抓取(动态网页抓取的可访问性和静态页面介绍(图))

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

  动态网页抓取(动态网页抓取的可访问性和静态页面介绍(图))
  动态网页抓取就是指利用http或ftp等ssl传输协议抓取的网页。网页分为静态页和动态页。网页如果要实现抓取,首先要根据查询的关键词进行分类,然后抓取,这个过程是一个链式路由过程。用户可以通过搜索引擎进行搜索。网页抓取为热门网站,像豆瓣,知乎,新浪微博等。接下来,在网页页面上抓取主要通过上下文渲染,然后获取页面各个元素。
  随着html5出现后,大量的浏览器加入到新标准,解决这一问题。在对html5标准进行学习浏览器的交互爬取、静态页抓取、google爬虫,这几个方面需要更多对javascript、html、http协议、互联网标准、搜索引擎等技术的理解。
  01.静态页提高网站的可访问性和可读性1.1静态页面1.1.1静态页面介绍1.1.2响应式浏览器1.1.3手机站,微信站,内容就在身边1.1.4实现抓取需要针对某个站点抓取静态页1.2响应式页面1.2.1页面的上下文1.2.2查看页面内容1.2.3抓取方式1.2.4如何实现1.3要取代静态页面,需要的功能点1.4抓取页面,进行数据的分析1.5服务器端如何实现1.6实现代码注释,文档结构化,网站路由等能力1.7抓取不同内容的技术1.8baidu快照,自动发布,制作抓取地址。 查看全部

  动态网页抓取(动态网页抓取的可访问性和静态页面介绍(图))
  动态网页抓取就是指利用http或ftp等ssl传输协议抓取的网页。网页分为静态页和动态页。网页如果要实现抓取,首先要根据查询的关键词进行分类,然后抓取,这个过程是一个链式路由过程。用户可以通过搜索引擎进行搜索。网页抓取为热门网站,像豆瓣,知乎,新浪微博等。接下来,在网页页面上抓取主要通过上下文渲染,然后获取页面各个元素。
  随着html5出现后,大量的浏览器加入到新标准,解决这一问题。在对html5标准进行学习浏览器的交互爬取、静态页抓取、google爬虫,这几个方面需要更多对javascript、html、http协议、互联网标准、搜索引擎等技术的理解。
  01.静态页提高网站的可访问性和可读性1.1静态页面1.1.1静态页面介绍1.1.2响应式浏览器1.1.3手机站,微信站,内容就在身边1.1.4实现抓取需要针对某个站点抓取静态页1.2响应式页面1.2.1页面的上下文1.2.2查看页面内容1.2.3抓取方式1.2.4如何实现1.3要取代静态页面,需要的功能点1.4抓取页面,进行数据的分析1.5服务器端如何实现1.6实现代码注释,文档结构化,网站路由等能力1.7抓取不同内容的技术1.8baidu快照,自动发布,制作抓取地址。

动态网页抓取(交互selenium模拟执行方法总结(一):浏览器模拟用法)

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

  动态网页抓取(交互selenium模拟执行方法总结(一):浏览器模拟用法)
  内容
  这里解释了用法,安装和配置就不详细解释了。我最喜欢的浏览器驱动程序是 ChromeDriver 和无界面的 PhantomJS。
  1:浏览器信息测试1.初始化浏览器
  使用以下代码初始化浏览器
  from selenium import webdriver
# 把浏览器对象赋值为browser对象,然后就可以进行模拟浏览器操作
browser = webdriver.Chrome()
  2.访问网页
  browser.get('url地址')
# 这个是打印网页源代码
print(browser.page_source)
browser.close() # 处理完后要关闭这个对象
  二:找到节点
  如果我们要执行一个操作,比如填写表单、模拟点击等,或者在输入框中输入文本,首先要知道位置,selenium提供了一系列查找节点的方法,如下。
  1.单节点
  如何找到 | 指示
  -|-|-
  find_element_by_id | 按 id 查找标签
  find_element_by_name | 按名称属性查找标签
  find_element_by_xpath | 通过 xpath 查找标签
  find_element_by_link_text | 通过链接文本查找标签
  find_element_by_partial_link_text | 通过链接的关键字查找标签
  find_element_by_tag_name | 按标签名称查找标签
  find_element_by_class_name | 按类属性查找标签
  find_element_by_css_selector | 通过 css 选择器查找标签
  另一种通用的方法是给find_element()传递两个参数,一个是By。search方法,另一个是value。例如 find_element(By.ID, id) 和 find_element_by_id 的结果是一样的。
  2.多个节点
  查找多个节点时,在查找单个节点的方法中直接加s,如find_elements_by_name或find_elements(By.NAME,name),列表中的每个节点都是WebElement类型。
  三:测试动作1.简单交互
  Selenium 可以驱动浏览器执行一些操作,也就是让浏览器模拟一些动作。下面是一些常用方法的总结。
  方法 | 描述
  -|-|-
  发送键 | 输入文字
  明确 | 明文
  点击 | 点击按钮
  2.特殊互动
  有些交互操作没有具体的执行对象,比如鼠标拖拽、键盘按键等,这些比较复杂的动作是在一个动作链中执行的。此处暂时不用,暂且略过。
  3. 模拟运行 JavaScript
  execute_script() 方法可以模拟运行JavaScript,基本上所有复杂的动作都可以通过执行JavaScript来实现。
  四:获取节点信息
  使用 get_attribute() 方法获取节点的属性。
  使用 text 属性获取节点的文本值。
  使用 id 属性获取节点 id。
  使用 location 属性获取节点在页面上的相对位置。
  使用 tag_name 属性获取标签名称。
  使用 size 属性获取节点的大小。
  五:切换子页面Frame
  一个网页的节点之一是iframe,它是一个子框架,相当于页面的一个子页面。网页打开时,默认是在父Frame中操作。要获取子Frame的节点,需要使用switch_to.frame()方法进行切换。
  使用 switch_to.parent_frame() 获取父页面的内容。
  六、延迟请求
  在 selenium 中,get() 方法会在网页框架加载完成后结束执行。此时如果获取到网页源代码,则可能不是浏览器完全加载的页面。如果有额外的ajax请求,网页源代码可能不会成功。要获取,需要延迟并等待一定的时间,以确保动态网页的所有源代码都加载完毕。
  等待有两种方式,一种是隐式等待,另一种是显式等待。
  1.隐式等待
  隐式等待是一般等待。执行测试时,等待下一步后,使用implicitly_wait(),参数为时间。
  2.显式等待
  隐式等待不是那么好,它们只是指定一个固定的时间,网页的加载时间会受到网络条件的影响。
  这里有一个显式的等待方法,就是指定要搜索的节点,然后指定一个最大等待时间。如果在指定时间内加载,它将返回。如果无法加载,则会抛出异常。
  一个例子如下:
  from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('url地址')
# 先指定最长等待时间为20s
wait = WebDriverWait(browser,20)
# 传入等待条件expected_conditions,这里的presence_of_element_located代表节点出现的意思
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# 按钮等待条件,这里的element_to_be_clickable表示可点击的,10秒内能点击,就成功
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)
  以下是所有等待条件:
  等待条件 | 描述
  -|-|-
  标题是 | 标题是东西
  标题_收录 | 标题收录一些东西
  Presence_of_all_elements_located | 节点是否加载
  visibility_of_element_located | 节点是否可见
  可见性_of | 节点是否可见,传入节点对象
  Presence_of_all_elements_located | 加载所有节点
  text_to_be_present_in_element | 节点文本收录文本
  text_to_be_present_in_element_value | 节点值收录文本
  frame_to_be_available_and_switch_to_it | 负载和开关
  invisibility_of_element_located | 节点不可见
  element_to_be_clickable | 节点可点击
  staleness_of | 判断DOM中是否存在节点,可以判断页面是否刷新过
  element_to_be_selected | 可以选择节点,传入节点对象
  element_located_to_be_selected | 可以选择节点,传入一个定位元组
  element_selection_state_to_be | 传入节点对象和状态,相等返回True,否则返回False
  element_located_selection_state_to_be | 传入定位元组和状态,相等返回True,否则返回False
  alert_is_present | 是否存在警报
  七:前进后退
  Selenium 测试使用 back() 方法返回,并使用 forward() 方法进行。
  八:饼干
  使用 selenium 可以轻松操作 Cookie。
  使用 get_cookies() 方法获取所有 cookie。
  使用 add_cookies() 方法添加 Cookie。
  使用 delete_all_cookies() 和 delete_cookies() 方法删除 Cookie。
  八:标签处理
  访问网页时,标签页是一个一个打开的,标签页也可以在 selenium 中进行操作。
  browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])
  使用 execute_script 方法执行 JavaScript 语句,其中 window_handles 获取所有当前打开的选项卡并返回选项卡的代码名称列表。使用 browser.window_handles[index] 跳转到索引索引对应的选项卡。
  九:捕捉异常
  捕获异常是一种常用的方法。该语句是 try-except-finally。它对于不同的错误非常有用,无论是网络连接、代码运行时超时还是找不到数据。 查看全部

  动态网页抓取(交互selenium模拟执行方法总结(一):浏览器模拟用法)
  内容
  这里解释了用法,安装和配置就不详细解释了。我最喜欢的浏览器驱动程序是 ChromeDriver 和无界面的 PhantomJS。
  1:浏览器信息测试1.初始化浏览器
  使用以下代码初始化浏览器
  from selenium import webdriver
# 把浏览器对象赋值为browser对象,然后就可以进行模拟浏览器操作
browser = webdriver.Chrome()
  2.访问网页
  browser.get('url地址')
# 这个是打印网页源代码
print(browser.page_source)
browser.close() # 处理完后要关闭这个对象
  二:找到节点
  如果我们要执行一个操作,比如填写表单、模拟点击等,或者在输入框中输入文本,首先要知道位置,selenium提供了一系列查找节点的方法,如下。
  1.单节点
  如何找到 | 指示
  -|-|-
  find_element_by_id | 按 id 查找标签
  find_element_by_name | 按名称属性查找标签
  find_element_by_xpath | 通过 xpath 查找标签
  find_element_by_link_text | 通过链接文本查找标签
  find_element_by_partial_link_text | 通过链接的关键字查找标签
  find_element_by_tag_name | 按标签名称查找标签
  find_element_by_class_name | 按类属性查找标签
  find_element_by_css_selector | 通过 css 选择器查找标签
  另一种通用的方法是给find_element()传递两个参数,一个是By。search方法,另一个是value。例如 find_element(By.ID, id) 和 find_element_by_id 的结果是一样的。
  2.多个节点
  查找多个节点时,在查找单个节点的方法中直接加s,如find_elements_by_name或find_elements(By.NAME,name),列表中的每个节点都是WebElement类型。
  三:测试动作1.简单交互
  Selenium 可以驱动浏览器执行一些操作,也就是让浏览器模拟一些动作。下面是一些常用方法的总结。
  方法 | 描述
  -|-|-
  发送键 | 输入文字
  明确 | 明文
  点击 | 点击按钮
  2.特殊互动
  有些交互操作没有具体的执行对象,比如鼠标拖拽、键盘按键等,这些比较复杂的动作是在一个动作链中执行的。此处暂时不用,暂且略过。
  3. 模拟运行 JavaScript
  execute_script() 方法可以模拟运行JavaScript,基本上所有复杂的动作都可以通过执行JavaScript来实现。
  四:获取节点信息
  使用 get_attribute() 方法获取节点的属性。
  使用 text 属性获取节点的文本值。
  使用 id 属性获取节点 id。
  使用 location 属性获取节点在页面上的相对位置。
  使用 tag_name 属性获取标签名称。
  使用 size 属性获取节点的大小。
  五:切换子页面Frame
  一个网页的节点之一是iframe,它是一个子框架,相当于页面的一个子页面。网页打开时,默认是在父Frame中操作。要获取子Frame的节点,需要使用switch_to.frame()方法进行切换。
  使用 switch_to.parent_frame() 获取父页面的内容。
  六、延迟请求
  在 selenium 中,get() 方法会在网页框架加载完成后结束执行。此时如果获取到网页源代码,则可能不是浏览器完全加载的页面。如果有额外的ajax请求,网页源代码可能不会成功。要获取,需要延迟并等待一定的时间,以确保动态网页的所有源代码都加载完毕。
  等待有两种方式,一种是隐式等待,另一种是显式等待。
  1.隐式等待
  隐式等待是一般等待。执行测试时,等待下一步后,使用implicitly_wait(),参数为时间。
  2.显式等待
  隐式等待不是那么好,它们只是指定一个固定的时间,网页的加载时间会受到网络条件的影响。
  这里有一个显式的等待方法,就是指定要搜索的节点,然后指定一个最大等待时间。如果在指定时间内加载,它将返回。如果无法加载,则会抛出异常。
  一个例子如下:
  from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('url地址')
# 先指定最长等待时间为20s
wait = WebDriverWait(browser,20)
# 传入等待条件expected_conditions,这里的presence_of_element_located代表节点出现的意思
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# 按钮等待条件,这里的element_to_be_clickable表示可点击的,10秒内能点击,就成功
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)
  以下是所有等待条件:
  等待条件 | 描述
  -|-|-
  标题是 | 标题是东西
  标题_收录 | 标题收录一些东西
  Presence_of_all_elements_located | 节点是否加载
  visibility_of_element_located | 节点是否可见
  可见性_of | 节点是否可见,传入节点对象
  Presence_of_all_elements_located | 加载所有节点
  text_to_be_present_in_element | 节点文本收录文本
  text_to_be_present_in_element_value | 节点值收录文本
  frame_to_be_available_and_switch_to_it | 负载和开关
  invisibility_of_element_located | 节点不可见
  element_to_be_clickable | 节点可点击
  staleness_of | 判断DOM中是否存在节点,可以判断页面是否刷新过
  element_to_be_selected | 可以选择节点,传入节点对象
  element_located_to_be_selected | 可以选择节点,传入一个定位元组
  element_selection_state_to_be | 传入节点对象和状态,相等返回True,否则返回False
  element_located_selection_state_to_be | 传入定位元组和状态,相等返回True,否则返回False
  alert_is_present | 是否存在警报
  七:前进后退
  Selenium 测试使用 back() 方法返回,并使用 forward() 方法进行。
  八:饼干
  使用 selenium 可以轻松操作 Cookie。
  使用 get_cookies() 方法获取所有 cookie。
  使用 add_cookies() 方法添加 Cookie。
  使用 delete_all_cookies() 和 delete_cookies() 方法删除 Cookie。
  八:标签处理
  访问网页时,标签页是一个一个打开的,标签页也可以在 selenium 中进行操作。
  browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])
  使用 execute_script 方法执行 JavaScript 语句,其中 window_handles 获取所有当前打开的选项卡并返回选项卡的代码名称列表。使用 browser.window_handles[index] 跳转到索引索引对应的选项卡。
  九:捕捉异常
  捕获异常是一种常用的方法。该语句是 try-except-finally。它对于不同的错误非常有用,无论是网络连接、代码运行时超时还是找不到数据。

官方客服QQ群

微信人工客服

QQ人工客服


线