如何将Xpath与常规Scrapy Spider一起用于导航XML节点

时间:2016-02-15 01:36:41

标签: xml python-2.7 xpath scrapy scrapy-spider

我正在使用常规Scrapy“Spider”从HTML页面获取数据。但是,有一个XML页面,它也需要从一开始就获取数据。

我认为我已经很好地了解了如何使用XPath导航到相应的HTML标记。但是,我不知道在XML方面我在做什么。关于我唯一能找到的就是用另一个解析函数创建另一个蜘蛛的想法。我宁愿不这样做,因为这只是针对很多页面之一,而且我也不确定我是如何将两者合并的。

每个项目中我唯一需要的项目就是链接。

我的XML文档的基本结构是:

<item>
      <title></title>
      <link>url</link>
      <description></description>
</item>
<item>
      <title></title>
      <link>url</link>
      <description></description>
</item>

我的大部分蜘蛛代码(实际上都是必需品)位于

之下
class creepySpider(Spider):
# Basically everything up here just determines the start_url

def parse(self, response):
    print self.start_urls
    webpage = Selector(response)
    body = webpage.xpath('//body')

    # Get number of listings and determine number of pages therefrom
    strNumListings = str(webpage.xpath('.//span[@class="titlecount"]/text()').extract())
    strNumListings = strNumListings[4:-3]
    strNumListings = strNumListings.replace(',', '')
    numListings = int(strNumListings)
    resultsPerPage = 25
    numPages = (numListings / resultsPerPage) + 7

    pageNumbers = list(range(numPages))
    pageNumbers = pageNumbers[1:]

    # Begin looping through each page to extract all links
    for page in pageNumbers:
        pageNum = str(page)
        url = str(response.url)
        url = re.sub('/page-(\d*)/', 'page-' + pageNum + '/', url)

        for item in webpage.xpath('item'):
            print 'Searching for items...'

            yield Request(link, callback=self.parse_dir_contents)

        yield Request(url, callback=self.parse)

def parse_dir_contents(self, response):...

我尝试了很多不同的东西(比如webpage.xpath(// item)并尝试使用正则表达式来完成任务),但实际上并没有得到任何结果。

我可以在使用标准蜘蛛时这样做吗?

编辑:我认为我向后问了这个问题:S

我有一个初始页面,它是一个HTML页面,其中包含我正在查看的列表数量。我需要先点击该HTML页面才能找出会有多少页面。之后,我开始查看基本相同的页面,但是以XML格式获取每个列表的链接。每个列表都是HTML格式。

所以,如果可能的话,我想从一个HTML页面开始并抓住一个字段。我计算页数,然后开始查看XML文档中的链接。然后我导航到每个链接,从HTML页面中获取我的最终数据。

0 个答案:

没有答案