我正在尝试抓取一个有分页的网站。如果我单击页面底部的“下一步”按钮,将生成新项目。我的 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
最佳答案
您需要做的是:
1) 打开火狐浏览器
2) 运行FireBug控制台
3) 进入搜索结果页面
4) 由于结果是动态变化的并且不会转到另一个页面,因此 Javascript 代码正在为下一页结果调用另一个 URL(API)
5) 请参阅 Firebug 控制台以获取此网址
6) 您需要将 Scrapy 设置为调用 Javascript 函数正在调用的同一 URL。它很可能会返回 JSON 或 XML 格式的结果数组,这很容易在 Python 中操作
7)很可能它会有一个“pageNo”变量。因此,迭代页码并获取结果!
关于python - 如何使用Scrapy抓取有分页的网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370308/