Scrapy-01-知乎全站用户信息爬取

这是Scrapy实战的第一个项目 所以比较简陋 不健壮

IP地址随机更换、分布式等等都没有


先说一下遇到的一个小坑

计划是直接用paging的next来callback下一页的信息 现成的 拿来就用 结果懵逼了 测试了好多遍都只爬到第一页 为什么就是不回调呢? 怀疑人生ing 怀疑了N小时 才发现next所指引的网址根本打不开   需在在前面加上“https://www.zhihu.com/api/v4/XXXX” 这才是正确的网址 next所指引的链接并没有更新

主要的坑说完了 然后是各个文件的编写


第一步 settings.py 如下修改

           1.修改ROBOTS协议

ROBOTSTXT_OBEY = False

           2.添加User-Agent

# Override the default request headers:

DEFAULT_REQUEST_HEADERS = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Accept-Language': 'en',

'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36' }

第二步  items.py 如下修改

            添加item

class UserItem(Item):

    name = scrapy.Field()

    answer_count = Field()

    articles_count = Field() 

     XXXX吧啦吧啦

第三步:爬虫脚本主要业务逻辑编写

第四步:pipelines修改(这里以存储MongoBD为例)

class MongoPipeline(object):

    def __init__(self,mongo_url,mongo_db):

        self.mongo_url= mongo_url

        self.mongo_db= mongo_db

    @classmethod

    def from_crawler(cls,crawler):

        return cls(

mongo_url = crawler.settings.get('MONGO_URL'),

mongo_db = crawler.settings.get('MONGO_DB')

)

def open_spider(self,spider):

        self.client= pymongo.MongoClient(self.mongo_url)

self.db= self.client[self.mongo_db]

def process_item(self,item,spider):

        name= item.__class__.__name__

        self.db[name].insert(dict(item))

return  item

    def close_spider(self,spider):

        self.client.close()

第五步 回到settings.py 继续修改

ITEM_PIPELINES= {

'zhihuuser.pipelines.MongoPipeline': 300,

}

第六步: 跑!


本以为数据这么到手了 结果爬了3千多个用户 IP就被封了 过于频繁访问 403拒绝

你可能感兴趣的:(Scrapy-01-知乎全站用户信息爬取)