`
zhouxi2010
  • 浏览: 50159 次
  • 性别: 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',...

    网页抓取DEMO-可以运行的一个java项目

    网页抓取的简单demo,可以运行的一个项目,适合对网页抓取感兴趣的初学者,介绍了如何抓取到网页的页面

    Python程序设计:Scrapy爬虫框架的使用.pptx

    知识点:Scrapy爬虫框架使用 Scrapy爬虫框架使用 scrapy爬虫开发的基本步骤 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 明确目标 (编写items.py):明确你想要抓取的目标 制作爬虫 (spiders/...

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

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

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

    刮的 修补 Scrapy Python 库以进行网页抓取 有关详细信息,请参阅 nyvendors/readme

    attercop:使用 core.async 受 Scrapy 启发的网页抓取库

    使用 core.async 受 Scrapy 启发的网页抓取库。 警告 我开始这个项目主要是作为学习 core.async 的练习。 我以前使用过scrapy,但这是一个大项目,而attercop 主要只涵盖了我自己使用过的scrapy 的那些功能。 不推荐...

    基于Scrapy与Django的职位画像系统源码——数据抓取与Echarts可视化

    2. 数据可视化:通过Django框架与Echarts相结合,对抓取到的职位数据进行多样化、交互式的图表展示。 技术构成: - Python:核心编程语言,用于构建整个系统的后端逻辑。 - HTML:构建网页结构,共108个文件。 - ...

    使用 Python 进行网页抓取:从现代 Web 中提取数据,第三版

    第一部分重点介绍网络抓取机制:使用 Python 从网络服务器请求信息,对服务器响应进行基本处理,并以自动方式与网站交互。第二部分探讨了各种更具体的工具和应用程序,以适应您可能遇到的任何网络抓取场景。 解析...

    网页爬虫工具能够抓取网页信息的软件

    网页爬虫工具能够抓取网页信息的软件网页爬虫工具[PClawer] V1.1 绿色版 PClawer 是一款定制功能较强的网页抓取工具,需要用到正则表达式,适合高级用户使用

    portia:Scrapy的视觉抓取

    使用Portia,您可以为网页添加注释,以标识要提取的数据,Portia将基于这些注释了解如何从相似页面中抓取数据。 跑Portia 运行Portia的最简单方法是使用 : 您可以通过运行以下命令使用Docker和官方Portia-image...

    Webscraping_scrapy:使用scrapy从互联网上抓取信息

    如何使用 Scrapy 蜘蛛抓取网站 介绍 Scrapy ( ) 是一个强大的工具,可以跨不同的网页收集信息。 Scrapy 从一个网页开始,释放spiders ,对目标网站进行深度优先搜索。 在这个例子中,我们将刮掉烂番茄并获取关于 ...

    scrapy-api:使用scrapy创建api

    Scrapy用于网页抓取,flask Web框架用于提供json响应。 注意:从使用此官方项目。 它提供了很多选项和功能。 用法 $ Python main.py 在浏览器中打开 要求 刮y的烧瓶 例子 在此示例中,我为engadget.com创建了一个...

    scrapy抓取数据存储至本地mysql数据库-大众点评爬虫.zip

    爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...

    lucene 网页抓取,模拟搜索引擎

    lucene 网页抓取,模拟搜索引擎。web开发项目,部署即可,运行

    scrapy爬虫项目

    抓取网页的一般方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历...

    使用 Python 进行 Web 抓取实践:使用有效的 Python 技术从 Web 中提取高质量数据

    掌握与网页抓取和数据提取相关的 Python 编程基础知识 获得对网络爬虫进行编码、以所需格式存储数据以及专业地使用数据的技能 网络抓取是从网络中提取数据的强大工具,但对于没有技术背景的人来说,它可能会令人...

    scrapy爬虫之贝壳房产.zip

    scrapy+mysql+html+pyecharts 数据爬取和数据分析和最终网页呈现

    web-scraper:使用Scrapy,从网页上抓取您项目的数据

    web-scraper:使用Scrapy,从网页上抓取您项目的数据

    基于Python的scrapy的使用

    也可以从中提取出链接,让Scrapy继续抓取下一个页面 管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化信息、验证实体的有效性、清洗信息等。当页面被爬虫解析后,将被发送到管道,并经过特定的...

    scrapy简单的多层页面爬取程序

    恩..简单的scrapy简单的多层页面爬取程序,适用于初学者想尝试多层页面爬取又没有代码看的人,明天大概会写一篇博客分享大概的流程吧,到时候会有部分关键源码

Global site tag (gtag.js) - Google Analytics