设为首页 收藏本站

运维网

查看: 633|回复: 0

[经验分享] Scrapy 爬虫实例 抓取豆瓣小组信息并保存到mongodb中

[复制链接]

尚未签到

发表于 2018-10-26 13:56:44 | 显示全部楼层 |阅读模式
mrwang@mrwang-ubuntu:~/student/py/douban$ cat douban/spiders/BasicGroupSpider.py  
# -*- coding: utf-8 -*-
  

  
from scrapy.contrib.spiders import CrawlSpider, Rule
  
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
  
from scrapy.selector import HtmlXPathSelector
  
from scrapy.item import Item
  
from douban.items import DoubanItem
  
import re
  

  
class GroupSpider(CrawlSpider):
  
    # 爬虫名
  
    name = "Group"
  

  
    allowed_domains = ["douban.com"]
  
    # 种子链接
  
    start_urls = [
  
        "http://www.douban.com/group/explore?tag=%E8%B4%AD%E7%89%A9",
  
        "http://www.douban.com/group/explore?tag=%E7%94%9F%E6%B4%BB",
  
        "http://www.douban.com/group/explore?tag=%E7%A4%BE%E4%BC%9A",
  
        "http://www.douban.com/group/explore?tag=%E8%89%BA%E6%9C%AF",
  
        "http://www.douban.com/group/explore?tag=%E5%AD%A6%E6%9C%AF",
  
        "http://www.douban.com/group/explore?tag=%E6%83%85%E6%84%9F",
  
        "http://www.douban.com/group/explore?tag=%E9%97%B2%E8%81%8A",
  
        "http://www.douban.com/group/explore?tag=%E5%85%B4%E8%B6%A3"
  
    ]
  

  
     # 规则 满足后 使用callback指定的函数进行处理
  
    rules = [
  
        Rule(SgmlLinkExtractor(allow=('/group/[^/]+/$', )),
  
callback='parse_group_home_page', process_request='add_cookie'),
  
        Rule(SgmlLinkExtractor(allow=('/group/explore\?tag', )), follow=True,
  
process_request='add_cookie'),
  
    ]
  

  
    def __get_id_from_group_url(self, url):
  
        m =  re.search("^http://www.douban.com/group/([^/]+)/$", url)
  
        if(m):
  
            return m.group(1)
  
        else:
  
            return 0
  

  
    def add_cookie(self, request):
  
        request.replace(cookies=[
  

  
        ]);
  
        return request;
  

  
    def parse_group_topic_list(self, response):
  
        self.log("Fetch group topic list page: %s" % response.url)
  
        pass
  

  

  
    def parse_group_home_page(self, response):
  

  
        self.log("Fetch group home page: %s" % response.url)
  

  
        # 这里使用的是一个叫 XPath 的选择器
  
        hxs = HtmlXPathSelector(response)
  
        item = DoubanItem()
  

  
        #get group name
  
        item['groupName'] = hxs.select('//h1/text()').re("^\s+(.*)\s+$")[0]
  

  
        #get group id
  
        item['groupURL'] = response.url
  
        groupid = self.__get_id_from_group_url(response.url)
  

  
        #get group members number
  
        members_url = "http://www.douban.com/group/%s/members" % groupid
  
        members_text = hxs.select('//a[contains(@href, "%s")]/text()' % members_url).re("\((\d+)\)")
  
        item['totalNumber'] = members_text[0]
  

  
        #get relative groups
  
        item['RelativeGroups'] = []
  
        groups = hxs.select('//div[contains(@class, "group-list-item")]')
  
        for group in groups:
  
            url = group.select('div[contains(@class, "title")]/a/@href').extract()[0]
  
            item['RelativeGroups'].append(url)
  

  
        return item



运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2020

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!


独家合作伙伴: 青云cloud

快速回复 返回顶部 返回列表