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支持XPath和CSS选择器来提取网页元素。XPath是一种在XML文档中查找信息的语言,CSS选择器则类似CSS用于选取HTML元素的规则。 5. **Item和Item Pipeline**: - `Item`是Scrapy中的数据容器,类似于Python...
8. **Selectors(选择器)**:Scrapy内置了强大的XPath和CSS选择器,用于从HTML或XML文档中提取数据。 安装Scrapy: 首先,确保已经安装了Python。在命令行中输入以下命令来安装Scrapy: ```bash pip install ...
Scrapy则是一个为了爬取网站并提取结构化数据而设计的框架,专为爬虫任务定制,具备高效的数据处理能力。它包含了一个强大的中间件系统,可以自定义爬取行为,同时还支持多种数据存储方式,如XML、JSON等。 将...
Scrapy为了支持大规模数据爬取,还设计了选择器(Selectors)来帮助用户快速提取HTML/XML文档中的数据。选择器利用CSS或XPath表达式来选取HTML文档的各个部分。 Scrapy的另一个亮点是其命令行工具,用户可以通过...
通过Scrapy爬虫框架,我们可以高效地爬取百度百科上的计算机类词汇信息,通过解析HTML结构,提取所需数据,并利用Item Pipeline进行数据清洗和存储。Scrapy的灵活性和可扩展性使其成为Python开发网络爬虫的首选工具...
scrapy0.25的html版本.本文档涵盖了所有Scrapy的内容。Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
Scrapy内置了强大的XPath和CSS选择器,用于从HTML或XML文档中提取数据。选择器使得从复杂网页结构中提取数据变得简单。 7. **Middleware**: 中间件是Scrapy框架中的一系列可插拔的钩子,用于在请求被发送到...
6. **cssselect**:用于CSS选择器解析,它允许开发者使用CSS语法选取XML或HTML文档中的元素,方便在Scrapy中进行数据提取。 7. **pyOpenSSL**:提供了一些OpenSSL的功能,如SSL/TLS连接,用于加密通信,保证网络...
2. 强大的选择器:Scrapy自带两种基于XPath和CSS的选择器,可以方便地从HTML或XML中提取数据。 3. 异步处理:Scrapy使用Twisted框架作为其事件驱动的非阻塞IO模型,能够实现异步请求的调度和处理。 4. 高级数据...
Scrapy是一个用于爬取网站数据和提取结构性数据的应用框架,编写在Python语言中。它能够为用户提供一个快速、高层次的网页爬取和网页内容处理的环境。Scrapy专为爬虫设计,可以用来爬取网站数据并从页面中提取结构化...
- **Selectors**:用于从HTML或XML文档中提取数据的工具。 - **Item Loaders**:一种辅助类,用于清理和验证从网页中提取的数据。 - **Scrapy Shell**:交互式的环境,允许用户测试选择器、调试爬虫逻辑。 - **Item ...
5. **Selector**:Scrapy内置了XPath和CSS选择器,用于从HTML或XML文档中提取数据。它们提供了强大的解析功能,使你能方便地定位到目标元素。 6. **Downloader Middleware**:下载中间件是一系列钩子,可以修改...
5. **Selector**:Scrapy内置了XPath和CSS选择器,方便用户从HTML或XML文档中提取数据。 6. **Downloader Middlewares**:下载中间件是一系列钩子,允许你在Scrapy发送请求前和接收响应后执行自定义逻辑,例如设置...
5. **Selector(选择器)**:Scrapy内置了XPath和CSS选择器,用于从HTML或XML文档中提取数据。选择器可以帮助我们快速定位和提取网页中的元素。 6. **Settings(设置)**:Scrapy项目的配置文件可以定制爬虫的行为...
- **选择器(Selectors)**:提供丰富的XPath和CSS选择器语法,帮助开发者精确地定位和提取HTML元素中的数据。 - **Items**:介绍如何定义Item类来存储抓取的数据,并确保数据的一致性和可读性。 - **Item Loaders**:...
- **Selectors**:Scrapy内置了强大的XPath和CSS选择器,用于从HTML或XML文档中提取数据。它们提供了一种简洁的方式来定位和提取网页上的信息。 - **Item**:Item是Scrapy用来表示抓取数据的数据结构,可以看作是...
Scrapy是一个快速、高层次的网页爬取和网络抓取框架,用于爬取网站并从页面中提取结构化的数据。它的优势在于只需编写少量代码即可实现高效率的爬取。对于爬虫工程师而言,掌握Scrapy框架是其必备基础技能之一。 ...