提交多个表单并实现分页
Submitting multiple forms in scrapy and achieving pagination
我是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链接(使用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_urls
中的页面时调用它,并且该页面的响应作为参数传递给 parse
方法。
在parse
方法中,您通常使用HtmlXPathSelector
分析(解析(页面,并从该页面收集所需的数据,将其放入Item
中。如果您收集了所需的所有内容,则可以yield
该项目,并且 scrapy 检测到它是一个项目并将其传递给管道。
如果您要解析的页面不包含任何数据(例如,它是一个类别页面(或仅包含您需要的部分数据,并且您在其中发现了指向包含 [其他] 数据的其他页面的链接,则不会yield
项目,而是生成一个包含另一个页面的 URL 和另一个回调的Request
实例。
FormReques
t 是 Request
的一个子类,所以你可以根据需要从解析方法中产生任意数量的 FormRequest
s。
当您最终到达所需的页面时,在相应的解析方法中,您提取数据(使用 HtmlXPathSelector(并从该方法生成一个Item
实例。
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 如何通过引用var Using DataTables来进行分页或排序
- 使用CSS或JavaScript计算分页符的数量
- DataTables-创建自定义分页样式(加载更多样式)
- 在 mongodb 中实现分页
- 提交多个表单并实现分页
- 如何在挖空的“with”绑定中实现分页
- 使用 AngularJS 实现服务器端分页
- jqGrid使用JsonString JsonReader实现服务器端排序分页过滤
- 如何使用剃须刀在Umbraco网站中实现分页搜索
- 如何实现angularJS分页
- 如何在谷歌浏览器的HTML表格中实现分页符
- 在表分类器上实现基本的服务器分页
- 在数据表上实现服务器端分页
- 在AngularJS中使用UIBootstrap实现一个动态分页
- 如何实现带有分页的目录
- 无限滚动分页javascript实现问题
- 使用流星分页实现分页错误
- 如何使用angular ui引导程序在angular js中实现服务器端分页
- 我怎样才能实现这个twbs分页