js抓取网页内容(运行chrome的docker容器有什么作用?参数指定远程地址)

优采云 发布时间: 2021-12-09 11:05

  js抓取网页内容(运行chrome的docker容器有什么作用?参数指定远程地址)

  使用scrapy抓取网页时,由于很多网站使用js渲染,无法直接通过获取源码获取需要的网页内容。这时候经常使用selenium驱动的浏览器来获取网页。内容很贴切。但是有一个问题,这种情况下需要在本地安装浏览器,而且不是非root运行,所以chrome服务通过docker方式提供,使用selenium驱动获取呈现的网页内容。

  运行 chrome 的 docker 容器

  通过搜索,我知道docker hub上的容器是selenium/standalone-chrome。如果本地安装了docker,直接在14444端口运行服务。为了安全起见,只允许本地访问。

  docker run -itd --name=chrome -p 127.0.0.1:14444:4444 --shm-size="2g" selenium/standalone-chrome

  参数很简单,只配置了后端操作,端口映射,shm大小

  Selenium 调用远程服务抓取网页

  Selenium 的 webdrive 有一个 Remote 参数来指定远程地址

  from selenium import webdriver

from scrapy.selector import Selector

options = webdriver.ChromeOptions()

options.add_argument('--headless') # example

driver = webdriver.Remote("http://127.0.0.1:14444/wd/hub", options=options)

driver.get("https://www.bobobk.com")

hrefs = Selector(text=driver.page_source).xpath("//article/header/h1/a/@href").extract()

for url in hrefs:

print(url)

#https://www.bobobk.com/833.html

#https://www.bobobk.com/621.html

#https://www.bobobk.com/852.html

#https://www.bobobk.com/731.html

#https://www.bobobk.com/682.html

#https://www.bobobk.com/671.html

#https://www.bobobk.com/523.html

#https://www.bobobk.com/521.html

#https://www.bobobk.com/823.html

#https://www.bobobk.com/512.html

  示例中以这个网站为目标,实际验证中javascript渲染的网站可以完美捕获

  总结

  使用docker提供浏览器服务,可以很好的解决网页被js实时渲染,导致无法获取需要的网页内容的问题。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线