Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python爬虫----(4. scrapy框架,官方文档以及例子)

python爬虫----(4. scrapy框架,官方文档以及例子)

作者头像
lpe234
发布于 2020-07-27 09:04:16
发布于 2020-07-27 09:04:16
71700
代码可运行
举报
文章被收录于专栏:若是烟花若是烟花
运行总次数:0
代码可运行

官方文档: http://doc.scrapy.org/en/latest/

github例子: https://github.com/search?utf8=%E2%9C%93&q=scrapy

剩下的待会再整理...... 买饭去...... --2014年08月20日19:29:20


の...刚搜狗输入法出问题,直接注销重新登陆,结果刚才的那些内容全部没了。看来草稿箱也不是太靠谱呀!!!

再重新整理下吧

-- 2014年08月21日04:02:37


(一)基本的 -- scrapy.spider.Spider

(1)使用交互shell

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dizzy@dizzy-pc:~$ scrapy shell "http://www.baidu.com/"
2014-08-21 04:09:11+0800 [scrapy] INFO: Scrapy 0.24.4 started (bot: scrapybot)
2014-08-21 04:09:11+0800 [scrapy] INFO: Optional features available: ssl, http11, django
2014-08-21 04:09:11+0800 [scrapy] INFO: Overridden settings: {'LOGSTATS_INTERVAL': 0}
2014-08-21 04:09:11+0800 [scrapy] INFO: Enabled extensions: TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2014-08-21 04:09:11+0800 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2014-08-21 04:09:11+0800 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2014-08-21 04:09:11+0800 [scrapy] INFO: Enabled item pipelines: 
2014-08-21 04:09:11+0800 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6024
2014-08-21 04:09:11+0800 [scrapy] DEBUG: Web service listening on 127.0.0.1:6081
2014-08-21 04:09:11+0800 [default] INFO: Spider opened
2014-08-21 04:09:12+0800 [default] DEBUG: Crawled (200) <GET http://www.baidu.com/> (referer: None)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0xa483cec>
[s]   item       {}
[s]   request    <GET http://www.baidu.com/>
[s]   response   <200 http://www.baidu.com/>
[s]   settings   <scrapy.settings.Settings object at 0xa0de78c>
[s]   spider     <Spider 'default' at 0xa78086c>
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser

>>> 
    # response.body 返回的所有内容
    # response.xpath('//ul/li') 可以测试所有的xpath内容

More important, if you type response.selector you will access a selector object you can use to query the response, and convenient shortcuts like response.xpath() and response.css() mapping to response.selector.xpath() and response.selector.css()

也就是可以很方便的,以交互的形式来查看xpath选择是否正确。之前是用FireFox的F12来选择的,但是并不能保证每次都能正确的选择出内容。

也可使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy shell ’http://scrapy.org’ --nolog
# 参数 --nolog 没有日志

(2)示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scrapy import Spider
from scrapy_test.items import DmozItem


class DmozSpider(Spider):
    name = 'dmoz'
    allowed_domains = ['dmoz.org']
    start_urls = ['http://www.dmoz.org/Computers/Programming/Languages/Python/Books/',
                  'http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/,'
                  '']

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('text()').extract()
            yield item

(3)保存文件

可以使用,保存文件。格式可以 json,xml,csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy crawl -o 'a.json' -t 'json'

(4)使用模板创建spider

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy genspider baidu baidu.com

# -*- coding: utf-8 -*-
import scrapy


class BaiduSpider(scrapy.Spider):
    name = "baidu"
    allowed_domains = ["baidu.com"]
    start_urls = (
        'http://www.baidu.com/',
    )

    def parse(self, response):
        pass

这段先这样吧,记得之前5个的,现在只能想起4个来了. :-(

千万记得随手点下保存按钮。否则很是影响心情的(⊙o⊙)!


(二)高级 -- scrapy.contrib.spiders.CrawlSpider

(1)CrawlSpider

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class scrapy.contrib.spiders.CrawlSpider
    This is the most commonly used spider for crawling regular websites, as it provides a convenient mechanism for
    following links by defining a set of rules. It may not be the best suited for your particular web sites or project,
    but it’s generic enough for several cases, so you can start from it and override it as needed for more custom
    functionality, or just implement your own spider.
    Apart from the attributes inherited from Spider (that you must specify), this class supports a new attribute:
rules
    Which is a list of one (or more) Rule objects. Each Rule defines a certain behaviour for crawling the
    site. Rules objects are described below. If multiple rules match the same link, the first one will be used,
    according to the order they’re defined in this attribute.
    This spider also exposes an overrideable method:
parse_start_url(response)
    This method is called for the start_urls responses. It allows to parse the initial responses and must return
    either a Item object, a Request object, or an iterable containing any of them.

(2)例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
import scrapy


class TestSpider(CrawlSpider):
    name = 'test'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/']
    rules = (
        # 元组
        Rule(LinkExtractor(allow=('category\.php', ), deny=('subsection\.php', ))),
        Rule(LinkExtractor(allow=('item\.php', )), callback='pars_item'),
    )

    def parse_item(self, response):
        self.log('item page : %s' % response.url)
        item = scrapy.Item()
        item['id'] = response.xpath('//td[@id="item_id"]/text()').re('ID:(\d+)')
        item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()
        item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()
        return item

(3)其他的。

其他的还有 XMLFeedSpider,这个有空再研究吧。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class scrapy.contrib.spiders.XMLFeedSpider

class scrapy.contrib.spiders.CSVFeedSpider

class scrapy.contrib.spiders.SitemapSpider

(三)选择器

>>> from scrapy.selector import Selector >>> from scrapy.http import HtmlResponse 可以灵活的使用 .css() 和 .xpath() 来快速的选取目标数据

!!!关于选择器,需要好好研究一下。xpath() 和 css() ,还要继续熟悉 正则.

当通过class来进行选择的时候,尽量使用 css() 来选择,然后再用 xpath() 来选择元素的熟悉


(四)Item Pipeline

After an item has been scraped by a spider, it is sent to the Item Pipeline which process it through several components that are executed sequentially.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Typical use for item pipelines are:
    • cleansing HTML data # 清除HTML数据
    • validating scraped data (checking that the items contain certain fields) # 验证数据
    • checking for duplicates (and dropping them) # 检查重复
    • storing the scraped item in a database # 存入数据库

(1)验证数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scrapy.exceptions import DropItem

class PricePipeline(object):
    vat_factor = 1.5
    def process_item(self, item, spider):
        if item['price']:
            if item['price_excludes_vat']:
                item['price'] *= self.vat_factor
        else:
            raise DropItem('Missing price in %s' % item)

(2)写Json文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json

class JsonWriterPipeline(object):
    def __init__(self):
        self.file = open('json.jl', 'wb')
    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + '\n'
        self.file.write(line)
        return  item

(3)检查重复

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scrapy.exceptions import DropItem

class Duplicates(object):
    def __init__(self):
        self.ids_seen = set()
    def process_item(self, item, spider):
        if item['id'] in self.ids_seen:
            raise DropItem('Duplicate item found : %s' % item)
        else:
            self.ids_seen.add(item['id'])
            return item

至于将数据写入数据库,应该也很简单。在 process_item 函数中,将 item 存入进去即可了。

看了一晚上,看到85页。 算是把基本的看的差不多了。

-- 2014年08月21日06:39:41


(五)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
scrapy框架
scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)
全栈程序员站长
2022/09/07
1.6K0
scrapy框架
自学Python十二 战斗吧Scrapy!
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
叁金
2018/09/04
6770
自学Python十二  战斗吧Scrapy!
爬虫——scrapy入门
scrapy 安装scrapy pip install scrapy windows可能安装失败,需要先安装c++库或twisted,pip install twisted 创建项目 scrapy startproject tutorial 该命令将会创建包含下列内容的 tutorial 目录: tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py
py3study
2020/01/19
5770
Scrapy框架的使用之Scrapy通用爬虫
通过Scrapy,我们可以轻松地完成一个站点爬虫的编写。但如果抓取的站点量非常大,比如爬取各大媒体的新闻信息,多个Spider则可能包含很多重复代码。 如果我们将各个站点的Spider的公共部分保留下来,不同的部分提取出来作为单独的配置,如爬取规则、页面解析方式等抽离出来做成一个配置文件,那么我们在新增一个爬虫的时候,只需要实现这些网站的爬取规则和提取规则即可。 本节我们就来探究一下Scrapy通用爬虫的实现方法。 一、CrawlSpider 在实现通用爬虫之前,我们需要先了解一下CrawlSpider
崔庆才
2018/06/25
2.6K0
爬虫之scrapy框架
  何为框架,就相当于一个封装了很多功能的结构体,它帮我们把主要的结构给搭建好了,我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据,提取数据的框架,我们熟知爬虫总共有四大部分,请求、响应、解析、存储,scrapy框架都已经搭建好了。scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架,scrapy使用了一种非阻塞的代码实现并发的,结构如下:
py3study
2020/01/17
1.3K0
Scrapy框架
简单网页的爬取可以利用re模块,复杂网页的爬取对于内容的提取则会显得十分麻烦。Scrapy框架是python下的一个爬虫框架,因为它足够简单方便受到人们的青睐。
爱编程的小明
2022/09/05
4910
Scrapy框架
Scrapy爬取自己的博客内容
根据给定的文章内容,撰写摘要总结。
古时的风筝
2018/01/08
8690
Scrapy爬取自己的博客内容
(原创)七夜在线音乐台开发 第三弹 爬虫篇
上一篇咱们讲到了七夜音乐台的需求和所需要的技术。咱们今天就讲一下爬虫,为什么要讲爬虫,因为音乐台的数据源需要通过爬虫来获取,不可能手动来下载。下图是一个网络爬虫的基本框架: 网络爬虫的基本工作流程如下
七夜安全博客
2018/06/26
1.1K0
python爬虫–scrapy(再探)
— 图片:xpath解析出图片src的属性值。单独的对图片地址发起请求获取图片二进制类型的数据。
全栈程序员站长
2021/04/21
6510
python爬虫–scrapy(再探)
Python爬虫之scrapy框架学习
scrapy安装步骤 pip install wheel 下载twisted : 地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted (选择对应的版本) 安装twisted : pip install aiohttp-3.8.1-cp38-cp38-win_amd64.whl pip install pywin32 pip install scrapy 测试终端输入: scrapy 创建工程 终端输入: scrapy startproject fi
shaoshaossm
2022/12/26
7050
python爬虫----(5. scrapy框架,综合应用及其他)
由于之前使用Win,没使用过shell的。目前只是了解。以后再补充。找到几个不错的教程
lpe234
2020/07/27
4270
Scrapy爬虫入门
快两周了,还没缓过来劲,python 黑帽的系列教程今天才开始捡起来。不过工作又要忙了,晚上照顾玄小魂,白天敲代码,抽时间写文章,真的有点心力交瘁。不过没关系,一切都会好起来的。 ---------------------------------------------------------------------------------------------------- 本篇文章,是转载过来的,Python黑客编程的后续课程也会详细讨论Scrapy的使用的。 原文链接:http://chenqx.
用户1631416
2018/04/12
1.2K0
Scrapy爬虫入门
阅读《精通Python爬虫框架Scrapy》
书里内容比较高深,需要了解一些比较简单的Scrapy内容可以看一下我github上的一些例子:https://github.com/zx490336534/spider-review
zx钟
2021/03/10
4930
阅读《精通Python爬虫框架Scrapy》
[爬虫]scrapy框架
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
周小董
2019/03/25
1.3K0
[爬虫]scrapy框架
Python爬虫框架Scrapy获得定向打击批量招聘信息
爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是。抓取特定站点网页的HTML数据。只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址,所以,怎样保证我们抓取到了站点的全部HTML页面就是一个有待考究的问题了。
全栈程序员站长
2022/07/06
3220
Python爬虫框架Scrapy获得定向打击批量招聘信息
python网络爬虫(14)使用Scrapy搭建爬虫框架
爬虫框架也许能简化工作量,提高效率等。scrapy是一款方便好用,拓展方便的框架。
嘘、小点声
2019/07/31
6510
python scrapy 实战简书网站
1:创建项目 2:创建爬虫 3:编写start.py文件用于运行爬虫程序 # -*- coding:utf-8 -*- #作者: baikai #创建时间: 2018/12/14 14:09
py3study
2020/01/20
1.1K0
python scrapy 实战简书网站
Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网站网页的HTML数据。不过由于一个网站的网页很多,而我们又不可能事先知道所有网页的URL地址,所以,如何保证我们抓取到了网站的所有HTML页面就是一个有待考究的问题了。一般的方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样。 Scrapy是一个基于T
机器学习AI算法工程
2018/03/13
1.1K0
Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
Python Scrapy框架之CrawlSpider爬虫
一般写爬虫是自己在解析完整个页面后获取下一页的url,然后重新发送一个请求。有时候我们想要这样做,只要满足某个条件的url,都给我进行爬取。那么这时候我们就可以通过CrawlSpider来帮我们完成了。CrawlSpider继承自Spider,只不过是在之前的基础之上增加了新的功能,可以定义爬取的url的规则,以后scrapy碰到满足条件的url都进行爬取,而不用手动的yield Request。
Python知识大全
2020/02/13
5810
Python Scrapy框架之CrawlSpider爬虫
外行学 Python 爬虫 第十篇 爬虫框架Scrapy
前面几个章节利用 python 的基础库实现网络数据的获取、解构以及存储,同时也完成了简单的数据读取操作。在这个过程中使用了其他人完成的功能库来加快我们的爬虫实现过程,对于爬虫也有相应的 python 框架供我们使用「不重复造轮子是程序员的一大特点」,当我们了解爬虫的实现过程以后就可以尝试使用框架来完成自己的爬虫,加快开发速度。
keinYe
2019/08/15
1.2K0
相关推荐
scrapy框架
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验