Scrapy - 当href =#时从多个页面刮取数据

时间:2017-05-20 15:39:52

标签: python ajax selenium scrapy webdriver

Scrapy初学者在这里。我试图从多个页面刮取数据。每个页面包含20个条目,然后单击下一个按钮转到下一页。但是,URL不会更改,因为标记为:

<a href="#" onClick="nextPage(2);"> Click me! </a>

此页面是唯一的,因为它不像我找到的许多其他示例那样使用XHR请求。其他一些答案建议通过Chrome / Firefox开发工具监控GET请求,然后复制它们。该站点不会产生XHR请求,而是产生一系列javascript请求(一个AJAX)。

我想使用scrapy转移到下一页(如果可能的话,最好不要使用硒),这样我就可以继续查看已查看的数据了。

这是供参考的网页:http://www.australianschoolsdirectory.com.au/search-result.php

第一次问问。提前谢谢!

1 个答案:

答案 0 :(得分:1)

要获得下一页,您需要制作一个&#39; POST&#39;请求并将form-datapageNum一起作为关键字和页码作为值传递。此代码首先显示5页并在浏览器中显示响应:

>>> from scrapy.http import FormRequest
>>> url = 'http://www.australianschoolsdirectory.com.au/search-result.php'
>>> for i in range(1, 6):
...     payload={'pageNum': str(i)}
...     r = FormRequest(url, formdata=payload)
...     fetch(r)
...     view(response)
...
2017-05-20 21:52:22 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.australianschoolsdirectory.com.au/search-result.php> (r
eferer: None)
True
2017-05-20 21:52:25 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.australianschoolsdirectory.com.au/search-result.php> (r
eferer: None)
True
2017-05-20 21:52:28 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.australianschoolsdirectory.com.au/search-result.php> (r
eferer: None)

如果您需要所有页面,只需更改6到488。