V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
imn1
V2EX  ›  Python

现在爬虫对付脚本构造的网页还有什么方法,除了 selenium

  •  
  •   imn1 · 2021-04-03 17:04:20 +08:00 · 4997 次点击
    这是一个创建于 1314 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前情,爬 baidu image,搜些图片玩玩 learning,发现不少轮子都废了,查了下页面源码,基本是 js 输出数据
    之前就遇到 douban movie 用 js 构造问题,还好爬的东西不多,不急切,弄个 selenium 扔后台降低频率跑就是了

    现在感觉越来越多网页 js 的作用很大,总以调起浏览器方式作用不大,也不好玩(没满足感🐶)
    看看现在有什么新技能,可以纯命令行完成
    第 1 条附言  ·  2021-04-04 17:10:41 +08:00
    我的需求很低,没有爬取大型数据的目的(如#4 所说这是面向监狱编程),只是想把一些重复劳动机械化
    基于此点,以及几个回复的提醒,还是采用实时渲染的方式,目前采用 PyQt5.QWebEngineView
    PyQT 的好处是,只要不调用 show()函数,是不会产生 GUI 窗口,相当于 CLI,降频扔后台运行就行了,反正我也不急,慢慢跑没所谓,还好手册不太难懂,几十行代码,就是 toHtml()的 callback 没理解,稍微脑子卡了一下而已
    只要获取了渲染后的 html,其他事就简单了

    不喜欢 selenium 是因为 webdriver 要跟随版本,因为浏览器是自动更新版本(或者滚动更新),几乎每次跑爬虫,就要先去下载相应版本的 webdriver,很麻烦,其次是每次跑都要调起浏览器,不适合后台静默运行
    21 条回复    2021-04-07 21:43:20 +08:00
    3dwelcome
        1
    3dwelcome  
       2021-04-03 17:11:58 +08:00   ❤️ 1
    用自定义 cef 框架导出渲染后的 render dom tree 。
    首先要明确一点,一些网页用的是 js 返回数据,有些例如 twitter 是 websocket 构建页面,你不上 js 解析执行引擎,根本就没办法完整运行页面。
    你总要带一个 js 和 layout 引擎处理,要不然只有看着返回的 js 代码发呆了。
    dsg001
        2
    dsg001  
       2021-04-03 17:35:25 +08:00   ❤️ 1
    js 如果不加密,直接爬接口

    不好解密就上 headless chrome
    EricXuu
        3
    EricXuu  
       2021-04-03 17:39:16 +08:00 via Android   ❤️ 1
    没满足感就自己造轮子🐶
    LeeReamond
        4
    LeeReamond  
       2021-04-03 17:45:31 +08:00   ❤️ 1
    爬虫爬的好,牢饭吃到饱。没什么意义,现在框架写出的网站都是前端渲染前端路由,不跑无头你能拿到什么数据。然而只要跑无头基本就获得与正常用户一样的使用体验,所以比起爬虫我倒是更关心如何反爬。。
    imn1
        5
    imn1  
    OP
       2021-04-03 18:21:07 +08:00   ❤️ 2
    @LeeReamond #4
    你理解的是商业数据,我只是想把重复劳动机器自动化
    例如要找不同类型车辆的图片,手动一天能存一千张已经算是忍耐力惊人了,但换成自动化工作,一万也不是问题,更何况这种搜图方式,图片都是分布在不同网站,引擎只是获取链接,并不会针对特定网站高频请求
    coolair
        6
    coolair  
       2021-04-03 18:26:36 +08:00 via Android   ❤️ 1
    splash
    LokiSharp
        7
    LokiSharp  
       2021-04-03 20:24:12 +08:00 via Android   ❤️ 1
    直接抓接口爬,更简单了
    omph
        8
    omph  
       2021-04-03 20:56:32 +08:00   ❤️ 1
    微信公众号文章,即使有永久链接,都限爬了
    有什么简单的方法没?
    XIU2
        9
    XIU2  
       2021-04-03 21:28:31 +08:00   ❤️ 1
    我平时会给我经常访问的网站加上 自动无缝翻页(油猴脚本,提取下一页部分内容并插入到当前页面底部),结果接连遇到了好几个 JS 动态生成的网页,搞得我很难受。。。

    网上搜了一圈,基本上只能当场渲染获得成品内容,没有什么简单的方案。。。
    rekulas
        10
    rekulas  
       2021-04-03 21:29:17 +08:00   ❤️ 2
    @dsg001 headless 使用的也是 webdriver 和 selenium 一样

    路过打击一下楼主
    selenium 也并不万能,因为发现 webdriver 会向浏览器写入多项特征数据导致能够被识别,如果目标网站做了对应的防御,爬取难度会非常大,而且这些特征有些是无法移除或修改的,例如 navigator.webdriver,这点深受使用者吐槽,老外都骂 google 做了婊子还要立牌坊,不过 google 应该是为了保证网站的知情权吧

    已经有开发者发起挑战,宣称将基于 chromium 开发无法检测的 webdriver 浏览器
    ysmood
        11
    ysmood  
       2021-04-03 23:05:14 +08:00   ❤️ 2
    lqzhgood
        12
    lqzhgood  
       2021-04-03 23:36:19 +08:00   ❤️ 1
    从 headless 的被防爬角度我提个思路~
    直接 chrome + 插件,就可以完全避开 webdriver 的特征了
    yucongo
        13
    yucongo  
       2021-04-03 23:45:59 +08:00 via Android   ❤️ 1
    playwright, 爬虫新利器
    LeeReamond
        14
    LeeReamond  
       2021-04-04 00:08:18 +08:00   ❤️ 1
    @ysmood 学到了一个好用的反爬方法,感谢
    ysmood
        15
    ysmood  
       2021-04-04 00:15:05 +08:00   ❤️ 1
    @yucongo 从性能和设计可以对比下 rod 和 playwright,这里有详细说明: https://go-rod.github.io/i18n/zh-CN/#/why-rod?id=puppeteer
    omph
        16
    omph  
       2021-04-04 08:09:36 +08:00   ❤️ 1
    @ysmood #15 rod 有没有命令行的版本?这样可以快速做一些小任务,无需 go 开发环境 😃
    ysmood
        17
    ysmood  
       2021-04-04 08:39:46 +08:00   ❤️ 1
    @omph 有一个实验项目,我倒是很想指导一个开发者做相关的开发 https://github.com/go-rod/wayang

    我个人时间比较有限,欢迎有兴趣的同学加入,很早之前就开了 issue 了 https://github.com/go-rod/rod/issues/333
    imn1
        18
    imn1  
    OP
       2021-04-04 17:14:27 +08:00
    谢各位,暂时用 PyQt5.QWebEngineView,效果可以接受
    allanpk716
        19
    allanpk716  
       2021-04-05 00:56:13 +08:00 via iPhone
    @ysmood 刚用你这项目写了下爬虫,挺不错的,比之前用的其他 go 的库好用很多。
    rekulas
        20
    rekulas  
       2021-04-05 09:14:33 +08:00
    @ysmood 感谢大佬提供的 rod,以前试过挺好用的
    不过 rod 是基于 devtools ?如果是那仍然可以被检测到,要破解也没有楼上提到的那么容易,除非能够修改浏览器内核
    空了我会再测试一番
    rekulas
        21
    rekulas  
       2021-04-07 21:43:20 +08:00
    @imn1 浏览器可以禁用更新的,你也可以下载 portable 版本,爬虫浏览器基本不需要更新,配置一次就一直可用,楼上提到的 rod 也自带了全套工具直接 docker 即可使用无需考虑环境了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1035 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:34 · PVG 04:34 · LAX 12:34 · JFK 15:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.