设为首页 收藏本站

运维网

查看: 529|回复: 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、联系人Email:admin@yunvn.com 网址:www.iyunv.com

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

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

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

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

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

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

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

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

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

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

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

Good good study day day up !


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


独家合作伙伴: 青云cloud

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