准备工作:

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

                       首先第一步:

                           (我们要用到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. u3d开发中可能会遇到的设计模式

    最近一段时间,面试了一些程序员,当然主要招聘的岗位是Unity3D开发.面试过程中对于三年以上的程序员我都会问其在开发中是否会总结一些常用的设计模式和设计方法,当然目的只是想了解程序员的自我学习情况以 ...

  2. 工作整理: python报表系统常见错误整理

    1.一般收不到邮件是因为配置文件邮箱写错 2.如果报表数据不对,看数据插入的时候是否再次写入产生冲突 3.如果收不到报表某些组别的excel查看组别名称是否匹配正确,是否匹配成功,不成功无法发送

  3. React Native分享第三方遇到的问题

    这几天做APP的分享,好多东西都不懂,踩了好多坑,所幸现在做好了,开心^_^ 时间紧,随便记一下先. 1.签名文件要和各平台的签名一致 2.新浪微博和微信的分享要打包之后,加上签名了才可以(我一直不知 ...

  4. Educational Codeforces Round 34

    F - Clear The Matrix 分析 题目问将所有星变成点的花费,限制了行数(只有4行),就可以往状压DP上去靠了. \(dp[i][j]\) 表示到第 \(i\) 列时状态为 \(j\) ...

  5. 一天就学会Android开发四大组件

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...

  6. c#中常用集合类和集合接口之集合类系列【转】

    常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列:http://www.cnblogs.com/fengxiaoji ...

  7. PHP面向对象编程基本原则

    首先祝大家节日快乐!!! 额,不知道你们剁手没,小梦是没有!整整已经错过了第九个年头! 小伙伴是不是有一种感觉,PHP入门的时候简直爱不释手,总是把 "PHP是世界上最好的语言" ...

  8. Java反射-高级知识掌握

    PS:本文就Java反射的高级知识做下汇总,理清在什么情况下,我们应该去使用反射,提供框架的健壮性,ps:xieyang@163.com/xieyang@163.com

  9. Hadoop(十五)MapReduce程序实例

    一.统计好友对数(去重) 1.1.数据准备 joe, jon joe , kia joe, bob joe ,ali kia, joe kia ,jim kia, dee dee ,kia dee, ...

  10. 让两个数x,y一直保持互质的模版

    int gcd(int x,int y) { )return x; else return gcd(y,x%y); }