准备工作:

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

                       首先第一步:

                           (我们要用到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. 第四章 Windows图形界面-上

    学习<Windows程序设计>记录 概念贴士: 1. 每个GUI应用程序至少应该创建一个窗口,称为主窗口,它作为用户与应用程序间的主界面来提供服务.大多数应用程序也直接或间接地创建其他窗口 ...

  2. js 抓取屏幕宽度设置字体大小 rem

    var doc = window.document var docEl = doc.documentElement var tid function refreshRem () { var width ...

  3. https 与 http

    HTTPS,HTTP over SSL,SSL是解决传输层安全问题的网络协议,其核心是基于公钥密码学理论实现了对服务器身份认证,数据的私密性保护以及对数据完整性的校验等功能. SSL协议在HTTP请求 ...

  4. vb代码之-------当窗体BorderStyle属性为0时,添加窗口预览到任务栏

    入吾QQ群183435019 (学习 交流+唠嗑) 有很多时候,我们为了美观,将会自己画一个标题栏,这时候我们会把原来的标题栏取消掉,最简单的方法是吧窗体的BorderStyle设置成为0, 然后自己 ...

  5. 线上系统/tmp 目录不断增长分析与总结

    1.问题描述 系统配置为单核4G, web 工程配置堆2G,  /tmp目录 二进制文件不断增加,平均一天增加20G, 手动清理/tmp目录,重启系统,问题依旧. 2.分析 /tmp 目录存放系统运行 ...

  6. 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试

    前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...

  7. bootstrap轮播组件之“如何关闭自动轮播”

    在一个页面里使用多个bootstrap轮播组件的时候,如果还让所有轮播图都自动轮播的话,整个画面都在动,会给用户一种很不好的体验感受.所以,需要关闭轮播图的自动轮播. 关闭方法:去除如下属性即可: d ...

  8. UVAlive 3708 Graveyard(最优化问题)

    题目描述: 在周长10000的圆上,初始等距的放置着n个雕塑,现在新加入m个雕塑,要使得这n+m个雕塑仍然等距,问原来n个雕塑要移动的距离总和的最小值. 原题地址: http://acm.hust.e ...

  9. 0/1背包 dp学习~6

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/O ...

  10. cesium编程入门(四)界面介绍及小控件隐藏

    感性认识 界面介绍,viewer Geocoder : 查找位置工具,查找到之后会将镜头对准找到的地址,默认使用bing地图 Home Button :视角返回初始位置. Scene Mode Pic ...