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

想请教大家一个关于 web 请求或者说爬虫方面的问题

  •  
  •   lic2zac · 2020-09-10 15:02:35 +08:00 · 1674 次点击
    这是一个创建于 1560 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟是做 python 爬虫的,用的是大家很熟悉的库 requests, 今天遇到一个很神奇的现象,在爬取一个国外网站的过程中, 它有 xx.cnxx.com 这两个域名, 然后我在并发的请求 AB 两个商品数据时发生了以下状况(这几个情况我试了很多遍, 都是这样)

    1. 用同一个 session 并发请求 xx.com/Axx.com/B 的时候没有问题

    2. 用同一个 session 并发请求 xx.cn/Axx.cn/B 的时候发现出现了 A 的响应数据给了 B 的请求, B 的响应数据给了 A 的请求(但是大部分时候都是正确的,应该也和反爬无关)

    3. 每个请求单独生成一个 session, 并发请求 xx.com/Axx.com/B 的时候没有问题, 并发请求 xx.cn/Axx.cn/B 也没有问题

    我想问的是:

    1. 会不会是他们.cn 和.com 用的技术不一样, 导致.cn 的有这个问题?

    2. web 服务会有 bug 导致出现这个问题么?

    感谢大家 0.0

    4 条回复    2020-09-10 17:24:38 +08:00
    kop1989
        1
    kop1989  
       2020-09-10 15:28:11 +08:00
    估计是.cn 的服务器端是一个壳,通过 http 接口再去.com 的服务器去取结果。
    但肯定这过程中存在异步转同步的操作,比如.com 中有个针对.cn 的请求缓存队列。
    然后这个队列的返回是以 sessionkey 或者说 sessionID 或者等等特征 id 作为唯一值的。
    lz 用请求工具直接调接口,导致特征 id 不唯一,就会出现内存泄漏的情况。
    kop1989
        2
    kop1989  
       2020-09-10 15:36:53 +08:00
    @kop1989 #1 修正一下,“但肯定这过程中存在异步转同步的操作” =》异步转同步再异步
    lic2zac
        3
    lic2zac  
    OP
       2020-09-10 16:48:00 +08:00
    @kop1989 如果真是这样做的确实有可能出现这个问题, 不过 cn 返回的中文数据,com 返回的是英文数据,应该不太可能用同一个 com 的接口吧
    kop1989
        4
    kop1989  
       2020-09-10 17:24:38 +08:00
    @lic2zac #3 有可能是同一个数据链路层,然后做的国际化。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4250 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.