蜘蛛从一个页面中抓取一些特定的链接。然后它在每个页面中搜索一个 youtube 链接和一个名称以识别它(页面标题)。它确实找到了我需要的所有链接,但是顺序很奇怪。
蜘蛛从下到上收集所有页面信息。我怎样才能让它从上到下?
我的蜘蛛: http: //pastebin.com/5qLKr6ky
输出: http: //pastebin.com/j4h4aRMs
起始页:它在蜘蛛中(我不能发布超过 2 个链接,因为我是新用户)
我希望输出的顺序与起始页中的顺序相同。
蜘蛛从一个页面中抓取一些特定的链接。然后它在每个页面中搜索一个 youtube 链接和一个名称以识别它(页面标题)。它确实找到了我需要的所有链接,但是顺序很奇怪。
蜘蛛从下到上收集所有页面信息。我怎样才能让它从上到下?
我的蜘蛛: http: //pastebin.com/5qLKr6ky
输出: http: //pastebin.com/j4h4aRMs
起始页:它在蜘蛛中(我不能发布超过 2 个链接,因为我是新用户)
我希望输出的顺序与起始页中的顺序相同。
如果您查看其中一个链接页面的页面源,它包含指向上一个和下一个视频的链接。这些链接采用这种形式:
<div class="entry clearfix">
...
<b>Next:</b> The TCP/IP Model >></a><br />
<center><iframe width="640" height="360" src="http://www.youtube.com/embed/lSK1d8fZyEw?rel=0" frameborder="0" allowfullscreen></iframe></center></p>
</div>
因此,您会收到重复的条目(尽管链接不同)。您可能需要开发一个更明确的 xpath 来过滤掉这些其他链接。
我不知道scrapy,但我知道你可以很简单地通过调用来反转python中的列表或其他可迭代对象reversed
。
哦,您的意思是您需要生成的 Youtube 链接按照它们放置在起始页上的顺序?
链接是随机顺序的,因为 Scrapy 并行发出请求
class ProfessormesserSpider(BaseSpider):
allowed_domains = ['www.professormesser.com']
start_urls = ['http://www.professormesser.com/n10-005/free-network-plus/']
def parse(self, response):
# extract urls from start page and REMEMBER THEIR ORDER(!!!)
hxs = HtmlXPathSelector(response)
for i, link in enumerate(hxs.xpath("//td[@valign='center']/div/descendant::a/@href")):
# "i" is the link's order
yield yield Request(url=link, callback=self.parse_item, meta={'i': i})
def parse_item(self, request):
order = response.request.meta["i"]
...