Python Сообщение запроса не отвечает должным образом на корейском веб-сайте - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь удалить некоторые данные с корейского сайта о товарах.

На веб-сайте отображаются общие данные, такие как дата прибытия, дата отдела, название материнского судна go судов.

Ссылка на веб-сайт

Черная кнопка справа - это кнопка поиска.

Для получения от нее данных , необходимо установить некоторые переключатели и нажать кнопку поиска. ответ был простой страницей без запроса на отправку.

Это запрос на отправку

POST /Berth_status_text_servlet_sw_kr HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Referer: http://info.bptc.co.kr:9084/content/sw/frame/berth_status_text_frame_sw_kr.jsp
Accept-Language: en-US,en;q=0.7,ko;q=0.3
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Content-Length: 40
Host: info.bptc.co.kr:9084
Pragma: no-cache
Connection: close

v_time=month&ROCD=ALL&ORDER=item2&v_gu=S

И это то, что я сделал в Python

from bs4 import BeautifulSoup
import requests

params ={'v_time': 'month',
         'ROCD': 'ALL',
         'ORDER': 'item2',
         'v_gu': 'S'}


response = requests.post(url, data = params)

soup = BeautifulSoup(response.content,"html")

print(soup)

Я пытался поместить кодировку и другие вещи в заголовки, как показано ниже

response = requests.post(url, data = params, 
                         headers={'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
                             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko', 
                                  'Content-type': 'application/x-www-form-urlencoded; text/html; charset=euc-kr',
                                  'Accept-Language': 'en-US,en;q=0.7,ko;q=0.3'
                                 })

Это тоже не сработало.

Коды отлично работают на других веб-сайтах, так что я думаю, что это что-то связанное с корейскими характеристиками c.

Я пытался найти решение проблемы, но мне не повезло.

Не могли бы вы мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

Ваш подход правильный. Ответ возвращает html, и вам необходимо преобразовать его в более удобный формат. Следующий код преобразует таблицу из ответа html в список, если dicts:

from bs4 import BeautifulSoup
import requests

params = {"v_time": "month", "ROCD": "ALL", "ORDER": "item2", "v_gu": "S"}


response = requests.post(
    "http://info.bptc.co.kr:9084/Berth_status_text_servlet_sw_kr", data=params
)

soup = BeautifulSoup(response.content, features="html.parser")
keys = [th.get_text(strip=True) for th in soup("th")]
data = [
    {key: value.get_text(strip=True) for key, value in zip(keys, row("td"))}
    for row in soup("tr")
]
print(data)

Выводит:

[
    {
        "S/H": "0",
        "모선항차": "DPYT-21",
        "반입 마감일시": "",
        "선박명": "PEGASUS YOTTA",
        "선사": "DYS",
        "선석": "2",
        "선적": "0",
        "양하": "0",
        "입항 예정일시": "2020/06/08 21:00",
        "입항일시": "",
        "전배": "",
        "접안": "P",
        "출항 예정일시": "2020/06/09 11:00",
        "출항일시": "",
        "항로": "NCK",
    }
    ...
]
...