V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
catsky
V2EX  ›  程序员

求解题,送奶茶

  •  
  •   catsky ·
    catsky · 2022-10-10 12:14:01 +08:00 · 2512 次点击
    这是一个创建于 535 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近自己业余瞎捣鼓,需要解析几个网页提取公开的数据,请大佬指点。如果答案被采纳,我请你喝 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

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

    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
        13
    catsky  
    OP
       2022-10-10 18:42:10 +08:00 via iPhone
    @tonywangcn 多谢大佬指点 请你喝一杯奶茶 麻烦告知接收地址
    tonywangcn
        14
    tonywangcn  
       2022-10-11 13:06:42 +08:00
    @catsky dG9ueXdhbmcuZGF0YUBnbWFpbC5jb20= base64 通过这个联系
    jswxg
        15
    jswxg  
       2022-10-11 14:14:56 +08:00
    楼主问题解决了吗
    catsky
        16
    catsky  
    OP
       2022-10-11 17:05:55 +08:00
    @jswxg 进行中,😆
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3171 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:34 · PVG 20:34 · LAX 05:34 · JFK 08:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.