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
karlxu
V2EX  ›  Python

python 里面要抓去页面上 ajax 返回的数据用哪个库?

  •  
  •   karlxu · 2015-09-17 11:43:21 +08:00 · 2941 次点击
    这是一个创建于 3340 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我有个生成结果的页面,这个页面里有 ajax ,现在用 urllib2 抓去的时候直接给我返回静态页面了,里面都是没有数据的,只有个壳。。。
    14 条回复    2015-09-18 18:38:37 +08:00
    exoticknight
        1
    exoticknight  
       2015-09-17 11:49:25 +08:00
    跟普通请求一样的库
    你去看看代码中的 ajax 请求的地址、方法和参数是什么
    ccbikai
        2
    ccbikai  
       2015-09-17 12:15:00 +08:00
    User-Agent 注意一下, 再看看参数有没有什么特别的
    hahasong
        3
    hahasong  
       2015-09-17 12:25:08 +08:00
    request
    cloverstd
        4
    cloverstd  
       2015-09-17 12:40:08 +08:00   ❤️ 1
    我想应该是 cookies 没带上
    想简单就用 requets 的 session
    或者用 urllib2 自己处理 cookies
    WKPlus
        5
    WKPlus  
       2015-09-17 14:25:36 +08:00   ❤️ 1
    ajax 是另外一次请求,你需要发看看 ajax 发了什么请求,然后直接发那个请求就好了。
    当然对于 ajax 请求,服务器还可能验证其他的,比如 cookie 、 ua 之类的
    mulog
        6
    mulog  
       2015-09-17 16:44:34 +08:00   ❤️ 1
    你要是只抓那一两个页面 可以自己去看看那个 ajax 请求是什么 然后去抓那个请求就好了
    如果是数量比较多或者要抓取的页面不确定 那么你可能需要 Selenium
    CYKun
        7
    CYKun  
       2015-09-17 17:27:25 +08:00
    selenium ,这是一个大坑
    Ouyangan
        8
    Ouyangan  
       2015-09-17 19:14:02 +08:00
    @cloverstd 一般是可以自动维护 cookie 吧
    cloverstd
        9
    cloverstd  
       2015-09-17 19:29:02 +08:00
    @Ouyangan urllib2 不能,得手动维护
    ljbha007
        10
    ljbha007  
       2015-09-17 19:43:49 +08:00
    注意 cookie, user-agent
    还有个 x-requested-with 的 header
    say2old
        11
    say2old  
       2015-09-18 13:50:14 +08:00
    你这个问题和用哪个库无关。请先用 Firefox 或者 Chrome 截获 Ajax 请求 API 的地址,以及 header, body, cookie 所有相关信息。然后再用 urllib2 去模拟这个请求拿数据。除了 urllib2 ,可以考虑用 python 的 requests 包,把 http 访问的相关操作封装的很好,很好用
    zog
        12
    zog  
       2015-09-18 15:26:40 +08:00
    这个功能不是爬虫。叫浏览器模拟。主流的方案用 selenium ,非主流的方案用 Ghost.py
    sinux
        13
    sinux  
       2015-09-18 16:50:42 +08:00
    @zog 非主流 Ghost.py 23333333
    zog
        14
    zog  
       2015-09-18 18:38:37 +08:00
    @sinux 哈哈。我推荐用 selenium , selenium 模拟网页操作的驱动叫做 webDriver ,可以兼容挺多客户端, chrome,firefox,phantomJS 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4733 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:51 · PVG 17:51 · LAX 01:51 · JFK 04:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.