之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- -

  显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u7684\u56fe\u7247 - huhuuu - \u535a\u5ba2\u56ed'] 而不是 python下爬某个网页的图片 - huhuuu - 博客园。这显然不是我们需要的结果。

  现在如何把列表中的字符串转到字符串,显然不能直接用str! 那就遍历列表,把信息提取出来。

def change_word(s): #把表中的字符串转化到中文显示
print s
sum = 0
for i in s[0]:
sum += 1
ss2 = '' count = 0
for i in range(0,sum):
ss2 += s[0][i] s = ss2
print s

  运行一下,似乎是可以的,但是发现有些字符还是没有转化到中文字符,查了下编译器的提示:

  

  \u2014这个字符好像支持的不好,那就把这个字符除掉

  一开始没搞明白字符的单位是什么,判断条件写成了,自然就没起到任何作用

       if (s[0][i] == '\\') and (s[0][i+1] == 'u'):
if (s[0][i+2] == '') and (s[0][i+3] == '') and (s[0][i+4] == '') and (s[0][i+5] == ''):

  原来在python中对中文字符 与 对英文字符 都看做一个单位,所以:

        if (s[0][i] == u'\u2014'):
continue

  最后,可以正确的显示所以中文字符了。

  完整的spider代码:

  

#!/usr/bin/env python
#coding=utf-8
from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from dirbot.items import Website
from scrapy.selector import HtmlXPathSelector
import sys
import string
sys.stdout=open('output.txt','w') #将打印信息输出在相应的位置下 add = 0
def change_word(s): #把表中的字符串转化到中文显示
print s
sum = 0
for i in s[0]:
sum += 1
ss2 = '' count = 0
for i in range(0,sum):
#对 /u2014处理
if (s[0][i] == u'\u2014'):
continue
ss2 += s[0][i] s = ss2
print s class DmozSpider(CrawlSpider): name = "huhu"
allowed_domains = ["cnblogs.com"]
start_urls = [
"http://www.cnblogs.com/huhuuu",
] rules = (
# 提取匹配 huhuuu/default.html\?page\=([\w]+) 的链接并跟进链接(没有callback意味着follow默认为True)
Rule(SgmlLinkExtractor(allow=('huhuuu/default.html\?page\=([\w]+)', ),)), # 提取匹配 'huhuuu/p/' 的链接并使用spider的parse_item方法进行分析
Rule(SgmlLinkExtractor(allow=('huhuuu/p/', )), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('huhuuu/archive/', )), callback='parse_item'), #以前的一些博客是archive形式的所以
) def parse_item(self, response):
global add #用于统计数量
print add
add+=1 sel = HtmlXPathSelector(response)
items = [] item = Website() temp = sel.xpath('/html/head/title/text()').extract() item['headTitle'] = temp#观察网页对应得html源码
item['url'] = response #print temp print item['url']
change_word(temp) items.append(item)
return items

爬取的结果:

近四百篇博文

使用scrapy框架爬取自己的博文(2)的更多相关文章

  1. 使用scrapy框架爬取自己的博文

    scrapy框架是个比较简单易用基于python的爬虫框架,http://scrapy-chs.readthedocs.org/zh_CN/latest/ 这个是不错的中文文档 几个比较重要的部分: ...

  2. 使用scrapy框架爬取自己的博文(3)

    既然如此,何不再抓一抓网页的文字内容呢? 谷歌浏览器有个审查元素的功能,就是按树的结构查看html的组织形式,如图: 这样已经比较明显了,博客的正文内容主要在div 的class = cnblogs_ ...

  3. scrapy框架爬取笔趣阁完整版

    继续上一篇,这一次的爬取了小说内容 pipelines.py import csv class ScrapytestPipeline(object): # 爬虫文件中提取数据的方法每yield一次it ...

  4. scrapy框架爬取笔趣阁

    笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...

  5. Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)

    1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...

  6. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  7. 基于python的scrapy框架爬取豆瓣电影及其可视化

    1.Scrapy框架介绍 主要介绍,spiders,engine,scheduler,downloader,Item pipeline scrapy常见命令如下: 对应在scrapy文件中有,自己增加 ...

  8. scrapy框架爬取豆瓣读书(1)

    1.scrapy框架 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  9. scrapy框架爬取糗妹妹网站妹子图分类的所有图片

    爬取所有图片,一个页面的图片建一个文件夹.难点,图片中有不少.gif图片,需要重写下载规则, 创建scrapy项目 scrapy startproject qiumeimei 创建爬虫应用 cd qi ...

随机推荐

  1. Oracle12c中性能优化&功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护

    Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1.   设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...

  2. bug 问题

    1. 图片 img 标签,在IE浏览器下会有空白 - 解决办法:display:block; 2. IE6 下父级没有宽高,不会触发haslayout. 触发原因:子级浮动,父级没有宽高,overfl ...

  3. SQL Server 游标运用:查看数据库所有表大小信息

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:运用游标 方法二:运用系统存储过程 方法三:拼接SQL ...

  4. C# 接收form表单中多个相同name值的问题

    以前接收form表单的值直接用FormCollection或自定义类来接收,当有多个相同Name的值时会自动用“,”隔开,这样就有了一个问题,当值中本身就含有“,”时就比较难处理了. 所以解决方法就是 ...

  5. python中read()、readline()、readlnes()

    在python中 1.file.read()直接按原样读取文件,它通常用于将文件内容放到一个字符串变量中,如果文件大于可用内存,则不可能实现这种处理,因为原来文件里面是str_class,所以 fil ...

  6. 浏览器是怎样工作的:渲染引擎,HTML解析

    渲染引擎 渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上. 默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档.比如使用PDF vi ...

  7. STL标准库-Move对容器效率的影响

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 C++11新增move()语法(我暂时交错右值引用),在前面我有一篇文章叫 C++11_右值引用 简单的介绍了右值引用类的实现, ...

  8. JVM --- OutOfMemoryError异常

    在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有可能发生OutOfMemoryError(OOM)异常. 1.Java堆溢出 Java堆用于存储对象实例,只要不断地创 ...

  9. 仿sql注入 sql

    <?phpclass sqlsafe { //(and|or)\\b 表示以and和or结尾的单词如:aand,band,都可以匹配//如果匹配and或or则使用 \\b(and|or)\\b来 ...

  10. 第三篇 makefile的伪目标

    我们来思考一下makefile中的目标究竟是什么?实际上,在默认情况下:    1.make将makefile的目标认为是一个文件:    2.make解释器比较目标文件和依赖文件的新旧关系,决定是否 ...