我对Scrapy有点陌生,我在处理abbr标签(或者更确切地说,我认为问题在于处理)时遇到了问题,但是我不确定100%正确。
我正在尝试从以下html中获取缩写名称:
<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
我无法获取日期(在Powershell中,草率地返回'date':[])。但是,用户返回的很好,让我认为这可能是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
谁能在这个问题上发表一些看法?谢谢!
最佳答案
假设日期不是使用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
关于xpath - Scrapy:在Xpath中处理Abbr标签的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384669/