iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python的Scrapy爬虫框架简单学习笔记
  • 485
分享到

Python的Scrapy爬虫框架简单学习笔记

爬虫学习笔记框架 2022-06-04 19:06:03 485人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、简单配置,获取单个网页上的内容。 (1)创建scrapy项目 scrapy startproject getblog (2)编辑 items.py # -*- coding: utf-8

一、简单配置,获取单个网页上的内容。
(1)创建scrapy项目


scrapy startproject getblog

(2)编辑 items.py


# -*- coding: utf-8 -*-
 
# Define here the models for your scraped items
#
# See documentation in:
# Http://doc.scrapy.org/en/latest/topics/items.html
 
from scrapy.item import Item, Field
 
class Blogitem(Item):
  title = Field()
  desc = Field()

(3)在 spiders 文件夹下,创建 blog_spider.py

需要熟悉下xpath选择,感觉跟Jquery选择器差不多,但是不如JQuery选择器用着舒服( w3school教程: http://www.w3school.com.cn/xpath/ )。


# coding=utf-8
 
from scrapy.spider import Spider
from getblog.items import BlogItem
from scrapy.selector import Selector
 
 
class BlogSpider(Spider):
  # 标识名称
  name = 'blog'
  # 起始地址
  start_urls = ['http://www.cnblogs.com/']
 
  def parse(self, response):
    sel = Selector(response) # Xptah 选择器
    # 选择所有含有class属性,值为‘post_item'的div 标签内容
    # 下面的 第2个div 的 所有内容
    sites = sel.xpath('//div[@class="post_item"]/div[2]')
    items = []
    for site in sites:
      item = BlogItem()
      # 选取h3标签下,a标签下,的文字内容 ‘text()'
      item['title'] = site.xpath('h3/a/text()').extract()
      # 同上,p标签下的 文字内容 ‘text()'
      item['desc'] = site.xpath('p[@class="post_item_summary"]/text()').extract()
      items.append(item)
    return items

(4)运行,


scrapy crawl blog # 即可

(5)输出文件。

在 settings.py 中进行输出配置。


# 输出文件位置
FEED_URI = 'blog.xml'
# 输出文件格式 可以为 JSON,xml,csv
FEED_FORMAT = 'xml'

输出位置为项目根文件夹下。

二、基本的 -- scrapy.spider.Spider

(1)使用交互shell


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来选择的,但是并不能保证每次都能正确的选择出内容。

也可使用:


scrapy shell 'http://scrapy.org' --nolog
# 参数 --nolog 没有日志

(2)示例


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


scrapy crawl -o 'a.json' -t 'json'

(4)使用模板创建spider


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

例子


#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

其他的还有 XMLFeedSpider

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

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)验证数据


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文件


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)检查重复


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 存入进去即可了。

--结束END--

本文标题: Python的Scrapy爬虫框架简单学习笔记

本文链接: https://www.lsjlt.com/news/15486.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python的Scrapy爬虫框架简单学习笔记
    一、简单配置,获取单个网页上的内容。 (1)创建scrapy项目 scrapy startproject getblog (2)编辑 items.py # -*- coding: utf-8 ...
    99+
    2022-06-04
    爬虫 学习笔记 框架
  • Python爬虫框架Scrapy 学习
    开发环境PyCharm目标网站和上一次一样,可参考:http://dingbo.blog.51cto.com/8808323/1597695 但是这次不是在单个文件中运行,而是创建一个scrapy项目1.使用命令行工具创建scrapy项目的...
    99+
    2023-01-31
    爬虫 框架 Python
  • Python爬虫框架Scrapy简介
    在爬虫的路上,学习scrapy是一个必不可少的环节。也许有好多朋友此时此刻也正在接触并学习scrapy,那么很好,我们一起学习。开始接触scrapy的朋友可能会有些疑惑,毕竟是一个框...
    99+
    2022-11-11
  • Python 爬虫学习笔记之单线程爬虫
    介绍 本篇文章主要介绍如何爬取麦子学院的课程信息(本爬虫仍是单线程爬虫),在开始介绍之前,先来看看结果示意图 怎么样,是不是已经跃跃欲试了?首先让我们打开麦子学院的网址,然后找到麦子学院的全部课程信息,像...
    99+
    2022-06-04
    爬虫 单线程 学习笔记
  • python简单爬虫笔记
    python模拟游览器爬取相关页面 import urllib.request url="https://blog.51cto.com/itstyle/2146899" #模拟浏览器 headers=("User-Agent","Moz...
    99+
    2023-01-31
    爬虫 简单 笔记
  • python爬虫框架Scrapy基本应用学习教程
    在正式编写爬虫案例前,先对 scrapy 进行一下系统的学习。 scrapy 安装与简单运行 使用命令 pip install scrapy 进行安装,成功之后,还需要随手收藏几个网...
    99+
    2022-11-12
  • Python 爬虫学习笔记之多线程爬虫
    XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊。其实我个人认...
    99+
    2022-06-04
    爬虫 之多 线程
  • python爬虫Scrapy框架:媒体管道原理学习分析
    目录一、媒体管道1.1、媒体管道的特性媒体管道实现了以下特性:图像管道具有一些额外的图像处理功能:1.2、媒体管道的设置二、ImagesPipeline类简介三、小案例:使用图片管道...
    99+
    2022-11-12
  • Python的爬虫程序编写框架Scrapy入门学习教程
    1. Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了页面抓取 (更确切来说, 网络抓取...
    99+
    2022-06-04
    爬虫 框架 入门
  • Python爬虫框架-scrapy的使用
    Scrapy Scrapy是纯python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,并且包含了...
    99+
    2022-06-02
    Python爬虫框架scrapy使用 Python scrapy使用
  • Python爬虫基础之简单说一下scrapy的框架结构
    scrapy 框架结构 思考 scrapy 为什么是框架而不是库? scrapy是如何工作的? 项目结构 在开始爬取之前,必须创建一个新的Scrapy项目。进入您打算存储代码的目录...
    99+
    2022-06-02
    scrapy的框架结构 Python scrapy
  • 【Python | 边学边敲边记】第四次:初识爬虫框架Scrapy
    一、前言本系列上一篇:【Python | 边学边敲边记】第三次:URL去重策略今天给大家分享的是,Python里的爬虫框架Scrapy学习,包含python虚拟环境的搭建、虚拟环境的使用、Scrapy安装方法详解、Scrapy基本使用、Sc...
    99+
    2023-06-02
  • python爬虫框架scrapy代理中间件掌握学习教程
    目录代理的使用场景使用 HttpProxyMiddleware 中间件代理的使用场景 编写爬虫代码的程序员,永远绕不开就是使用代理,在编码过程中,你会碰到如下情形: 网络不好,需要代...
    99+
    2022-11-12
  • python web框架学习笔记
    一、web框架本质 1.基于socket,自己处理请求 #!/usr/bin/env python3 #coding:utf8 import socket def handle_request(cli...
    99+
    2022-06-04
    学习笔记 框架 python
  • Python爬虫框架scrapy的使用示例
    这篇文章主要介绍了Python爬虫框架scrapy的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python可以做什么Python是一种编程语言,内置了许多有效的工...
    99+
    2023-06-14
  • 怎么使用Python的Scrapy爬虫框架
    本篇内容介绍了“怎么使用Python的Scrapy爬虫框架”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Scrapy是Python开发的一个...
    99+
    2023-06-02
  • python爬虫Mitmproxy安装使用学习笔记
    目录一、简介和安装1.1、概念和作用概念作用1.2、安装1.3、工具介绍二、设置代理2.1、PC端设置代理2.2、PC端安装证书2.3、移动端设置代理三、 mitmdump3.1、插...
    99+
    2022-11-12
  • 使用Python实现简单的爬虫框架
    目录一、请求网页二、解析 HTML三、构建爬虫框架爬虫是一种自动获取网页内容的程序,它可以帮助我们从网络上快速收集大量信息。在本文中,我们将学习如何使用 Python 编写一个简单的...
    99+
    2023-05-19
    Python如何实现爬虫框架 Python爬虫框架 Python爬虫
  • python萌新爬虫学习笔记【建议收藏】
    文章目录 1. 如何何请求解析url2. 如何获取标签里面的文本3. 如何解析JSON格式4. 如何添加常用的header5. 如何合并两个div6. 如何删除html dom的部分结构7. ...
    99+
    2023-09-20
    python 爬虫 学习
  • Python 爬虫学习笔记之正则表达式
    正则表达式的使用 想要学习 Python 爬虫 , 首先需要了解一下正则表达式的使用,下面我们就来看看如何使用。 . 的使用这个时候的点就相当于一个占位符,可以匹配任意一个字符,什么意思呢?看个例子就知道 ...
    99+
    2022-06-04
    爬虫 学习笔记 正则表达式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作