python - Scrapy:下一个按钮使用 javascript

标签 python selenium-webdriver web-scraping scrapy

我正在尝试从这个网站上抓取 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>

这个分页简直要了我的命...

最佳答案

简而言之,您需要弄清楚 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">

因此,基本上您需要构建一个请求,以使用 'next'move_indicator 值为该表单执行 POST。这可以通过使用 FormRequest 类 ( see the docs ) 轻松完成,例如:

return FormRequest.from_response(response, formname="frm", 
                                 formdata={'move_indicator': 'next'})

此技术在大多数情况下都有效。困难的部分是弄清楚 javascript 代码的作用,有时它可能会被混淆并执行过于复杂的东西以避免被抓取。

关于python - Scrapy:下一个按钮使用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18810850/

相关文章:

python - 如何取消选择pydatatable中特定索引处的行?

python - 确认两个 Pandas 数据帧的相等性?

javascript - 如何在 Ruby 中使用 selenium-webdriver/capybara 截取完整的浏览器页面及其元素?

python - 无法让我的脚本有条件地等待

java - 如何从具有动态值的表中抓取数据?

python - Scrapy - LinkExtractor 和设置 DEPTH_LIMIT 不起作用?

python - 将程序中的 Python Pandas Dataframe 输出合并到一个 Dataframe 中

Python SQL 插入失败

selenium - Jenkins 中的条件构建后步骤(理想情况下没有插件)

java - Firefox 启动等待 45 秒超时