![]() | 1 jybox 2019-02-02 16:14:39 +08:00 「照葫芦画瓢把相应关键字段复制到自己的代码」这就是在走「捷径」嘛,你不走捷径就上 chrome-headless 呀。 |
2 gabon 2019-02-02 16:18:48 +08:00 via Android HTTP 协议 |
3 smyle OP @jybox f12 应付下简单的一次性操作倒是 OK,但有时复杂的网页光是看 f12 发送的那一大堆东西都头大,我是想如果能仿照浏览器的解析、计算、发送过程来做的话,有时应该会比观察 f12 顺手 |
4 dorothyREN 2019-02-02 16:19:43 +08:00 webdriver 多好。 |
5 gabon 2019-02-02 16:20:16 +08:00 via Android 抓包最准 |
6 flight2006 2019-02-02 16:26:10 +08:00 ![]() 爬虫是啥,爬虫是模拟别人网站的前端请求,你在不知道人后端 api 的情况下肯定只能 F12 看人家前端发的真实请求长啥样才能模拟? |
7 smyle OP 不知道怎么在顶层进行补充回复…… 插楼补充下吧: 确实如一些筒子所说,有更好的工具 webdriver、selenium 等 不过这个提问的目的倒不是想解决实际问题,我主要就是想了解浏览器是怎么做的,可以理解为纯粹是好奇而已 |
8 ThirdFlame 2019-02-02 16:39:48 +08:00 读下 html 啊 ,了解下 form |
9 smyle OP 我认为浏览器本质上和爬虫没什么区别,都是数据收发、解析、存储罢了,只不过浏览器需要集合很多工具一起工作 @flight2006 至于我的问题,你可以理解为,我就是一个浏览器,我怎么根据服务器返回的数据,得知下一步发送什么内容? 例如:使用者在网页上填了用户名 abc,OK 了,发送。那我发送表达的时候,用户名的 key 名应该写什么?是 user、username、user_name、name 还是 id ?这个网站也许叫 user,另一个网站也许叫 username 这显然是浏览器通过解析网页内容得到的啊 PS:就用户名、密码而言,我看了下似乎在 html 用户名对应属性里,有一个字段似乎就是要发送的 key。但我不确定是不是 100%都这样 |
10 AX5N 2019-02-02 16:42:03 +08:00 楼主的想问的就是如何智能地模拟浏览器的行为,但实际上你去学一下前端就知道其实没有什么智能的办法来模拟。 比如 username 还是 user_name 这个问题,实际上是人家网站只给你一个 username = 的选项让你去填,并且已经写死当你点击提交的时候发送的是 username 这个变量,所以浏览器根本就不需要知道到底是 username 还是 user_name。因为你就只有一种选择,就像这段代码一样: a =; b = a+5; 现在请你去填 a 的内容 另一种情况则是这样的:有的网站是当你点击提交后,就会调用一个函数,然后这个函数可能会去再调用别的函数来生成一些必要信息,也可能这些信息是在加载网页时候就已经调用函数产生的全局变量,函数直接获取就行。这你咋猜,倒头来还是要手动去找最初调用的那个函数。 |
12 smyle OP @AX5N 比较接近这个意思了 你的意思是说: 所有的内容包括 username 等,某些网站也许不写在 html 里(或者 html 里写一个助记的名字,但最终发送的完全不一样),而是鼠标点击提交后,浏览器后台计算、生成再发送吗? |
13 ThirdFlame 2019-02-02 16:52:56 +08:00 @smyle 除了 html 还有 Javascript |
![]() | 15 crab 2019-02-02 16:58:33 +08:00 有不少 cookies 是 AD 类不需要,有登陆的看响应的 cookies 就可以了。 |
16 smyle OP @AX5N 还想确认一点:是不是所有的 js 调用,追根溯源都来自 html (/css?) 里的某个关键部分?比如点击按钮的 html 属性里有一个调用某 js 函数的 method 也许不是这么做,我就是猜一个可能的例子 还是说连这些通知浏览器发起调用的入口都是完全在后台,前端看不见的? |
18 smyle OP @crab 主要是我发现登录同一个页面后,第一个请求开始可能会带 cookies,但后续自动下载图片等请求可能就是没有 cookie 的了,但就是不清楚浏览器根据什么来判断某个请求要不要带 cookie 当然,这只是不明白的地方之一,看样子还是前端知识太匮乏了 |
![]() | 19 gamexg 2019-02-02 17:27:44 +08:00 @smyle #18 cookie 规则 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 你说的那个情况我怀疑图片是另一个域名,所以不发送 cookie。 |
![]() | 20 lhx2008 2019-02-02 17:37:25 +08:00 via Android 其实就是效率问题,浏览器一秒爬两页就不错了,自己发 HTTP 包一秒至少爬十页。至于为什么效率慢,因为渲染要时间。就像你玩游戏,你如果能不开游戏直接发包玩,就可以代练几十几百个玩家,但是你开客户端玩最多开 10 个。 那么,有没有智能的爬虫呢?也是有的,比如什么火车浏览器,但是说到底还是很难模拟所有情况,还有要高速爬取的话,还要解决代理池,数据清洗等等。所以事情远没有那么简单 |
21 Hieast 2019-02-03 12:14:58 +08:00 via Android 楼主需要去找一两篇讲浏览器架构的文章读一读 |
![]() | 22 megachweng 2019-02-03 16:13:07 +08:00 via iPhone 典型的想的太多,学的太少。必经阶段加油 |