【发布时间】:2015-02-14 14:15:38
【问题描述】:
我试图废弃有 ajax 要求分页的链接。 我正在尝试抓取http://www.demo.com 链接。在 .py 文件中,我提供了限制 XPATH 的代码,编码是:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.contrib.spiders import sumSpider, Rule
from scrapy.selector import HtmlXPathSelector
from sum.items import sumItem
class Sumspider1(sumSpider):
name = 'sumDetailsUrls'
allowed_domains = ['sum.com']
start_urls = ['http://www.demo.com']
rules = (
Rule(LinkExtractor(restrict_xpaths='.//ul[@id="pager"]/li[8]/a'), callback='parse_start_url', follow=True),
)
#use parse_start_url if your spider wants to crawl from first page , so overriding
def parse_start_url(self, response):
print '********************************************1**********************************************'
#//div[@class="showMoreCars hide"]/a
#.//ul[@id="pager"]/li[8]/a/@href
self.log('Inside - parse_item %s' % response.url)
hxs = HtmlXPathSelector(response)
item = sumItem()
item['page'] = response.url
title = hxs.xpath('.//h1[@class="page-heading"]/text()').extract()
print '********************************************title**********************************************',title
urls = hxs.xpath('.//a[@id="linkToDetails"]/@href').extract()
print '**********************************************2***url*****************************************',urls
finalurls = []
for url in urls:
print '---------url-------',url
finalurls.append(url)
item['urls'] = finalurls
return item
我的 items.py 文件包含
from scrapy.item import Item, Field
class sumItem(Item):
# define the fields for your item here like:
# name = scrapy.Field()
page = Field()
urls = Field()
当我抓取它时,我仍然没有得到准确的输出,无法获取所有页面。
【问题讨论】:
-
如果网页的某些部分是通过使用 JavaScript 检索的内容呈现的,您需要在解析之前使用 JavaScript 引擎呈现整个页面。也许你应该看看seleniumhq.org?
-
亲爱的 Jonatan,如果您不介意,请您举例说明一下,因为我是初学者。
-
很遗憾,我手头没有示例。但是根据您的描述,您的问题似乎是在开始解析时网页没有完全生成,因此您需要在解析之前处理网页中的 JavaScript。一种方法是使用完整的浏览器,这就是我建议使用 Selenium 的原因。
-
@CharuAwhad:在执行任何 JavaScript 之前,使用 scrapy shell 测试 scrapy 在加载页面时看到的内容。从那里测试您的 XPath 表达式。更多信息:doc.scrapy.org/en/latest/topics/shell.html
-
亲爱的劳伦斯,你有什么例子吗?因为我是初学者。所以没有得到正确........
标签: python ajax pagination scrapy