我正在努力寻找一种通用的方法来检测HTML中的表单然后提交。当预先知道给定页面的页面结构时,我们当然有几种选择:
-Selenium / Webdriver(通过填写字段并“单击”按钮)
-手动确定POST查询的形式,然后直接使用urllib2对其进行重构:
import urllib2
import urllib
import lxml.html as LH
url = "http://apply.ovoenergycareers.co.uk/vacancies/#results"
params = urllib.urlencode([('field_36[]', 73), ('field_37[]', 76),
('field_32[]', 82)])
response = urllib2.urlopen(url, params)
或带有请求:
import requests
r = requests.post("http://apply.ovoenergycareers.co.uk/vacancies/#results", data = 'Manager')
r.text
但是,尽管大多数表单都涉及POST请求,一些输入字段和一个提交按钮,但它们在幕后的实现方式差异很大。当要抓取的页面数达到数百时,为每个页面定义自定义表单填充方法是不可行的。
我的理解是Scrapy的主要附加价值是其跟踪链接的能力。我认为这还将包括最终通过表单提交到达的链接。然后可以使用此功能来构建通用的方法来“遵循”表单提交吗?
澄清:对于带有多个下拉菜单的表单,我通常将其保留为默认值,仅填写搜索词输入字段。因此,找到这个领域并“填补它”最终是这里的主要挑战。
最佳答案
链接提取程序无法遵循Scrapy中的表单提交。还有另一种称为FormRequest
的机制,该机制专门用于简化提交表单的过程。
请注意,当提交中涉及JavaScript时,FormRequest
不能处理表单。
关于python - 使用Scrapy检测表格(并填写表格),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35274729/