【发布时间】:2019-07-13 20:56:33
【问题描述】:
我使用请求模块在 python 中创建了一个脚本,以获取在使用此电子邮件africk2@nd.edu 填写表单时显示的一些信息。问题是当我点击搜索按钮时,我可以看到一个包含我想要获取的所有信息的新标签。此外,我在 chrome 开发工具的 Network 部分下的 All 选项卡中看不到任何链接。所以,我对如何使用 requests 模块获取信息感到绝望。
手动填充结果的步骤:
将此电子邮件地址
africk2@nd.edu放在Email address的输入框旁边,然后点击Search按钮。
我试过了:
import requests
from bs4 import BeautifulSoup
url = "https://eds.nd.edu/search/index.shtml"
post_url = "https://eds.nd.edu/cgi-bin/nd_ldap_search.pl"
res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup(res.text,"lxml")
payload = {item['name']:item.get('value','') for item in soup.select('input[name]')}
payload['email'] = 'africk2@nd.edu'
del payload['clear']
resp = requests.post(post_url,data=payload)
print(resp.content)
上面的脚本是错误的方法。但是,我找不到任何想法来获取与该电子邮件相关的信息。
附:我不追求面向硒的解决方案。
【问题讨论】:
-
我很好奇你为什么不寻找硒?因为您可以无头运行 chrome 并拥有一个简单的解决方案,甚至看不到正在使用的浏览器。只是想知道是否没有无头是原因..
-
因为我已经知道如何使用 selenium 实现相同的目标。这是
driver.window_handles可以解决问题的方法。但是,我不知道在这种情况下如何继续使用 requests 模块以实现相同的@Nic Laforge。 -
@MITHU 请看我的回答
-
我同意。问题似乎是您希望抓取的数据正在服务器端呈现。这意味着普通的旧请求模块不会削减它。原因是请求通过在加载后立即从网页中抓取数据来工作。它在加载后不会抓取任何数据。您希望抓取的数据在最初加载(由 JS 或后端语言呈现)后被添加到页面中。因此,您需要一个能够在页面加载后从页面中获取数据的工具。所以是的,我担心硒是最好和最简单的方法。
标签: python python-3.x web-scraping