Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在scrapy中提交多个表单并实现分页_Javascript_Python_Scrapy - Fatal编程技术网

Javascript 在scrapy中提交多个表单并实现分页

Javascript 在scrapy中提交多个表单并实现分页,javascript,python,scrapy,Javascript,Python,Scrapy,我是新的刮,我刮一个基于工作的网站,其中包括职位,也就是说,当我们在职位上点击一个新的页面将被打开,其中包括我需要获取的数据 例如,页面包含以下格式的表 Job Title Full/Part Time Location/Affiliates 1. Accountant Full Time Mount S

我是新的刮,我刮一个基于工作的网站,其中包括职位,也就是说,当我们在职位上点击一个新的页面将被打开,其中包括我需要获取的数据

例如,页面包含以下格式的表

      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链接(使用firebug查找)。如何一次提交多个表单,或者如何编写一个方法循环所有职位链接,以便我们可以从职位的每个链接获取数据

此外,我还需要对上面提到的所有页面进行分页,当我单击第2页时,会打开一个页面,该页面由相同的表格格式和不同的工作位置组成,等等,我如何才能以scrapy方式对这些页面进行分页

我的代码是

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'

关键函数是回调函数。例如
parse
方法。当下载了
start\u url
中的页面时,将调用该函数,并将该页面的响应作为参数传递给
parse
方法

parse
方法中,您通常使用分析(解析)页面,并从该页面收集所需的数据,将其放入
项中。如果你收集了你需要的所有东西,你可以
产生
这个项目,而scrapy会检测到它是一个项目并将它传递给管道

如果您正在解析的页面不包含任何数据(例如,它是一个类别页面)或仅包含您需要的部分数据,并且您在该页面上找到了指向其他页面的链接(带有[附加]数据),而不是
yield
ing一个项目,那么您将生成一个
Request
实例,其中包含另一个页面的URL和另一个回调

formrequues
t是
Request
的子类,因此您可以根据需要从解析方法中生成任意数量的
FormRequest
s


当您最终到达所需页面时,在相应的解析方法中提取数据(使用HtmlXPathSelector),并从该方法中生成一个
实例。

:感谢您的回复,我如何在解析搜索结果页面的回调中实现分页,生成另一个
FormRequest
,其中包含获取下一页所需的数据,并回调到相同的
parse
方法:非常感谢,我知道了这个概念,无论如何,你可以给我提供一个小例子,以便我可以更灵活地安排它。