java爬虫抓取动态网页(Selenium+Chrome:运用到爬虫中的思路是什么?)

优采云 发布时间: 2021-09-21 14:10

  java爬虫抓取动态网页(Selenium+Chrome:运用到爬虫中的思路是什么?)

  爬虫:动态网页的处理方法(第2部分)——模拟浏览器行为前言:

  在上一个示例中,我们使用WebKit库自定义浏览器渲染引擎,以便完全控制要执行的行为。如果您不需要如此多的灵活性,那么有一个很好的替代方案来替代selenium,它提供了一个API接口来自动化浏览器

  硒简介:

  Selenium是一种用于测试web应用程序的工具。Selenium测试直接在浏览器中运行,就像真实用户一样。支持市场上几乎所有主流浏览器

  最初,我打算使用selenium+phantom JS的组合,但我发现chrome和Firefox也相继推出了无头浏览器模式,我更喜欢chrome。本文采用硒+铬的组合

  例如:

  适用于爬行动物的想法是:

  以新浪阅读图书节选网站为例。目标是获取列表中每个文章详细页面的地址。直接参见示例代码:

  # coding=utf-8

import time

from selenium import webdriver

class SinaBookSpider(object):

# 创建可见的Chrome浏览器, 方便调试

driver = webdriver.Chrome()

# 创建Chrome的无头浏览器

# opt = webdriver.ChromeOptions()

# opt.set_headless()

# driver = webdriver.Chrome(options=opt)

driver.implicitly_wait(10)

total = 1526 # 预先计算的总数据量

count = 0 # 已爬取的数据量

# 记录解析以及翻页位置

location = 0

click_times = 0

def run(self):

"""

开始爬虫

:return:

"""

# get方式打开网页

self.driver.get("http://book.sina.com.cn/excerpt/rwws/")

self.parselist()

while self.count < self.total:

if self.click_times is 2:

self.driver.find_element_by_css_selector(&#39;#subShowContent1_page > span:nth-child(6) > a&#39;).click()

# 等待页面加载完成

time.sleep(5)

self.click_times = 0

self.location = 0

else:

self.driver.find_element_by_css_selector(&#39;#subShowContent1_loadMore&#39;).click()

# 等待页面加载完成

time.sleep(3)

self.click_times += 1

# 分析加载的新内容,从location开始

self.parselist()

self.driver.quit()

def parselist(self):

"""

解析列表

:return:

"""

divs = self.driver.find_elements_by_class_name("item")

for i in range(self.location, len(divs)):

link = divs[i].find_element_by_tag_name(&#39;a&#39;).get_attribute("href")

print link

self.location += 1

self.count += 1

print self.count

if __name__ == &#39;__main__&#39;:

spider = SinaBookSpider()

spider.run()

  代码地址:动态web进程--GitHub

  如果要实际运行上述代码,请确保在运行之前安装了与浏览器版本对应的驱动程序,并将其正确添加到环境变量中

  这里可以看到对这三种方法的解释:Python selenium——必须能够使用selenium进行等待,以及对这三种等待方法的解释——gray和blue博客

  总结:

  在这里,我们介绍两种动态页面处理方法:

  做一个简单的比较:

  使用哪种方法取决于爬行动物活动的具体情况:

  就我个人而言,我认为应该尽可能避免模拟浏览器的方法,因为浏览器环境会消耗大量内存和CPU,这可以作为短期解决方案。此时,长期性能和可靠性并不重要;作为一个长期的解决方案,我将尽最大努力网站进行逆向工程

  欢迎指出本文中的任何错误或不足之处

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线