`

scrapy 提取html 提取正文

 
阅读更多
html="".join(response.xpath('//html').extract())

content = "".join(response.xpath('//div[@id="cnblogs_post_body"]//text()').extract())

完整代码如下:

#coding=utf-8
import re
import json
import scrapy
import urllib
from scrapy.selector import Selector
try:
    from scrapy.spider import Spider
except:
    from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor as sle
from cnblogs.items import *


class CnblogsSpider(CrawlSpider):
    #定义爬虫的名称
    name = "CnblogsSpider"
    #定义允许抓取的域名,如果不是在此列表的域名则放弃抓取
    allowed_domains = ["cnblogs.com"]
    #定义抓取的入口url
    start_urls = [
       "http://www.cnblogs.com/rwxwsblog/default.html?page=1"
    ]
    # 定义爬取URL的规则,并指定回调函数为parse_item
    rules = [
        Rule(sle(allow=("/rwxwsblog/default.html\?page=2")), #\d{1,}此处要注意?号的转换,复制过来需要对?号进行转换。
          follow=True,
          callback='parse_item')
    ]
    print "**********CnblogsSpider**********"
    #定义回调函数
    #提取数据到Items里面,主要用到XPath和CSS选择器提取网页数据
    def parse_item(self, response):
        #print "-----------------"

        sel = Selector(response)
        base_url = get_base_url(response)
        postTitle = sel.css('div.day div.postTitle')
        #print "=============length======="
        postCon = sel.css('div.postCon div.c_b_p_desc')
       #标题、url和描述的结构是一个松散的结构,后期可以改进
        for index in range(len(postTitle)):
            item = CnblogsItem()
            item['title'] = postTitle[index].css("a").xpath('text()').extract()[0]
            #print item['title'] + "***************\r\n"
            item['link'] = postTitle[index].css('a').xpath('@href').extract()[0]
            item['listUrl'] = base_url
            item['desc'] = postCon[index].xpath('text()').extract()[0]
            #print base_url + "********\n"

            #print repr(item).decode("unicode-escape") + '\n'

            yield scrapy.Request(item['link'] , self.parse_details , meta={'item': item})

            # print repr(item).decode("unicode-escape") + '\n'


    def parse_details(self , response):
        items = []
        content1 = []
        item = response.meta['item']

        sel = Selector(response)
        #html =repr(sel.xpath('//html').extract()[0]).decode("unicode-escape")
        #html = repr(sel.xpath('//html').extract()[0]).decode("unicode_escape")
        #html =response.xpath('//div[@id="cnblogs_post_body"]/*').extract()
        #html =response.xpath('//div[@id="cnblogs_post_body"]//node()').extract()

        html="".join(response.xpath('//html').extract())

       # content = sel.xpath('//div[@class="post"]//text()').extract()[0].encode('utf-8')
        #content = repr(sel.xpath('//div[@class="post"]//text()')j.extract()).decode("unicode-escape").encode('utf-8')
       # content = repr(sel.xpath('//div[@class="post"]//text()').extract()).decode("unicode-escape")

        #content = "".join(response.xpath('//div[@class="post"]//text()').extract())

        content = "".join(response.xpath('//div[@id="cnblogs_post_body"]//text()').extract())


        #print 'html:'+html.decode("unicode-escape")
        #print 'html:' + html.encode('utf-8')
        #print 'content:' + content

       # print urllib.unquote(str(html))
        #print 'content:' + content.encode('raw_unicode_escape')

        #content = repr(sel.xpath('//div[@class="post"]//text()').extract())
        #
        #
        #
        # for t in content:
        #     #content1.append(t.encode("utf-8"))
        #     print(t.encode("utf-8"))
        #content = repr(sel.xpath('//div[@class="post"]//text()').extract())
       # content =repr(sel.xpath('//div[@class="post"]//text()').extract().encode('utf-8'))

        #content = repr(sel.css('div.post').xpath('text()').extract()).decode("unicode-escape")
        #content = unicode.encode( content , 'utf-8')

        #content='content'#repr(content).decode("unicode-escape")
        item['html'] =html
        item['content'] = content

        print 'link::'+item['link']
        print 'desc::'+item['desc']

        #str = json.dumps(html, ensure_ascii=False) + "\n";
        #str = unicode.decode(str, 'utf-8').encode('gb2312');

        #s=html#item['content']
        #print 'html:' + html

        #
        # if isinstance(s, unicode):
        #     # s=u"中文"
        #     print s.encode('utf-8')
        # else:
        #     # s="中文"
        #     print s.decode('utf-8').encode('gb2312')


        #print 'content:' + item['content']
        # populate more `item` fields
        items.append(item)

        return items
分享到:
评论

相关推荐

    scrapy 文档--HTML版本

    Scrapy支持XPath和CSS选择器来提取网页元素。XPath是一种在XML文档中查找信息的语言,CSS选择器则类似CSS用于选取HTML元素的规则。 5. **Item和Item Pipeline**: - `Item`是Scrapy中的数据容器,类似于Python...

    scrapy

    8. **Selectors(选择器)**:Scrapy内置了强大的XPath和CSS选择器,用于从HTML或XML文档中提取数据。 安装Scrapy: 首先,确保已经安装了Python。在命令行中输入以下命令来安装Scrapy: ```bash pip install ...

    django+scrapy结合

    Scrapy则是一个为了爬取网站并提取结构化数据而设计的框架,专为爬虫任务定制,具备高效的数据处理能力。它包含了一个强大的中间件系统,可以自定义爬取行为,同时还支持多种数据存储方式,如XML、JSON等。 将...

    Learning Scrapy-2016

    Scrapy为了支持大规模数据爬取,还设计了选择器(Selectors)来帮助用户快速提取HTML/XML文档中的数据。选择器利用CSS或XPath表达式来选取HTML文档的各个部分。 Scrapy的另一个亮点是其命令行工具,用户可以通过...

    百度百科爬虫Scrapy

    通过Scrapy爬虫框架,我们可以高效地爬取百度百科上的计算机类词汇信息,通过解析HTML结构,提取所需数据,并利用Item Pipeline进行数据清洗和存储。Scrapy的灵活性和可扩展性使其成为Python开发网络爬虫的首选工具...

    scrapy-0.25-html中文版

    scrapy0.25的html版本.本文档涵盖了所有Scrapy的内容。Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

    Scrapy0.24.1 中文文档

    Scrapy内置了强大的XPath和CSS选择器,用于从HTML或XML文档中提取数据。选择器使得从复杂网页结构中提取数据变得简单。 7. **Middleware**: 中间件是Scrapy框架中的一系列可插拔的钩子,用于在请求被发送到...

    Scrapy依赖包.zip

    6. **cssselect**:用于CSS选择器解析,它允许开发者使用CSS语法选取XML或HTML文档中的元素,方便在Scrapy中进行数据提取。 7. **pyOpenSSL**:提供了一些OpenSSL的功能,如SSL/TLS连接,用于加密通信,保证网络...

    scrapy1.5中文文档

    2. 强大的选择器:Scrapy自带两种基于XPath和CSS的选择器,可以方便地从HTML或XML中提取数据。 3. 异步处理:Scrapy使用Twisted框架作为其事件驱动的非阻塞IO模型,能够实现异步请求的调度和处理。 4. 高级数据...

    scrapy爬虫框架

    Scrapy是一个用于爬取网站数据和提取结构性数据的应用框架,编写在Python语言中。它能够为用户提供一个快速、高层次的网页爬取和网页内容处理的环境。Scrapy专为爬虫设计,可以用来爬取网站数据并从页面中提取结构化...

    python scrapy电子书开发文档

    - **Selectors**:用于从HTML或XML文档中提取数据的工具。 - **Item Loaders**:一种辅助类,用于清理和验证从网页中提取的数据。 - **Scrapy Shell**:交互式的环境,允许用户测试选择器、调试爬虫逻辑。 - **Item ...

    精通Scrapy网络爬虫_python_scrapy_

    5. **Selector**:Scrapy内置了XPath和CSS选择器,用于从HTML或XML文档中提取数据。它们提供了强大的解析功能,使你能方便地定位到目标元素。 6. **Downloader Middleware**:下载中间件是一系列钩子,可以修改...

    scrapy 安装包

    5. **Selector**:Scrapy内置了XPath和CSS选择器,方便用户从HTML或XML文档中提取数据。 6. **Downloader Middlewares**:下载中间件是一系列钩子,允许你在Scrapy发送请求前和接收响应后执行自定义逻辑,例如设置...

    精通Scrapy网络爬虫_爬虫_scrapy_

    5. **Selector(选择器)**:Scrapy内置了XPath和CSS选择器,用于从HTML或XML文档中提取数据。选择器可以帮助我们快速定位和提取网页中的元素。 6. **Settings(设置)**:Scrapy项目的配置文件可以定制爬虫的行为...

    scrapy1.1 帮助文档

    - **选择器(Selectors)**:提供丰富的XPath和CSS选择器语法,帮助开发者精确地定位和提取HTML元素中的数据。 - **Items**:介绍如何定义Item类来存储抓取的数据,并确保数据的一致性和可读性。 - **Item Loaders**:...

    scrapy 入门

    - **Selectors**:Scrapy内置了强大的XPath和CSS选择器,用于从HTML或XML文档中提取数据。它们提供了一种简洁的方式来定位和提取网页上的信息。 - **Item**:Item是Scrapy用来表示抓取数据的数据结构,可以看作是...

    Scrapy爬虫框架.pdf

    Scrapy是一个快速、高层次的网页爬取和网络抓取框架,用于爬取网站并从页面中提取结构化的数据。它的优势在于只需编写少量代码即可实现高效率的爬取。对于爬虫工程师而言,掌握Scrapy框架是其必备基础技能之一。 ...

Global site tag (gtag.js) - Google Analytics