如何使用Scrapy爬网具有分页功能的网站?

时间:2013-12-04 08:18:19

标签: python scrapy

我正在尝试抓取一个有分页的网站。如果我点击页面底部的“下一步”按钮,将生成新项目。我的scrapy程序无法获取动态数据。有没有办法可以获取这些数据?

下一个按钮的HTML如下所示

<div id="morePaginationID">

<a href="javascript:void(0);" onclick="lazyPagingNew('db')"></a>

和我的蜘蛛

class ExampleSpider(CrawlSpider):

    name = "example"
    domain_name = "example.com"
    allowed_domains = ["example.com"]
    start_urls = ["http://example.com/beauty/90?utm_source=viewallbea"]
    rules = ( Rule(SgmlLinkExtractor(allow=('.*',),restrict_xpaths=('//div[@id="morePaginationID"]',)), callback = "parse_zero" , follow= True), )
    def parse_zero(self,response):
        hxs = HtmlXPathSelector(response)
        paths = hxs.select('//div[@id="containerDiv"]/div[@id="loadFilterResults"]/ul[@id="categoryPageListing"]/li')
        m = len(paths)
        for i in range(m):

            item = ExampleItem()

            item["dealUrl"] = paths[i].select("figure/figcaption/a/@href").extract()[0]

            url = str(item["Url"])
            yield Request(url, callback=self.parselevelone, meta={"item":item})
        spider = ExampleSpider()
    def parselevelone(self, response):
        hxs = HtmlXPathSelector(response)
        item = response.meta["item"]
        item["Title2"] = hxs.select('//div[@class="fullDetail"]/div/figure/figcaption/h2/text()').extract()[0]
        items.append(item)
        return item

2 个答案:

答案 0 :(得分:3)

您需要做的是:

1)打开Firefox

2)运行FireBug控制台

3)转到搜索结果页面

4)由于结果是动态变化而不是转到另一个页面,因此Javascript代码正在为下一页结果调用另一个URL(API)

5)请参阅Firebug控制台获取此网址

6)您需要将Scrapy设置为调用Javascript函数调用的相同URL。它很可能会返回JSON或XML格式的结果数组,这很容易在Python中进行操作

7)很可能它会有一个'pageNo'变量。因此,遍历页码并获取结果!

答案 1 :(得分:0)

您可以选择两种方式!首先,您可以捕获http请求包以获取JSON或XML原始地址,而不是直接抓取它们。其次,您可能应该使用带爬网javascript函数的spider,例如 pyspider project {{3 }}