Beautifulsoup - Отправить данные формы - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь программно загрузить (открыть) данные с веб-сайта, используя BeautifulSoup.

Веб-сайт использует php-форму, где вам необходимо предоставить входные данные, а затем вывести полученные ссылки, по-видимому, в этой форме.

Мой подход был следующим

Шаг 1: опубликовать данные формы через запрос

Шаг 2: парсинг полученных ссылок через BeautifulSoup

Однако, похоже, что это не работает / я делаю неправильно, так как метод post, кажется, не работает, и Шаг 2 даже не возможен, так как нет доступных результатов.

Вот мой код:

from bs4 import BeautifulSoup
import requests

def get_text_link(soup):
    'Returns list of links to individual legal texts'
    ergebnisse = soup.findAll(attrs={"class":"einErgebnis"})
    if ergebnisse:
        links = [el.find("a",href=True).get("href") for el in ergebnisse]
    else:
        links = []
    return links

url = "https://www.justiz.nrw.de/BS/nrwe2/index.php#solrNrwe"

# Post specific day to get one day of data
params ={'von':'01.01.2018', 
     'bis': '31.12.2018',
     "absenden":"Suchen"} 
response = requests.post(url,data=params)
content = response.content
soup = BeautifulSoup(content,"lxml")

resultlinks_to_parse = get_text_link(soup) # is always an empty list
# proceed from here....

Может кто-нибудь сказать, что я делаю не так. Я не очень знаком с постом запроса. Поле формы для "бис", например выглядит следующим образом:

<input id="bis" type="text" name="bis" size="10" value="">

Если бы мой подход был ошибочным, я бы оценил любой намек, как работать с такого рода сайтом.

Ой!

1 Ответ

1 голос
/ 26 марта 2019

Я обнаружил, в чем проблема в ваших запросах.

Мое расследование дает следующие параметры:

gerichtst:
yp:
gerichtsbarkeit:
gerichtsort:
entscheidungsart:
date:
von:    01.01.2018
bis:    31.12.2018
validFrom:
von2:
bis2:
aktenzeichen:
schlagwoerter:
q:
method: stem
qSize:  10
sortieren_nach: relevanz
absenden: Suchen
advanced_search: true

Я думаю, что параметр qsize обязателен для вашего запроса POST Итак, вы должны заменить свои параметры на:

params = {
        'von':'01.01.2018',
        'bis': '31.12.2018',
        'absenden': 'Suchen',
        'qSize': 10
        }

Делая это, вот мои результаты, когда я печатаю resultlinks_to_parse

print(resultlinks_to_parse)

ВЫВОД:

[
'http://www.justiz.nrw.de/nrwe/lgs/detmold/lg_detmold/j2018/03_S_69_18_Urteil_20181031.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/10_Sa_1122_17_Urteil_20180126.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/13_TaBV_10_18_Beschluss_20181123.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/10_Sa_1810_17_Urteil_20180629.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/10_Sa_1811_17_Urteil_20180629.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/11_Sa_1196_17_Urteil_20180118.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/11_Sa_1775_17_Urteil_20180614.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/11_SaGa_9_18_Urteil_20180712.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/12_Sa_748_18_Urteil_20181009.html',
'http://www.justiz.nrw.de/nrwe/arbgs/hamm/lag_hamm/j2018/12_Sa_755_18_Urteil_20181106.html'
]
...