[爬虫]请教各位高手,除了 Seleium 的方法,还有什么现成轮子方法可以获得渲染后的网页代码?

wcdmayb 2019-7-26 142

在学习和使用的过程中,我是使用 Seleium+chromedriver 去 driver.page_source 获得渲染后的 html 代码,不知道为什么,用 chromedriver 去 get 网页,webdriver 通常一个页面需要 1~2 分钟才能结束进程得到 html 代码,一两个页面没什么问题,现在批量,就很花时间(这个现象好像也不少人跟我一样的情况,我换电脑,换 chromedriver 版本,甚至换个城市换个运营商都是这样,笑~)
回到问题本身,我其实就是需要找其它什么轮子,可以去获取一个渲染后的页面 html ?(渲染就是鼠标把网页从顶部滚到底部,js 执行完了,网页就渲染好了,不需要其它什么操作)

#使用 Chrome 获取网页代码成 Strdef GetChromeLinkSourcetoStr(link):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('blink-settings=imagesEnabled=false')
    driver = webdriver.Chrome(options=options)    wait = WebDriverWait(driver, 10)
    driver.maximize_window()
    driver.get(link)
    tmpStr = driver.page_source    return tmpStr


最新回复 (26)
  • wang765 2019-7-26
    引用 2
    加上这个试试。
    options.add_argument('--no-proxy-server')
  • 清水常流 2019-7-26
    引用 3
    Puppeteer
  • fs8908336 2019-7-26
    引用 4
    可以用 splash,这个是异步的,比 selenium 快吧,还可以试试 Phantom JS 这种无界面浏览器
    不过如果每个页面要 1~2 分钟才能得到代码,应该不是框架的问题吧……
  • 海峰 2019-7-26
    引用 5
    你去看看要爬的网页有没有引用墙外的资源,如果有的话,可能这就是加载慢的原因了。另外可以装上广告屏蔽插件再试试。
  • 张三 2019-7-26
    引用 6
    可以改浏览器参数,只是你不会。
    get 方法默认是阻塞到浏览器加载完才向下执行,如果加载失败这个窗口也用不了。但是有可能浏览器已经加载出想要的内容,还是没停下,这时候想要操作浏览器就必须改个参数。晚点发上来
  • 蓝洛水深 2019-7-26
    引用 7
    Puppeteer。但是真心不会写 node,现在是大部分工作是 python+selenium 实现的,部分限制 selenium 的功能用 puppeteer
  • bob1987 2019-7-26
    引用 8
    如果是 python 可以考虑下 pyspider
  • siaga 2019-7-26
    引用 9
    我记得我个日本老哥写了一个 py 版本的
  • 果果 2019-7-26
    引用 10
    python 有 pyppeteer 啊 为啥你们都说都推荐去写 node 至于速度问题 不至于要 1-2 分钟吧
    附: http://bb.jaho.fun/Pyppeteer.html
    防踩坑
  • pxy185 2019-7-26
    引用 11
    requests-html,集成 pyppeteer
  • 861688 2019-7-26
    引用 12
    selenium,设置不加载图片之类的东西,应该很快的
  • irony 2019-7-26
    引用 13
    selenium 是不是停好久了
    puppeteer 挺香的
  • xihuheyi 2019-7-26
    引用 14
    有 selenium 写爬虫从始至终都是很傻的行为吧, phantomjs 作者放弃开发了, selenium 还活着

    楼主直接用 chrome 远程调试那个 cdp 协议吧, chrome devtools protocol
    简单的用 http/socket 请求就可以操作 chrome, 用 js 实现不断翻页, 用 cdp 里的 Network 截取流量判断是否最后一页

    你不给个例子, 也不好给你看看示例代码
  • ramiko 2019-7-26
    引用 15
    还是 puppeteer 吧 是 chrome 团队维护的靠谱点
  • aidongwei 2019-7-26
    引用 16
    我使用的是 splash, 异步配异步
  • skywing 2019-7-26
    引用 17
    splash
  • 35954514 2019-7-26
    引用 18
    如果你实在不想写 node,找人写个 puppeteer 打开网页返回 html 的服务也没几行

    不过里面出错你无法 debug
  • gyjys43043 2019-7-26
    引用 19
    puppeteer
  • 卡忙卑鄙 2019-7-26
    引用 20
    你先浏览器正常加载一下看看多久能加载完好吗
  • poppin2006 2019-7-26
    引用 21

    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    desired_capabilities = DesiredCapabilities.CHROME # 修改页面加载策略
    # none 表示将 br.get 方法改为非阻塞模式,在页面加载过程中也可以给 br 发送指令,如获取 url,pagesource 等资源。
    desired_capabilities["pageLoadStrategy"] = "none"


    driver = webdriver.Chrome(chrome_options=chrome_options,
    executable_path=chrome_driver_path,
    desired_capabilities=desired_capabilities)
    拿去吧。
  • poctopus 2019-7-26
    引用 22
    个人用 splash,感觉不好用,看了楼上现在马上去试试 pyppeteer
  • Pyfq 2019-7-26
    引用 23
    pyppeteer 无法在 headless 下载文件,请问怎么解决。。
  • Limu 2019-7-26
    引用 24
    不是很多加载都是 xhr 请求来的么 0.0
  • 钓鱼岛 2019-7-26
    引用 25
    https://github.com/getgauge/taiko
    这个是 ThoughtWorks 出的一款 nodejs 的测试工具,本质上是无头浏览器。
    供参考。
  • wo31400 2019-7-26
    引用 26
    请教一下大家,pyppeteer 怎么在多线程下调用,想用这个替代 selenium,但在多线程下调用总是会报错,错误是需要运行在主线程。
  • hoodhmy 2019-7-26
    引用 27
    Puppeteer+1
    有个需求要对网页的某个区域生成缩略图就是用 Puppeteer 实现的,时间大概在 700ms 至 3000ms 之间
    不知道是不是服务器性能差异的问题,感觉 windows 比 linux 速度要快一些
返回
发新帖