码迷,mamicode.com
首页 > 其他好文 > 详细

scrapy 抓取果壳首页推荐文章

时间:2015-02-15 14:54:46      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

  一直对爬虫耿耿于怀,今天总算是实现了,编写了一个Python Scrapy的爬虫获取果壳网首页的推荐文章。

  打开果壳首页的一篇推荐文章,URL如下http://www.guokr.com/article/439791/可以看到果壳的文章都是在/article/下,并且所有文章是以6位数字表示,url问题解决了

  下来是获取页面的标题,(图像使用的imgur的服务,国内可能需要多加载一段时间,请耐心等待

技术分享

我用的chrome浏览器,F12进入开发模式查看到源码

<h1 itemprop="http://purl.org/dc/terms/title"id="articleTitle">网络头像揭示了你的多少个性</h1>

因此使用Xpath可以轻易获得该标题

开始动手:

  • 新建一个spider:scrapy startproject guokr
  • 修改item.py:添加需要的item项

    class guokrItem(scrapy.Item):
        name = scrapy.Field()
        url = scrapy.Field()
    
  • 创建spider

    import scrapy
    from scrapy.contrib.spiders import CrawlSpider, Rule
    from scrapy.contrib.linkextractors import LinkExtractor
    from guokr.items import guokrItem
    
    class guokrSpider(CrawlSpider):
        name = "guokr"
        allowed_domains = ["guokr.com"]
        start_urls = [
        "http://www.guokr.com/"
        ]
        rules = (
            Rule(LinkExtractor(allow=r"article/\d+/"),callback=‘parse_guokr‘),#设置rule使用正则从start_urls中匹配符合条件的url并返回给parse_guokr
        )
        def parse_guokr(self,response):
            item = guokrItem()
            item[‘url‘] = response.url
            item[‘name‘] = response.xpath("//h1[@id=‘articleTitle‘]/text()").extract()#获取h1标签下id属性为articleTitle的值,也就是标题
            return item
    
  • 设置pipelines

    import json
    import codecs
    class GuokrPipeline(object):
        def __init__(self):
            self.file = codecs.open(‘guokr.json‘,‘wb‘,encoding=‘utf-8‘)#构造函数中定义编码
    
    def process_item(self,item,spider):                 #输出json文件
        line = json.dumps(dict(item)) + ‘\n‘
        self.file.write(line.decode(‘unicode_escape‘))
        return item
    

  • setting中添加pipeline定义:

    ITEM_PIPELINES = {‘guokr.pipelines.GuokrPipeline‘}
    
  • 运行:scrapy crawl guokr
    目录下得到guokr.json文件
    技术分享
    如果你觉得不过瘾:想看更多文章,可以酱紫:在spider里面Rules下添加一句Follow=True意思就是在获取到的页面接着获取(想想都可怕,多少万的文章,我的天)

我小小改了一下正则表达式,像这样

    rules = (
            Rule(LinkExtractor(allow=r"article/439\d+/"),callback=‘parse_guokr‘,follow=True),
        )

然后爬虫跑了10多秒,然后就酱紫了技术分享

第一次玩爬虫,感觉自己飞起来了。

scrapy 抓取果壳首页推荐文章

标签:

原文地址:http://www.cnblogs.com/zynick/p/4292816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!