美文网首页
Scrapy-01-知乎全站用户信息爬取

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

作者: 丨像我这样的人丨 | 来源:发表于2018-10-21 22:54 被阅读34次

    这是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-知乎全站用户信息爬取

          本文链接:https://www.haomeiwen.com/subject/qqwizftx.html