`
zhouxi2010
  • 浏览: 50783 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用scrapy进行网页抓取

阅读更多

最近用scrapy来进行网页抓取,对于pythoner来说它用起来非常方便,详细文档在这里:http://doc.scrapy.org/en/0.14/index.html

要想利用scrapy来抓取网页信息,需要先新建一个工程,scrapy startproject myproject

工程建立好后,会有一个myproject/myproject的子目录,里面有item.py(由于你要抓取的东西的定义),pipeline.py(用于处理抓取后的数据,可以保存数据库,或是其他),然后是spiders文件夹,可以在里面编写爬虫的脚本.

这里以爬取某网站的书籍信息为例:

item.py如下:

 

from scrapy.item import Item, Field

class BookItem(Item):
    # define the fields for your item here like:
    name = Field()
    publisher = Field()
    publish_date = Field()
    price = Field()

 

我们要抓取的东西都在上面定义好了,分别是名字,出版商,出版日期,价格,

下面就要写爬虫去网战抓取信息了,

spiders/book.py如下:

 

from urlparse import urljoin
import simplejson

from scrapy.http import Request
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector

from myproject.items import BookItem

class BookSpider(CrawlSpider):
    name = 'bookspider'
    allowed_domains = ['test.com']
    start_urls = [
        "http://test_url.com",   #这里写开始抓取的页面地址(这里网址是虚构的,实际使用时请替换)
    ]
    rules = (
        #下面是符合规则的网址,但是不抓取内容,只是提取该页的链接(这里网址是虚构的,实际使用时请替换)
        Rule(SgmlLinkExtractor(allow=(r'http://test_url/test?page_index=\d+'))),
        #下面是符合规则的网址,提取内容,(这里网址是虚构的,实际使用时请替换)
        Rule(SgmlLinkExtractor(allow=(r'http://test_rul/test?product_id=\d+')), callback="parse_item"),
    )

        
    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item = BookItem()
        item['name'] = hxs.select('//div[@class="h1_title book_head"]/h1/text()').extract()[0]
        item['author'] = hxs.select('//div[@class="book_detailed"]/p[1]/a/text()').extract()
        publisher = hxs.select('//div[@class="book_detailed"]/p[2]/a/text()').extract()
        item['publisher'] = publisher and publisher[0] or ''
        publish_date = hxs.select('//div[@class="book_detailed"]/p[3]/text()').re(u"[\u2e80-\u9fffh]+\uff1a([\d-]+)")
        item['publish_date'] = publish_date and publish_date[0] or ''
        prices = hxs.select('//p[@class="price_m"]/text()').re("(\d*\.*\d*)")
        item['price'] = prices and prices[0] or ''
        return item

然后信息抓取后,需要保存,这时就需要写pipelines.py了(用于scapy是用的twisted,所以具体的数据库操作可以看twisted的资料,这里只是简单介绍如何保存到数据库中):

 

from scrapy import log
#from scrapy.core.exceptions import DropItem
from twisted.enterprise import adbapi
from scrapy.http import Request
from scrapy.exceptions import DropItem
from scrapy.contrib.pipeline.images import ImagesPipeline
import time
import MySQLdb
import MySQLdb.cursors


class MySQLStorePipeline(object):

    def __init__(self):
        self.dbpool = adbapi.ConnectionPool('MySQLdb',
                db = 'test',
                user = 'user',
                passwd = '******',
                cursorclass = MySQLdb.cursors.DictCursor,
                charset = 'utf8',
                use_unicode = False
        )

    def process_item(self, item, spider):
        
        query = self.dbpool.runInteraction(self._conditional_insert, item)
        
        query.addErrback(self.handle_error)
        return item
  
    def _conditional_insert(self, tx, item):
        if item.get('name'):
            tx.execute(\
                "insert into book (name, publisher, publish_date, price ) \
                 values (%s, %s, %s, %s)",
                (item['name'],  item['publisher'], item['publish_date'], 
                item['price'])
            )
 

完成之后在setting.py中添加该pipeline:

 

ITEM_PIPELINES = ['myproject.pipelines.MySQLStorePipeline']

 最后运行scrapy crawl bookspider就开始抓取了

 

分享到:
评论

相关推荐

    Scrapy-Test-Scraping:此项目使用Scrapy从模拟抓取网站抓取数据

    使用Scrapy进行网页抓取这是一个Scrapy项目,用于从抓取模拟图书数据要求: ( pip3 install scrapy )提取数据该项目提取书名,价格,等级和网址。 提取的数据类似于以下示例: { 'title': 'A Light in the Attic',...

    用scrapy做爬虫抓取豆瓣读书的书籍信息到本地数据库

    在这个项目中,我们将使用Scrapy来抓取豆瓣读书(Douban Books)上的书籍信息,并将其存储到本地数据库中。这个过程涉及多个步骤,包括设置Scrapy项目、定义爬虫、解析网页内容、处理请求和响应,以及将数据存入...

    scrapy 抓取多级页面的某子二手车

    Scrapy是一个强大的Python爬虫框架,它为开发者提供了一个高效且结构化的抓取系统,能够方便地抓取网页数据并进行处理。在这个“scrapy抓取多级页面的某子二手车”项目中,我们将深入探讨如何利用Scrapy来实现对二手...

    基于scrapy的百度音乐抓取爬虫

    此外,还需要处理分页问题,使用XPath选择器定位到下一页的链接,并进行递归抓取。 - **XPath选择器**: ```python nextpage = Selector(response).xpath('//*[contains(@class,"page-navigator-next")]') ``` ...

    scrapy:修补 Scrapy Python 库以进行网页抓取

    在使用 Scrapy 进行网页抓取时,可能会遇到各种问题,需要对其进行修复和优化以确保其正常运行。本篇文章将深入探讨如何修补 Scrapy 库,以及在过程中可能涉及的 JavaScript 处理。 首先,了解 Scrapy 的基本架构至...

    Python-Scrapy练习项目利用Scrapy抓取古诗

    在本项目中,我们将深入探讨如何使用Python的Scrapy框架来抓取古诗数据,包括唐诗和宋词,最终将这些数据存储为JSON格式。Scrapy是一个强大的、专为爬取网站并提取结构化数据而设计的工具,非常适合进行大规模的数据...

    python 基于Scrapy框架抓取图片

    Python中的Scrapy框架是一个强大的网页抓取和数据提取工具,专为快速开发Web爬虫而设计。本教程将深入探讨如何使用Scrapy来抓取并保存指定命名规则的图片。 一、Scrapy简介 Scrapy是用Python编写的,开源且可扩展的...

    Scrapy demo 爬取某房产网站源码

    总的来说,这个项目展示了如何利用Scrapy进行网页抓取,再借助SQLAlchemy将抓取到的数据结构化并存储到数据库中,是学习和实践Web数据处理的一个很好的实例。对于想要提升爬虫技能和数据库操作能力的开发者来说,这...

    网页抓取小工具

    5. **爬虫框架**:为了简化网页抓取的编程工作,有许多现成的爬虫框架,如Python的Scrapy、BeautifulSoup,它们提供了便捷的接口和功能,使开发者可以快速构建起自己的抓取系统。 6. **代理与反反爬策略**:为了...

    Python 爬虫Scrapy课件源码

    这个压缩包文件包含的"Python 爬虫Scrapy课件源码"显然是一个教学资源,用于帮助学习者掌握如何使用Scrapy进行网页抓取。 Scrapy的核心组件包括: 1. **Spider(爬虫)**:爬虫是Scrapy中的主要工作单元,它定义了...

    网页抓取例子

    标签“源码”和“工具”暗示我们将讨论与编程相关的代码片段,可能是使用某种特定的网页抓取库或框架,并且可能会涉及到一个实际的工具,如Python的BeautifulSoup或Scrapy框架。 在压缩包文件中,有一个名为"oh.jsp...

    使用scrapy,redis,mongodb实现的一个分布式网络爬虫[整理].pdf

    该爬虫系统使用 Scrapy 框架来抓取网页数据,并使用 Redis 来实现分布式爬虫的任务队列和状态管理。同时,使用 MongoDB 来存储抓取的数据,并使用 GridFS 来存储大文件。 分布式爬虫架构 该爬虫系统的架构主要包括...

    Python-使用pythonscrapy抓取拉钩java招聘信息并制作成词云

    在本文中,我们将深入探讨如何使用Python的Scrapy框架来抓取拉勾网上的Java招聘信息,并将这些数据处理成词云。首先,我们要了解Scrapy,这是一个强大的、用于Web抓取和信息提取的Python框架,它提供了高效且灵活的...

    c# 网页抓取分析 表格图形生成

    本主题聚焦于利用C#进行网页抓取、数据分析以及表格和图形生成,这些都是现代数据驱动应用的重要组成部分。 首先,我们要理解网页抓取的概念。网页抓取,也称为网络爬虫或数据抓取,是指通过自动化程序从互联网上...

    Python-scrapy抓取糗事百科热门

    Scrapy是一个用Python编写的开放源代码框架,专为数据抓取和数据处理而设计。它包含了一系列组件,如下载器、Spider、Item、Item Pipeline、Middleware等,这些组件协同工作,帮助我们高效地进行网络爬取。 2. **...

    Python网页抓取讲解.pptx

    3. 使用 Scrapy 库:Scrapy 库是一个流行的网页抓取框架,可以用来构建高性能的网页抓取系统。 三、网页抓取的步骤 网页抓取的步骤主要包括: 1. 发送 HTTP 请求:使用 requests 库发送 HTTP 请求到目标网站。 2....

    scrapy结合selenium解析动态页面的实现

    虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个...

    基于scrapy的金融新闻抓取及舆情分析.rar

    Scrapy是一个强大的网页抓取和数据提取框架,适用于构建爬虫程序,而在这个项目中,它被用来从金融网站获取新闻数据。 首先,`sentiment_analysis.py`和`sentiment_analysis_all.py`可能包含了对抓取到的新闻进行...

    网页抓取软件(-------)

    网页抓取,也被称为网络爬虫或数据抓取,是一种自动化技术,用于从互联网上大量收集和处理数据。这项技术通常被数据分析师、研究人员、市场营销人员以及网站管理员用来获取特定类型的信息,例如市场趋势、用户行为...

    基于Python和Echarts职位画像系统,用Scrapy抓取招聘数据,使用Django+echarts完成数据可视化.zip

    2. **Scrapy**: Scrapy是一个强大的Python爬虫框架,用于高效地抓取网页数据。它提供了结构化的数据处理管道(Pipeline)和中间件(Middleware)机制,使得开发者可以便捷地构建和管理网络爬虫项目。在这个项目中,...

Global site tag (gtag.js) - Google Analytics