准备工作:

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

                       首先第一步:

                           (我们要用到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. Python笔记(二):列表+列表数据处理+函数

    #才疏学浅,难免有不恰当之处,请不吝指正,谢谢. #适合初学者. 列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组.例如: user = ["张三","李 ...

  2. 2.Text input and output

    文本的输入和输出 输出 要在屏幕上输出文本你需要这样一行代码: print("Hello World") 如果输出多行,要添加符号“\n”: print("Hello W ...

  3. Spring Boot快速入门(四):使用jpa进行数据库操作

    原文地址:https://lierabbit.cn/articles/5 添加依赖 新建项目选择web,JPA,MySQL三个依赖 对于已存在的项目可以在bulid.gradle加入,spring b ...

  4. xss框架基础框架实现

    0x00web服务器设计 (1)tornado处理请求和Application类要编写一个Tornado应用中最多的工作是定义类继承Tornado的RequestHandler类,主要用于将特定的ur ...

  5. git遇到的问题解决方案

    问题1: The requested URL returned error: 401 Unauthorized while accessing? 问题原因: 1.无法访问是因为你将项目设置为私人的,所 ...

  6. python 数据类型之集合

    一.集合的定义: 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key. 特性:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 二 ...

  7. 循序渐进之Spring AOP(2) - 基本概念

    学习AOP前要先了解几个重要术语:Joinpoint.Pointcut.Advice 仍然以改装车比喻,拿到心爱的汽车后想做改装,第一件事是什么?找到要改装的地方.车上可改装的地方很多,但每个人感兴趣 ...

  8. 前端Web开发MVC模式-入门示例

    MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:control为servlet程序控制跳转和 ...

  9. C/C++中peek函数的原理及应用

    C++中的peek函数 该调用形式为cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移.如果要访问的字符是文件结束符,则函 ...

  10. [51nod1299]监狱逃离

    到现在还是不会写系列,直接贴题解了. http://www.51nod.com/question/index.html#!questionId=1157 #include<cstdio> ...