抓取百万级简书用户做数据挖掘

简书日活用户至少几十万,因此抓取简书的用户,一方面做数据分析和挖掘,另一方面,看看有哪些it同行,挖掘一些高质量的文章。

本文先分析抓取数据,结合抓取策略和scrapy框架,一步一步教你带你做爬虫和挖掘分析。

先说抓取思路。本文思路是选择一个大V,大v就是关注用户较多,粉丝也多的用户作为爬虫抓取入口,然后不断对其关注用户和粉丝用户抓取,再对关注用户和粉丝的关注用户和粉丝进行抓取,如此循环。

抓取函数入口:

    def start_requests(self):
        start_url = 'https://www.jianshu.com/u/811ae6268caa'
        yield Request(start_url, callback=self.parse)
parse函数式scrapy的回调函数,主要解析用户信息和用户发表的文章,同时解析出其关注列表和粉丝列表进行递归抓取。当然抓取列表显然是有多页的,而这在简书里面的体现在ajax异步加载,只在拖动下拉
的时候才会触发请求数据。这里拿到分页列表后,采取url拼接的方式构造分页请求。
followed_url = 'https://www.jianshu.com'+info_selectors[0].xpath("./div/a/@href").extract()[0]
        followed = info_selectors[0].xpath("./div/a/p/text()").extract()[0]
        pages = int(float(followed)/10)
        for page in range(1,pages+1):
            userlist_url = followed_url + '?page={page}'.format(page=page)
            yield Request(userlist_url, callback=self.parseuserlist, dont_filter=True)

同理抓取粉丝列表。抓取用户文章也一样。

 articles_url = 'https://www.jianshu.com' + info_selectors[2].xpath("./div/a/@href").extract()[0]
        articles = info_selectors[2].xpath("./div/a/p/text()").extract()[0]
        #抓取文章
        article_page= int(float(articles)/10)
        for page in range(1,article_page+1):
            articellist_url = articles_url + '?order_by=shared_at&page={page}'.format(page=page)
            yield Request(articellist_url, callback=self.parse_article_list, dont_filter=True)

这样既可抓取文章了。

猜你喜欢

转载自www.cnblogs.com/hd-zg/p/9106968.html
今日推荐