Scrapy

scrapy框架是一个非常全面的爬虫框架,可以说是爬虫界的django了,里面有相当多的组件,格式化组件item,持久化组件pipeline,爬虫组件spider

首先我们要先和django一样先pip现在

Linux
pip3 install scrapy Windows
a. pip3 install wheel
b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
c. 进入下载目录,执行 pip3 install Twisted-xxxxx.whl d. pip3 install scrapy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
e. pip3 install pywin32 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

创建第一个scrapy程序

打开shell

创建scrapy项目

scrapy startproject xxx(项目名称)

cd xianglong
scrapy genspider chouti chouti.com (这一步写的url会在start_url中体现)
运行程序(带有日志记录)
scrapy crawl chouti
不带有日志的打印
scrapy crawl chouti --nolog

 

import scrapyclass ChoutiSpider(scrapy.Spider):
name = 'chouti'
allowed_domains = ['chouti.com']
start_urls = ['http://chouti.com/'] def parse(self, response):
print(response.text)

此处parse是一个回调函数,会把爬取到的结果封装到response中传给parse

如果我们想解析其中的数据,可以使用里面的内置模块,不用bs4模块了不然会有一种四不像的感觉

from scrapy.selector import HtmlXPathSelectoclass ChoutiSpider(scrapy.Spider):    name = 'chouti'
    allowed_domains = ['chouti.com']
start_urls = ['http://dig.chouti.com/',] def parse(self, response):
"""
当起始URL下载完毕后,自动执行parse函数:response封装了响应相关的所有内容。
:param response:
:return:
""" hxs = HtmlXPathSelector(response=response)
# 去下载的页面中:找新闻
      
     
# // 代表子子孙孙下找,div[@id='content-list'] div id是content-list
 
    # / 儿子找, div class属性是item
items = hxs.xpath("//div[@id='content-list']/div[@class='item']")
for item in items:
href = item.xpath('.//div[@class="part1"]//a[1]/@href').extract_first()
text = item.xpath('.//div[@class="part1"]//a[1]/text()').extract_first()
item = XianglongItem(title=text,href=href)
yield item pages = hxs.xpath('//div[@id="page-area"]//a[@class="ct_pagepa"]/@href').extract()
for page_url in pages:
page_url = "https://dig.chouti.com" + page_url
yield Request(url=page_url,callback=self.parse)

如果yield 一个Item对象那么会去pipelines.py中去出里

要使用这个功能需要在settings文件中配置

item/pipelines
配置:
ITEM_PIPELINES = {
'xianglong.pipelines.XianglongPipeline': 300,
}

  

items.py 中主要处理数据的格式化

import scrapy

class XianglongItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
href = scrapy.Field()

持久化组件pipelines.py

class XianglongPipeline(object):

    def process_item(self, item, spider):
self.f.write(item['href']+'\n')
self.f.flush() return item def open_spider(self, spider):
"""
爬虫开始执行时,调用
:param spider:
:return:
"""
self.f = open('url.log','w') def close_spider(self, spider):
"""
爬虫关闭时,被调用
:param spider:
:return:
"""
self.f.close()

因为在持久化的时候我们需要对文件或者数据库进行操作,我们可以在项目开始的就打开文件句柄或者数据库连接,对文件进行操作

当我们查完这一页的数据,我们得到了下一页的页码,想让爬虫继续爬。

我们可以这么设置

# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from ..items import XianglongItem class ChoutiSpider(scrapy.Spider):
name = 'chouti'
allowed_domains = ['chouti.com']
start_urls = ['http://dig.chouti.com/',] def parse(self, response):
"""
当起始URL下载完毕后,自动执行parse函数:response封装了响应相关的所有内容。
:param response:
:return:
""" pages = hxs.xpath('//div[@id="page-area"]//a[@class="ct_pagepa"]/@href').extract()
for page_url in pages:
page_url = "https://dig.chouti.com" + page_url
yield Request(url=page_url,callback=self.parse)

只要yield 一个Request对象就会继续执行他设置的回调函数。

Scrapy框架的初步使用的更多相关文章

  1. 爬虫--Scrapy框架的初步使用

    1.scrapy在windows环境下安装 - 环境的安装: a. pip3 install wheel b. 下载twisted: http://www.lfd.uci.edu/~gohlke/py ...

  2. Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

    这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...

  3. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...

  4. python爬虫随笔-scrapy框架(1)——scrapy框架的安装和结构介绍

    scrapy框架简介 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  5. Python之爬虫从入门到放弃(十三) Scrapy框架整体的了解

    这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...

  6. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  7. Python爬虫Scrapy框架入门(1)

    也许是很少接触python的原因,我觉得是Scrapy框架和以往Java框架很不一样:它真的是个框架. 从表层来看,与Java框架引入jar包.配置xml或.property文件不同,Scrapy的模 ...

  8. Scrapy框架使用—quotesbot 项目(学习记录一)

    一.Scrapy框架的安装及相关理论知识的学习可以参考:http://www.yiibai.com/scrapy/scrapy_environment.html 二.重点记录我学习使用scrapy框架 ...

  9. Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

    这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...

随机推荐

  1. Ruby系列文章之1---开发者应该熟悉的10个工具

    1. Git Git是进入Ruby这个生态圈首先最应该学会的工具.几乎所有以Ruby开发出来的套件都放在Github上.也就是不管你要下载或修改协作都需要透过Git. 2. RVM Ruby有很多种i ...

  2. 【NLP_Stanford课堂】语言模型1

    一.语言模型 旨在:给一个句子或一组词计算一个联合概率 作用: 机器翻译:用以区分翻译结果的好坏 拼写校正:某一个拼错的单词是这个单词的概率更大,所以校正 语音识别:语音识别出来是这个句子的概率更大 ...

  3. koa2获取用户ip

    调用下面方法即可获取 // koa2 中 req 为 ctx.req const getUserIp = (req) => { return req.headers['x-forwarded-f ...

  4. django搭建简单开发项目流程(一)

    1 搭建环境 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境 virtualenv -p pyt ...

  5. ASP.NET中引用dll“找不到指定模块"的完美解决办法 z

    DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息.DllImport属性应用于方法,要求最少要 ...

  6. sqlplus中设置在屏幕中上不打印出输出

    在某些特定的情况下我们想在做某种实验,需要执行一段sql语句,但是不想在屏幕上打印出sql语句的结果(太长了)可以采用如下方式.1    把想要执行的语句写到一个sql脚本中,例如:[oracle@i ...

  7. 数组:获取数组中最后一个数据end()函数

    今天来学习一下end()函数 1.案例:直接获取数组中最后一个数据 代码部分 结果: 2.案例:从url中获取最后一个数据 代码部分: 结果: 总结: 1.有时候我们需要去获取数据库中,id最大的那个 ...

  8. python:正则模块

    1,正则表达式 正则表达式是用来做字符串的匹配的,正则有他自己的规则,和python没有关系,一种匹配字符串的规则. 2,字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表 ...

  9. css盒模型-BFC

    BFC(边距重叠解决方案) 1.BFC的基本概念:块级格式化上下文 2.BFC的原理(说白了就是BFC的渲染规则): 这个规则是什么呢?我觉得大家能说出4点就够了 第一个就是BFC可以解决这个元素的垂 ...

  10. Windows7安装Envi4.8简体中文破解版

    在正式安装前,建议先完整阅读本教程!本教程所使用的是Envi 4.8 32 位安装包,径测试,在64位windows7上可以正常安装使用!本教程就是在64位windows7上安装32位Envi4.8! ...