求解题,送奶茶

2022-10-10 12:14:01 +08:00
 catsky

最近自己业余瞎捣鼓,需要解析几个网页提取公开的数据,请大佬指点。如果答案被采纳,我请你喝 2 杯奶茶 😆 ( 50 人民币)

需求

在以下 5 个网站分别输入驾照号码,提取返回的查询信息。可以用 js 或者 ruby(on rails)实现

目标网站 1:

https://www.service.transport.qld.gov.au/checkrego/application/VehicleSearch.xhtml 输入驾照号码样例:6666

目标网站 2:

https://www.vicroads.vic.gov.au/registration/buy-sell-or-transfer-a-vehicle/check-vehicle-registration/vehicle-registration-enquiry (只需要默认选择的 car/truck, Registration number 即可) 输入驾照号码样例:6666

目标网站 3:

https://online.transport.wa.gov.au/webExternal/registration/?0 输入驾照号码样例:6666

目标网站 4:

https://rego.act.gov.au/regosoawicket/public/reg/FindRegistrationPage?3 输入驾照号码样例:6666

目标网站 5:

https://www.transport.tas.gov.au/MRSWebInterface/public/regoLookup/registrationLookup.jsf 输入驾照号码样例:6666

2719 次点击
所在节点    程序员
16 条回复
oxromantic
2022-10-10 12:32:13 +08:00
面向监狱开发 --- 哦,gov.au 啊,告辞
jeesk
2022-10-10 12:34:49 +08:00
@oxromantic 怕个屁, 人在墙内。
mlhadoop
2022-10-10 12:39:39 +08:00
怎么每个网站的数据都不一样的?
catsky
2022-10-10 12:43:47 +08:00
@mlhadoop 对,各个州各自为政,都不统一的。有些接口联邦会统一化让大众用如公司基本信息,但像驾照这种,还比较乱
fulvaz
2022-10-10 12:55:26 +08:00
两杯奶茶是友情价,找朋友吧~
ncepuzs
2022-10-10 13:26:09 +08:00
赞同楼上,这价格你还是找朋友帮忙吧……
catsky
2022-10-10 13:36:52 +08:00
如果两个奶茶不够 也请报价 😄 @fulvaz @ncepuzs
pksyqcj
2022-10-10 15:40:27 +08:00
这个主要是针对几个站分析如何请求的,拿到 html 就可以用 puppeteer 轻松解析 html 了
loopq
2022-10-10 15:47:36 +08:00
用 Python 干过这种,拿到 html 用 beautifulSoup 解析就好了,没什么难的吧,自己可以看看,默认 OP 是程序员啊
PaddyPang
2022-10-10 16:03:23 +08:00
用 Python 吧 看看文档半个小时就学会了
0x666666
2022-10-10 16:09:14 +08:00
用 selenium 可以实现
tonywangcn
2022-10-10 16:52:01 +08:00
提供一个分析思路

1. 输入驾照号码后,点击 search ,network 显示的第一条请求便是,如下图所示。
[]( https://imgur.com/rVsPhCW)

2. 点击 headers ,发现第一条请求通过 post 提交参数,得到一个 302 重定向,看 Response Headers 的 location 部分,即为第二条请求。
[]( https://imgur.com/4aoZRYk)

3. 点击第二条 request 的 response ,搜索 左侧页面中出现的 Registration number ,即 515DF3 ,即可判断出重定向中的请求结果为目标页面
[]( https://imgur.com/21KFxWc)

4. 构造请求,确认上述猜测是否正确,如下图所示右键第一条请求 选择 Copy as cURL
[]( https://imgur.com/Ko0KZFa)

5. 在 Postman 中通过 import -> Raw text -> continue 导入,点击 Send (或直接将 cURL 命令粘贴到命令行工具回车),在返回的 Body 中搜索 Registration number(515DF3) 即可发现如下图中的结果。

[]( https://imgur.com/T5yympW)

整个操作过程无需开启 Javascript 即可实现,换言之,无需任何 headless browser 即可实现 OP 的需求。

下面为具体的实现步骤:

1. 请求 `https://www.service.transport.qld.gov.au/checkrego/application/VehicleSearch.xhtml`
2. Redirect 到 https://www.service.transport.qld.gov.au/checkrego/application/VehicleSearch.xhtml?dswid=7019
3. 拿到 2 中的 cookie ,dswid ,以及 response 中的 `javax.faces.ViewState`
4. 将上述拿到的 cookie ,dswid ,以及 javax.faces.ViewState 将下面的值进行相应替换,请求,即可获取到目标数据
5. 剩下的就是通过 css selector 等技术解析 html 数据了

```
curl --location --request POST 'https://www.service.transport.qld.gov.au/checkrego/application/VehicleSearch.xhtml?dswid=-4097' \
--header 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
--header 'Accept-Language: en-CA,en;q=0.9,fr-CA;q=0.8,fr;q=0.7,zh-TW;q=0.6,zh-CN;q=0.5,zh;q=0.4,en-US;q=0.3,ja-JP;q=0.2,ja;q=0.1,en-GB;q=0.1' \
--header 'Cache-Control: no-cache' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: oam.Flash.REDIRECT=true; JSESSIONID=0001YXWHRoRmC2n_Ur_iDbDJ5GJ:1c05gfnja; LPVID=Q4NmYxMmJhYTc2NmJiZWVj; LPSID-36317183=3ZTOIJh_TpueQjQE9EnFdQ; ADRUM_BTa=R:94|g:37c82fe9-373a-4a38-b0a8-29a58de27da5|n:tmr-prod_2381add0-3320-4317-90dd-93ddbdaa5c0d; SameSite=None; ADRUM_BT1=R:94|i:124181|e:5; ADRUM_BT1=R:94|i:124181|e:4; ADRUM_BTa=R:94|g:43df3ec2-861c-4365-9418-d933ea606284|n:tmr-prod_2381add0-3320-4317-90dd-93ddbdaa5c0d; JSESSIONID=0001EMXzKZ1B4mwI7r7wzhcGF3L:1c05gfnja; SameSite=None' \
--header 'DNT: 1' \
--header 'Origin: https://www.service.transport.qld.gov.au' \
--header 'Pragma: no-cache' \
--header 'Referer: https://www.service.transport.qld.gov.au/checkrego/application/VehicleSearch.xhtml?dswid=-4097' \
--header 'Sec-Fetch-Dest: document' \
--header 'Sec-Fetch-Mode: navigate' \
--header 'Sec-Fetch-Site: same-origin' \
--header 'Sec-Fetch-User: ?1' \
--header 'Upgrade-Insecure-Requests: 1' \
--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36' \
--data-urlencode 'vehicleSearchForm:plateNumber=6666' \
--data-urlencode 'vehicleSearchForm:referenceId=' \
--data-urlencode 'vehicleSearchForm:confirmButton=' \
--data-urlencode 'vehicleSearchForm_SUBMIT=1' \
--data-urlencode 'javax.faces.ViewState=97L3Xac9P5KSdnHwMlK7fmBuOMA9xhe7oQT/dF6FrTQ5Xa+yhup62pPrTc8ozfKyJ9mCORg8uqJlyWeXaifmBg==' \
--data-urlencode 'javax.faces.ClientWindow=-4097'
```
catsky
2022-10-10 18:42:10 +08:00
@tonywangcn 多谢大佬指点 请你喝一杯奶茶 麻烦告知接收地址
tonywangcn
2022-10-11 13:06:42 +08:00
@catsky dG9ueXdhbmcuZGF0YUBnbWFpbC5jb20= base64 通过这个联系
jswxg
2022-10-11 14:14:56 +08:00
楼主问题解决了吗
catsky
2022-10-11 17:05:55 +08:00
@jswxg 进行中,😆

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

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

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

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

© 2021 V2EX