【发布时间】:2016-05-18 09:58:46
【问题描述】:
我正在努力寻找一种通用的方法来检测 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 的主要附加值是它能够跟踪链接。我认为这也将包括最终通过表单提交到达的链接。然后可以使用此功能构建通用方法来“跟踪”表单提交吗?
澄清:如果表单有多个下拉菜单,我通常会将它们保留为默认值,并且只填写搜索词输入字段。因此,找到该字段并“填写”最终是这里的主要挑战。
【问题讨论】:
标签: python xpath web-scraping scrapy lxml