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

2020-09-10 15:02:35 +08:00
 lic2zac

小弟是做 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

1679 次点击
所在节点    Python
4 条回复
kop1989
2020-09-10 15:28:11 +08:00
估计是.cn 的服务器端是一个壳,通过 http 接口再去.com 的服务器去取结果。
但肯定这过程中存在异步转同步的操作,比如.com 中有个针对.cn 的请求缓存队列。
然后这个队列的返回是以 sessionkey 或者说 sessionID 或者等等特征 id 作为唯一值的。
lz 用请求工具直接调接口,导致特征 id 不唯一,就会出现内存泄漏的情况。
kop1989
2020-09-10 15:36:53 +08:00
@kop1989 #1 修正一下,“但肯定这过程中存在异步转同步的操作” =》异步转同步再异步
lic2zac
2020-09-10 16:48:00 +08:00
@kop1989 如果真是这样做的确实有可能出现这个问题, 不过 cn 返回的中文数据,com 返回的是英文数据,应该不太可能用同一个 com 的接口吧
kop1989
2020-09-10 17:24:38 +08:00
@lic2zac #3 有可能是同一个数据链路层,然后做的国际化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX