Python爬虫进阶(Scrapy框架爬虫)
准备工作:
配置环境问题什么的我昨天已经写了,那么今天直接安装三个库
首先第一步:
(我们要用到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框架爬虫)的更多相关文章
- Python爬虫进阶一之爬虫框架概述
综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...
- Python网络爬虫之Scrapy框架(CrawlSpider)
目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...
- Python逆向爬虫之scrapy框架,非常详细
爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...
- 第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令
第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令 Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --u ...
- Scrapy框架-----爬虫
说明:文章是本人读了崔庆才的Python3---网络爬虫开发实战,做的简单整理,希望能帮助正在学习的小伙伴~~ 1. 准备工作: 安装Scrapy框架.MongoDB和PyMongo库,如果没有安装, ...
- 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码
第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...
- 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...
- 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...
- 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用
第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用 xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 ...
随机推荐
- 工具:从一个文件夹中复制jar到另一个文件夹中
工具类:从一个文件夹中复制jar到另一个文件夹中 需要的小伙伴可以试一试,很爽哦,有时候真的很需要! 需求:当我们拿到一个maven项目时,而maven项目的jar包都是通过pom.xml文件管理的, ...
- WebService服务(转)
一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...
- Java反射-高级知识掌握
PS:本文就Java反射的高级知识做下汇总,理清在什么情况下,我们应该去使用反射,提供框架的健壮性,ps:xieyang@163.com/xieyang@163.com
- 数据结构之链表-链表实现及常用操作(C++篇)
数据结构之链表-链表实现及常用操作(C++篇) 0.摘要 定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...
- Linux下zeromq.js安装
本文章主要阐述在离线环境下安装zeromq.js的方法和步骤.zeromq.js下载地址: https://www.npmjs.com/package/zeromq或者 https://github. ...
- JavaScript 模块化历程
这是一篇关于js模块化历程的长长的流水账,记录js模块化思想的诞生与变迁,展望ES6模块化标准的未来.经历过这段历史的人或许会感到沧桑,没经历过的人也应该知道这段历史. 无模块时代 在ajax还未提出 ...
- bzoj:3085: 反质数加强版SAPGAP
Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...
- 类A是公共的,应在名为A.java的文件中声明错误
第一种!!! “类A是公共的,应在名为A.java的文件中声明”这句话需要分两步来理解: 1.如果类A被声明为公共的(public),那么必须将类A保存在名为A.java的文件中: 2.反之,在一个文 ...
- BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 4810 Solved: 2160[Submit][Statu ...
- Vijos P1116 一元三次方程求解【多解,暴力,二分】
一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...
若有改进方案,问题 欢迎留言讨论