scrapy webmagic

最近要试图去爬新浪微博上的部分数据(还不知道新浪微博有没有封爬虫)。

1.开始使用了webmagic,官网上的源代码是maven开发的,我电脑maven没有下载库,搞了一天出了各种问题,就罢了。

2.然后改用scrapy,现在还在尝试,试了一个爬豆瓣的代码,发现豆瓣好像也ban了爬虫,不过不确定,先找个其他网站试试:米胖。

先讲一下scrapy使用,安装好了,创建框架:scrapy startproject douban

然后初始化爬虫scrapy genspider spider_name start_url

item,spider实现,download_delay设置。

爬取:scrapy crawl spider_name

3.今天一直碰到一个问题就是scrapy中spider调用上一级文件中的一个方法后,在spider中提示仍然没有定义。

开始官网并没有提这个问题,文件没有import,可以,但是我实现就不行了。

然后实现方法改为:from spider.spider.spiders.items import dmoz_spider,结果还是不行。

再次,试了import sys      sys.path.append("..")      import 上一级目录的那个文件,还是不行。

在其他位置做了类似实验,还是不行。

搞得回头丧气的,最后看到一个文章(https://segmentfault.com/q/1010000002402183)提到说不应该from spider.spider.spiders.items import dmoz_spider,需要from spider.items import dmoz_spider,因为在setting已经设定了module。。。试了试,刚才的item未定义已经没了,现在看看调试一下效果。(卧糙,官网上有这么句话,我杂就没看到哪。。。),测试可行。代码如下:


items.py

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy
from scrapy.item import Field

class SpiderItem(scrapy.Item):
    # define the fields for your item here like:
    provincename = scrapy.Field()

spider.py

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import  Rule

from spider.items import SpiderItem




class MipangSpider(scrapy.Spider):
    name = "mipang"
    allowed_domains = ["maps.mipang.com"]
    start_urls = ["http://maps.mipang.com/", ]

    rules = (
        Rule(LinkExtractor(allow=r'start=\d{1,3}$'), callback='parse_item', follow=True),
    )

    def parse(self, response):
        items = []
        province_list = response.css('div.box.modbox.mod-weather-list')
        filename = "province"
        for province in province_list:
            item = SpiderItem()
            item['provincename'] = province.xpath('h4/a/text()').extract()[0]
            print "################################################"
            print filename
            with open(filename, 'wb') as f:
                print "################################################"
                print type(province.xpath('h4/a/text()').extract()[0])
                f.write(province.xpath('h4/a/text()').extract()[0])


你可能感兴趣的:(爬虫)