小弟手上的某个学术项目需要 Linkedin 的数据,抓取特定行业的从业人员信息。我是分两步来做的,第一步先弄到想要爬的人主页的 url,第二步再去挨个挨个抓这些 url 上的信息。
目前第一步已经搞定,可能有几十万条的 url 要抓,但是第二步这里我有点犯难——
我的理解是这样的:领英的个人数据需要登录后才能展示,为了避免我们的账号被封禁的太快(账号是要成本的),我打算建一个账号 cookies 池,用一个进程维护这些 cookies,其他进程每次爬取时每次随机挑选一个 cookies 去模拟登陆,这样可以延长单个账号的使用时间。
但是实验中发现,领英做了反 csrf 攻击的措施,仅用 cookies 是没办法实现模拟登陆的。为此我学了下 csrf 相关知识,发现它的关键参数 loginCsrfParam 、csrf_token 都在网页源码中 hidden 了,也会存储到 cookies 里,可以很容易地拿到。
于是我用 requests 来尝试做模拟登陆,开了一个 Session,把这些关键参数作为表单 post 给领英的登录接口
https://www.linkedin.com/checkpoint/lg/login-submit 后,尝试去 get 我想要抓取的网页,但是还是无法正常显示,get 到的 html 内容为领英网站的加载 gif 。
我开始觉得是我维护的 cookies 和我 post 的 form-data 中的 csrf 相关参数不匹配,导致服务器端识别出我在尝试 csrf 攻击,但是检查之后发现都是匹配的。这就让我感到奇怪了。
我目前想用 requests 来做,不希望用 selenium 做自动化登陆,因为部署和账号池维护做起来比较折腾。
有了解爬虫的前辈能指点下以下问题嘛:
1.领英的反 csrf 是怎么做的,我的姿势对吗?
2.领英是否有其他反爬手段?懂行的朋友能不能指点一二?
3.Google 了一下,网上的领英相关爬虫都陈旧无用了,该上哪里咨询爬虫大佬? stackoverflow 上也没啥有用的建议。
感激不尽!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/728868
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.