我正试图从这个网站上搜集http://saintbarnabas.hodesiq.com/joblist.asp?user_id= 我希望得到所有的RN ...我可以抓取数据,但无法继续下一页 因为它的JavaScript。我尝试阅读其他问题,但我没有得到它。这是我的代码
class MySpider(CrawlSpider):
name = "commu"
allowed_domains = ["saintbarnabas.hodesiq.com"]
start_urls = ["http://saintbarnabas.hodesiq.com/joblist.asp?user_id=",
]
rules = (Rule (SgmlLinkExtractor(allow=('\d+'),restrict_xpaths=('*'))
, callback="parse_items", follow= True),
)
下一个按钮显示为
<a href="Javascript: Move('next')">Next</a>
这个分页让我痛苦......
答案 0 :(得分:4)
简而言之,您需要确定Move('next')
的作用并在代码中重现该内容。
对网站的快速检查表明功能代码是:
function Move(strIndicator)
{
document.frm.move_indicator.value = strIndicator;
document.frm.submit();
}
document.frm
是名称为“frm”的表单:
<form name="frm" action="joblist.asp" method="post">
因此,基本上您需要构建一个请求,以POST
为move_indicator
的值'next'
为该表单执行FormRequest
。这可以通过使用return FormRequest.from_response(response, formname="frm",
formdata={'move_indicator': 'next'})
类(see the docs)轻松完成,例如:
{{1}}
这种技术在大多数情况下都有效。困难的部分是弄清楚javascript代码是什么,有时它可能会被混淆并执行过于复杂的东西,以避免被刮掉。