我正在尝试抓取一个有分页的网站。如果我点击页面底部的“下一步”按钮,将生成新项目。我的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
答案 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 }}