python - Beautifulsoup - 提交表单数据

标签 python post beautifulsoup request

我正在尝试使用 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....

有人能告诉我我做错了什么吗?我不太熟悉请求帖子。 “bis”的表单字段,例如看起来如下:

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

如果我的方法有缺陷,我将不胜感激任何有关如何处理此类网站的提示。

谢谢!

最佳答案

我发现您的请求存在问题。

我的调查给出了以下参数:

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'
]

关于python - Beautifulsoup - 提交表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55341846/

相关文章:

python - Web 抓取不使用 <table> 的表 (Python)

python - 如何获取 HTML 元素坐标?

php - 是否可以将 flask render_template 用于 php 脚本

Python:检测字符串中的实际文本段落

javascript - 更新 : How to send Json Data as a POST request in Meteor using http package

http - 我应该接受所有资源的 POST 方法吗?

python - 使用 Python 和 BeautifulSoup 抓取多个页面

python - 为什么 dict(k=4, z=2).update(dict(l=1)) 在 Python 中返回 None?

python - drawControl 未收到正确的 QStyleOption

mysql - 使用 nodemailer 发送邮件,并将表单数据插入 mysql 数据库