我的意图是 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/