准备工作:

          配置环境问题什么的我昨天已经写了,那么今天直接安装三个库

                       首先第一步:

                           (我们要用到scrapy框架,在python里调用windows 命令,使用mongodb存储爬到的数据 )

                                 进入DOS python/Script>路径下  输入命令:

python/Script> pip install pypiwin32

python/Script> pip install scrapy

python/Script> pip install pymongo

三个库下载完成后,打开DOS 输入命令:

(将指令路径转到你需要创建爬虫项目文件的目录。例如:e:)

e:\>  scrapy startproject  projectFileName    ##创建一个scrapy框架的爬虫项目文件 ,名字为projectName

(运行下一步之前需要将DOS的指令路径cd 到上一步操作创建的项目文件)

scrapy genspider  projectName   Http:\\www.baidu.com   ##创建一个爬虫项目,这里后面网址随便填后面可以修改,但是这一项是必填项

以上操作都完成后,打开Pycharm 打开我们事先用DOS创好的爬虫项目文件projectFileName

开始编译:

(我这里以爬贴吧的名字和类以及链接并最后自动存入mongodb为例)

以下为projectName.py的源代码

#-*- coding: utf-8 -*-
import scrapy

from TieBa.items import TiebaItem    ##引用items里面的Tiebaltem,方便后面存储数据

class BaidutiebaSpider(scrapy.Spider):
            name = 'baidutieba'

def start_requests(self):     ##定义一个start_requests方法
       header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'}        ##昨天已经解释了,模仿浏览器登录

yield scrapy.Request(url='http://tieba.baidu.com/f/index/forumclass', headers=header, meta={'headers': header}, callback=self.parse_class)     ##向目标页面发送请求,并用字典把headers存储起来,callback=跳转的下一个方法,self可以理解为c#里面的this

def parse_class(self, response):     ##这里的response是上个Request获取的目标网页的信息
      class_1s = response.xpath("//div[@class='clearfix']/div[@class='class-item']")     ##这里我们直接用xpath获取需要的属性
      for class_1 in class_1s:
            class_1_name = class_1.xpath("a/text()").extract()[0]           ##extract()提取信息,此方法返回值为一个list数组,虽然我们这里只有一个值但是也得取下标

class_2s = class_1.xpath("ul/li")
           for class_2 in class_2s:
                 class_2_name = class_2.xpath("a/text()").extract()[0]
                 class_2_url = 'http://tieba.baidu.com' + class_2.xpath("a/@href").extract()[0] + '&pn='           ##给每个子网页加上前缀和页数的后缀
                  for page in range(30):
                        yield scrapy.Request(url=class_2_url + str(page + 1), headers=response.meta['headers'], meta={'headers': response.meta['headers'], 'class_1_name': class_1_name, 'class_2_name': class_2_name}, callback=self.parse)    ##与上一个方法类似,一样用字典储存一部分信息供下面使用
def parse(self, response):
      tiebas = response.xpath("//div[@id='ba_list']/div")
      for tieba in tiebas:
            tieba_name = tieba.xpath("a/div/p[@class='ba_name']/text()").extract()[0]
            tieba_url = 'http://tieba.baidu.com' + tieba.xpath("a/@href").extract()[0]
            item = TiebaItem(class_1=response.meta['class_1_name'], class_2=response.meta['class_2_name'], name=tieba_name, url=tieba_url)
            yield item      ##提交item

以下为items.py的源代码

import scrapy

class TiebaItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
class_1 = scrapy.Field() ##获取projectName.py里面传的字典属性值,以下参数同理
class_2 = scrapy.Field()
name = scrapy.Field()
url = scrapy.Field() 以下为pipelines.py的源代码
import pymongo              ##因为要使用mongodb所以要引用pymongo

class TiebaPipeline(object):    ##此类名和setting里面的ITEM_PIPELINES下面的名字一致 ProjectFileName.pipelines.类名
def open_spider(self,spider): ##写一个open_apider开始爬虫的方法
self.client = pymongo.MongoClient('mongodb://localhost:27017') ##连接mongodb,此处pymongo.MongoClient('mongodb://数据库连接') def close_spider(self,spider):
self.client.close() ##写入完记得关闭
def process_item(self, item, spider):
self.client['TieBa']['datas'].insert(dict(item)) ##往TieBa数据库里的datas表插入从projectName.py里传过来的itme(字典化)的值 以下为settings.py需要修改的部分代码
 ROBOTSTXT_OBEY = False   ##不遵从robots.txt里的Robot协议
 ITEM_PIPELINES = {    ##激活项目管道组件
'TieBa.pipelines.TiebaPipeline': 300
}
最后写一个启动start.py来运行scrapy框架下写的projectName.py
import os
os.system('scrapy crawl baidutieba') 到这里,此次爬虫的编码就结束了,打开mongodb就能看到我们爬到的数据了


若有改进方案,问题 欢迎留言讨论
 
 
 
 
 

Python爬虫进阶(Scrapy框架爬虫)的更多相关文章

  1. Python爬虫进阶一之爬虫框架概述

    综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...

  2. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  3. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  4. 第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令 Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --u ...

  5. Scrapy框架-----爬虫

    说明:文章是本人读了崔庆才的Python3---网络爬虫开发实战,做的简单整理,希望能帮助正在学习的小伙伴~~ 1. 准备工作: 安装Scrapy框架.MongoDB和PyMongo库,如果没有安装, ...

  6. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  7. 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...

  8. 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

    第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...

  9. 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

    第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用 xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 ...

随机推荐

  1. 【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)

    新功能   问题描述(Bug #18871046, Bug #72811): 主要为了解决一个比较“古老”的MySQL在NUMA架构下的“swap insanity”问题,其表现为尽管为InnoDB ...

  2. web前端教程:CSS 布局十八般武艺都在这里了

      CSS布局 布局是CSS中一个重要部分,本文总结了CSS布局中的常用技巧,包括常用的水平居中.垂直居中方法,以及单列布局.多列布局的多种实现方式(包括传统的盒模型布局和比较新的flex布局实现), ...

  3. api接口写好了?想过(Accept,Content-Type)?返回类型json|xml?

    api接口写好了?想过(Accept,Content-Type)?返回类型json|xml? 起因: - A,B. A调用B提供的api接口. - A:为毛你的接口返回的是xml格式的(浏览器访问)? ...

  4. 借助Redis做秒杀和限流的思考

    最近群里聊起秒杀和限流,我自己没有做过类似应用,但是工作中遇到过更大的数据和并发. 于是提出了一个简单的模型: var count = rds.inc(key); if(count > 1000 ...

  5. Java想要学到精通,这几点一定要掌握

    时代更新换代速度如此之快,尤其是深处互联网行业的java程序员,技术更需要不断更新,只有及时充电,才能不被市场淘汰.千锋Java培训老师今天为大家分享Java程序员学习的6个小技巧. 1.书籍永远是知 ...

  6. JavaSE(三)之static、final、abstract修饰符

    一.static修饰符 1.1.static变量 在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量. 静态变量和非静态变量的区别            静态变量属于类的,&quo ...

  7. CTF---编程入门第一题 循环

    循环分值:10 来源: 北邮天枢战队 难度:易 参与人数:1478人 Get Flag:467人 答题人数:523人 解题通过率:89% 给出一个循环公式,对于一个整数n,当n为奇数时,n=3n+1, ...

  8. HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)

    话不多说,日常一水题,水水更健康!┗|`O′|┛ 嗷~~ a/b + c/d Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  9. JSZX_HC_2016_R5

    #1 ccz 200 #2 CTL 130 #3 KPM 130 本来以为准备挺充分的,开始后还是出现一些状况 >_< 好在还算顺利…… A AC人数:4   平均分:70 题目描述 给定 ...

  10. Spark算子--leftOuterJoin和rightOuterJoin

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/cb71cd3ac5d7965a2c61891659264d54.html leftOuterJoin和righ ...