使用scrapy框架爬取自己的博文(2)
2014-05-05 15:14
253 查看
之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- -
显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u7684\u56fe\u7247 - huhuuu - \u535a\u5ba2\u56ed'] 而不是 python下爬某个网页的图片 - huhuuu - 博客园。这显然不是我们需要的结果。
现在如何把列表中的字符串转到字符串,显然不能直接用str! 那就遍历列表,把信息提取出来。
运行一下,似乎是可以的,但是发现有些字符还是没有转化到中文字符,查了下编译器的提示:
![](http://images.cnitblog.com/i/273314/201405/051508384952750.png)
\u2014这个字符好像支持的不好,那就把这个字符除掉
一开始没搞明白字符的单位是什么,判断条件写成了,自然就没起到任何作用
原来在python中对中文字符 与 对英文字符 都看做一个单位,所以:
最后,可以正确的显示所以中文字符了。
完整的spider代码:
爬取的结果:
近四百篇博文
显示的时候 [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
运行一下,似乎是可以的,但是发现有些字符还是没有转化到中文字符,查了下编译器的提示:
![](http://images.cnitblog.com/i/273314/201405/051508384952750.png)
\u2014这个字符好像支持的不好,那就把这个字符除掉
一开始没搞明白字符的单位是什么,判断条件写成了,自然就没起到任何作用
if (s[0][i] == '\\') and (s[0][i+1] == 'u'): if (s[0][i+2] == '2') and (s[0][i+3] == '0') and (s[0][i+4] == '1') and (s[0][i+5] == '4'):
原来在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
爬取的结果:
近四百篇博文
![](http://images.cnitblog.com/i/273314/201405/051515523078416.png)
相关文章推荐
- 使用scrapy框架爬取自己的博文(3)
- 使用scrapy框架爬取自己的博文
- 根据自己的需要适度使用Web开发框架
- scrapy框架的使用方法
- 打造自己的框架之使用注解制作IOC组件
- 从库框架到模块化再到使用自己独立开发的库和框架
- 使用Scrapy来爬取自己的CSDN文章 (2)
- 框架的使用(二):scrapy
- Android中使用注解打造自己的IOC框架
- 【python爬虫】scrapy框架笔记(一):创建工程,使用scrapy shell,xpath
- 论如何使用scrapy框架登陆知乎
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架
- Glide框架 结合glide-transformations使用或者自己重写Transformation使用
- java笔记:自己动手写javaEE框架(七)--使用JSON和Ajax技术
- Python网络爬虫(八):Scrapy框架的使用
- 基本上包含了Foudation框架内的所有函数和方法。 使用方法:全选,自己建一个文本类的文件,如果要使用某个方法却想不起来方法名,直接在文本中搜索关键字即可。
- 使用Kindle4rss推送自己感兴趣的博文
- 使用Scrapy来爬取自己的CSDN文章 (2)