【发布时间】:2019-01-24 16:39:40
【问题描述】:
我正在为客户开发一个项目,其中包括管理公司目录,直到现在他有几个程序,我做了所有事情,我正处于用他之前管理的信息填充 cms 的阶段我需要从以前的程序中提取它,问题是程序的提供者没有向客户提供访问权限,以便我可以获取信息(他们告诉他他不为此付费并且他可以没有得到信息),我尝试通过网络抓取来做到这一点,但是在进行查询时,返回的信息总是相同的,即程序的登录页面。
我的问题是:
- 如果通过查询我可以填写登录表单(因为客户有他的用户名和密码)并且以某种方式保存了会话,因此能够通过网络抓取或其他方式提取信息
- 或在每个查询中附加用户和邮件身份验证
- 任何其他想法
这些是我想从列表或详细 url 中提取信息的 url:
http://salamantica.com/cms/categories http://salamantica.com/cms/categories/view/1
这是我进行网络抓取时总是返回的那个:
http://salamantica.com/cms/login
我需要帮助,因为如果客户必须手动填写信息,他可能会死于此尝试。
有什么想法吗?
提前致谢。
解决了!!!
有效的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
option = webdriver.ChromeOptions()
option.add_argument(" - incognito")
browser = webdriver.Chrome(executable_path='/path', chrome_options=option)
browser.get('http://salamantica.com/cms/login')
timeout = 5
WebDriverWait(browser, timeout)
browser.find_element_by_id("UserUsername").send_keys("user")
browser.find_element_by_id("UserPassword").send_keys("password")
browser.find_element_by_css_selector('button[type="submit"]').click()
WebDriverWait(browser, timeout)
browser.get('http://salamantica.com/cms/categories/view/1')
WebDriverWait(browser, timeout)
information = browser.find_elements_by_class_name('controls')
[ print(content.text) for content in information ]
【问题讨论】:
-
这是否可以通过正常的网络抓取在很大程度上取决于页面的构建方式。相反,您可能需要运行页面及其 javascript 之类的东西才能登录和访问数据。
-
感谢@KevinB 提供 phantomjs 提示以尝试提取信息。
标签: jquery forms http ssl web-scraping