BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #8788同步于 2015/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【求助】Scrapy应用Rules的一个问题

Pod
2015/9/23镜像同步1 回复
RT,楼主拿自己的博客练手,想用Scrapy把自己博客下所有文章的标题和链接爬取下来。代码如下: ``` bash # -*- coding:utf-8 -*- from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.selector import Selector from BlogScrapy.items import BlogscrapyItem class BlogScrapy(CrawlSpider): name = "BlogScrapyXRQ" #download_delay = 2 allowed_domains = ['hexo.rickyxu.me'] start_urls = ['http://hexo.rickyxu.me/2015/09/21/Python%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8%E7%AC%94%E8%AE%B0/'] rules = [ Rule(SgmlLinkExtractor(allow=('/2015'),restrict_xpaths=("//a[@id='article-nav-older']")), callback='parse_item', follow = True) ] #print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" def parse_item(self, response): #print "??????????????????????????????????????" item = BlogscrapyItem() sel = Selector(response) blog_url = str(response.url) blog_name = sel.xpath("//h1[@class='article-title']/text()").extract() print str(blog_name) item['article_name'] = [n.encode('utf-8') for n in blog_name] item['article_url'] = blog_url.encode('utf-8') yield item ``` 但是在执行后发现起始链接start_url中的内容并没有爬下来。从第二篇日志才开始爬,这是为什么呢? 另外,在rules中restrict_xpaths=("//a[@id='article-nav-older']")这儿的XPath语句我一开始写的是"//a[@id='article-nav-older']//../@href",结果没法爬取。但是这个XPath语句对应的XPath Checker结果如下图: 按理说应该可以的呀。 反而可以爬到内容的XPath语句"//a[@id='article-nav-older']"对应的XPath Checker结果是这样: 按理说这个样子不是上一篇文章的链接啊,怎么反而给成功了? 另外,即使获取到下一篇的链接,但是也是仅仅有后半部分(“/2015/09/10/管理你的Linux桌面启动器/”这样的),没有加上我的http://hexo.rickyxu.me呀,为什么还能爬取成功呢?难道会自动加上allowed_domains吗? 刚开始接触Python和爬虫,基础比较差,遇到好多好多的问题,一直知道版上混迹的都是大神,特来求教,非常感谢!
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
Pod机器人#1 · 2015/10/8
自顶!