Я изо всех сил пытаюсь найти общий подход к обнаружению формы в HTML и затем ее отправку. Когда структура страницы знать заранее для данной страницы, мы, конечно, есть несколько вариантов:Обнаружение форм (и их заполнение) Scrapy
- Селен/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 - его способность следовать ссылкам. Я предполагаю, что это также будет включать ссылки, в конечном итоге полученные через форму представления. Может ли эта способность использоваться для создания общего подхода к «следующему» представлению формы?
CLARIFICATION: В случае формы с несколькими раскрывающимися меню, я обычно оставляю их по умолчанию и заполняю только поле ввода поискового запроса. Поэтому найти это поле и «заполнить его» в конечном итоге является главной проблемой здесь.
Я не знал, что 'lxml' имел возможности обнаружения и отображения формы. Я думаю, что мне нужно будет сделать для каждой формы, с которой я сталкиваюсь, используйте 'lxml.html.submit_form()', чтобы отправить форму со всеми полями, оставленными пустыми, а затем очистить результирующую страницу для ключевого слова, а не пытаться определить это поле в форме - это поле ключевого слова. – Pyderman