2012-05-21 1 views
0

Я новичок в scrapy, я очищаю сайт на основе работы, который состоит из позиций, то есть когда мы нажимаем на позицию, открывается новая страница, которая состоит из данных, которые мне нужны выборки.Отправка нескольких форм в scrapy и достижение разбивки на страницы

Например, страница содержит таблицу со следующим форматом,

 Job Title     Full/Part Time        Location/Affiliates 
1. Accountant     Full Time       Mount Sinai Medical Center (Manhattan) 
2. Accountant     Full Time       Mount Sinai Medical Center (Manhattan) 
3. Admin Assistant    Full Time       Mount Sinai Hospital (Queens) 
4. Administrative Assistant  Full Time      Mount Sinai Medical Center (Manhattan) 


Page: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 

Всех названий должностей, упомянутых выше, JavaScript генерируются ссылки, я должен представить все JavaScript ссылку со значениями (Finded использования поджигателя) . Как подать несколько форм за раз, или как написать один метод, который циклически перебирает все ссылки заголовка задания, чтобы мы могли получать данные из каждой ссылки названия работы.

Также мне нужно разбивать страницы на все страницы, упомянутые выше, когда я нажимаю на странице 2, открывается страница, состоящая из одного и того же формата таблицы с разными должностями и т. Д., Как я могу разбивать страницы на эти страницы.

Мой код:

class MountSinaiSpider(BaseSpider): 
    name = "mountsinai" 
    allowed_domains = ["mountsinaicss.igreentree.com"] 
    start_urls = [ 
     "https://mountsinaicss.igreentree.com/css_external/CSSPage_SearchAndBrowseJobs.ASP?T=20120517011617&", 
    ] 

# This method is for submitting starting page with some values for clicking "Find Jobs" 
    def parse(self, response): 
     return [FormRequest.from_response(response, 
             formdata={ "Type":"CSS","SRCH":"Search Jobs","InitURL":"CSSPage_SearchAndBrowseJobs.ASP","RetColsQS":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","RetColsGR":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","ResultSort":"" }, 
             callback=self.parse_main_list)] 

    def parse_main_list(self, response): 
     return [FormRequest.from_response(response, 
             formdata={ "Key":"","Type":"CSS","InitPage":"1","InitURL":"CSSPage_SearchAndBrowseJobs.ASP","SRCH":"earch Jobs","Search":"ISNULL(Requisition.DatePostedExternal, '12/31/9999')¤BETWEEN 1/1/1753 AND Today¥","RetColsQS":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","RetColsGR":"Requisition.Key¤Requisition.JobTitle¤Requisition.fk_Code_Full_Part¤[Requisition.fk_Code_Full_Part]OLD.Description(sysfk_Code_Full_PartDesc)¤Requisition.fk_Code_Location¤[Requisition.fk_Code_Location]OLD.Description(sysfk_Code_LocationDesc)¤Requisition.fk_Code_Dept¤[Requisition.fk_Code_Dept]OLD.Description(sysfk_Code_DeptDesc)¤Requisition.Req¤","ResultSort":"[sysfk_Code_Full_PartDesc]" }, 
             dont_click = True, 
             callback=self.parse_fir_pag_urls)] 


    def parse_fir_pag_urls(self, response): 
     print response' 

ответ

1

Основная функция ваш обратный вызов. Например, метод parse. Он вызывается, когда загружается страница с start_urls, и ответ с этой страницей передается методу parse в качестве параметра.

В методе parse вы анализируете (анализируете) страницу, используя HtmlXPathSelector, и собираете необходимые данные с этой страницы, помещая ее в Item. Если вы собрали все, что вам понадобилось, то yield этот предмет и scrapy обнаруживает, что это предмет и передает его в конвейеры.

Если страница, которую вы обрабатываете, не содержит никаких данных (например, это страница категории) или только часть необходимых данных, и вы нашли на ней ссылку на другие страницы с [дополнительным ], а не yield, но вы получаете экземпляр Request с URL-адресом другой страницы и другим обратным вызовом.

FormReques t является подклассом Request, поэтому вы можете получить как можно больше FormRequest s из метода анализа.

Когда вы, наконец, достигли необходимой страницы, в соответствующем синтаксическом анализе вы извлекаете данные (используя HtmlXPathSelector) и получаете экземпляр Item из метода.

:
+0

: Спасибо за ответ, как можно достичь разбивки на страницы, тогда –

+0

В обратном вызове, который анализирует страницу результатов поиска, вы получите еще один «FormRequest» с данными, необходимыми для получения следующей страницы и обратного вызова к тому же методу 'parse'. – warvariuc

+0

: Спасибо, что у меня есть концепция этого, так или иначе, я могу дать мне немного пример, чтобы я мог организовать его для более гибкого. –

Смежные вопросы