我正在使用常规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页面中获取我的最终数据。