javascript - hrefs的空列表通过JavaScript onclick函数实现分页

标签 javascript python href scrapy

我的意图是 achieve the pagination from javascript functions ,所以例如我将 URL 设为 http://events.justdial.com/events/index.php?city=Hyderabad ,从这个 URL 你可以看到页面末尾的分页,所以如果你观察 HTML,它们是通过 JavaScript 函数编写的有 href 标签为 # ,我只是想收集该 href 标签,即使它们是 # 。 以下是我的代码

class justdialdotcomSpider(BaseSpider):
   name = "justdialdotcom"
   allowed_domains = ["www.justdial.com"]
   start_urls = ["http://events.justdial.com/events/index.php?city=Hyderabad"]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       pagination = hxs.select('//div[@id="main"]/div[@id="content"]/div[@id="pagination"]/a').extract()
       print pagination,">>>>>>>>>>>>>>>>>."

当我运行上面的代码时,我得到的结果为 [] ,我的意思是没有,任何人都可以告诉我如何通过 JavaScript onclick 函数实现分页以及为什么结果为空。我正在观察某种奇怪的情况在 HTML 中,例如分页中的页面之一的 anchor 标记为 <a onclick="jdevents.setPageNo(2)" href="#">2</a> 但是当我尝试通过浏览器单击 view page source 来查看此内容时,我看不到任何 jdevents.setPageNo(2) 功能,(我希望如果我们可以看到他在 HTML 中做什么,我们可以通过 formdata 作为请求发布)我真的很困惑并且无法来经历这个。

最佳答案

如果您跟踪请求,您会发现对以下 URL 的发布请求: http://events.justdial.com/events/search.php

发布数据:

city:Hyderabad 
cat:0 
area:0 
fromDate: 
toDate: 
subCat:0 
pageNo:2
fetch:events

响应是 JSON 格式。

因此,您的代码应如下所示

import re
import json

class justdialdotcomSpider(BaseSpider):
    name = "justdialdotcom"
    domain_name = "www.justdial.com"
    start_urls = ["http://events.justdial.com/events/search.php"]


    # Initial request
    def parse(self, response):
        return [FormRequest(url="http://events.justdial.com/events/search.php",
                                        formdata={'fetch': 'area',
                                                  'pageNo': '1',
                                                  'city' : 'Hyderabad',
                                                  'cat' : '0',
                                                  'area' : '0',
                                                  'fromDate': '',
                                                  'toDate' : '',
                                                  'subCat' : '0'
                                                  },
                                        callback=self.area_count
                                        )]


# Get total count and paginate through events
    def area_count(self, response):
        total_count = 0
        for area in  json.loads(response.body):
            total_count += int(area["count"])

        pages_count = (total_count / 10) + 1

        page = 1
        while (page <= pages_count):
            yield FormRequest(url="http://events.justdial.com/events/search.php",
                                        formdata={'fetch': 'events',
                                                  'pageNo': str(page),
                                                  'city' : 'Hyderabad',
                                                  'cat' : '0',
                                                  'area' : '0',
                                                  'fromDate': '',
                                                  'toDate' : '',
                                                  'subCat' : '0'
                                                  },
                                        callback=self.parse_events
                                        )
            page += 1


# parse events 
    def parse_events(self, response):
        events = json.loads(response.body)
        events.pop(0)

        for event_details in events:
            yield FormRequest(url="http://events.justdial.com/events/search.php",
                                        formdata={'fetch': 'event',
                                                  'eventId': str(event_details["id"]),
                                                  },
                                        callback=self.parse_event
                                        )



    def parse_event(self, response):
        event_details = json.loads(response.body)
        items = []
        #item = Product()

        items.append(item)
        return items

关于javascript - hrefs的空列表通过JavaScript onclick函数实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975337/

相关文章:

python - 在元组的第一个索引中查找具有非不同值的元组列表的索引

css - ASP.net MVC 中的 MembershipProviders 会影响样式表链接吗?

php - 数据库链接不起作用

python - 如果前两个元素相同,则在每个包含三个元素的元组列表中添加第三个元素

javascript - 附加 html 后欧芹不起作用

javascript - 加载变化的 div

javascript - 根据下拉选择自动完成源

python - 为什么模块名称中的连字符会产生语法错误?

javascript - 如何打开不同域或子域到新选项卡以及相同域链接到同一选项卡

javascript - jQuery - 如何检查一个元素是否存在?