我对Scrapy有点新意,我在处理(或者更确切地说,我认为问题在于处理)abbr标签时遇到了问题,但我不是100%一定。
我试图从下面的html中获取abbr标题:
<div class="meta">
Post by: <a href="index.php?members/18862/" class="username" dir="auto">Eric</a>,
<abbr title="Feb 13, 2016 at 1:45 PM" class="DateTime" data-time="1455389113" data-diff="3240" data-datestring="Feb 13, 2016" data-timestring="1:45 PM">54 minutes ago</abbr>
in forum: <a href="index.php?forums/154/">Forum Games</a>
</div>
我在这里处理的问题是当我为蜘蛛使用以下代码时:
def parse(self, response):
for sel in response.xpath('//h3[@class="title"]'):
item = ZqItem()
item['user'] = sel.xpath('../../div[@class="meta"]/a[@class="username"]/text()').extract()
item['date'] = sel.xpath('../../div[@class="meta"]/abbr[@class="DateTime"]/@title').extract()
yield item
我无法获得日期(scrapy返回&#39; date&#39;:[],在powershell中)。然而,用户被罚款让我觉得它可能是abbr标签给我一个问题。
此外,我尝试在不同但相似的html片段上使用我的代码,它代替abbr,并且它有效(成功返回标题)。 (请记住,html中还存在其他一些差异 - 也许这就是问题的原因?)
<div class="meta">
Post by: <a href="index.php?members/18862/" class="username" dir="auto">Eric</a>,
<span class="DateTime" title="Feb 4, 2016 at 9:37 AM">Feb 4, 2016</span>
in forum: <a href="index.php?forums/8/">General</a>
</div>
蜘蛛为:
def parse(self, response):
for sel in response.xpath('//h3[@class="title"]'):
item = ZqItem()
item['user'] = sel.xpath('../../div[@class="meta"]/a[@class="username"]/text()').extract()
item['date'] = sel.xpath('../../div[@class="meta"]/span[@class="DateTime"]/@title').extract()
yield item
有人可以就这个问题传播一些看法吗?谢谢!
答案 0 :(得分:0)
我们假设日期不是使用javascript动态生成的 你可以这样做:
def parse(self, response):
for sel in response.xpath('//div[@class="meta"]/a[@class="username"]'):
date = sel.xpath('../span[@class="DateTime"]/@title').extract()
date += sel.xpath('../abbr[@class="DateTime"]/@title').extract()
item = ZqItem()
item['user'] = sel.xpath('./text()').extract()
item['date'] = date
yield item