scrapy开发三之开发过程中的那些经常性错误

Scrapy中的那些问题

最近写python时遇到了一些问题,网上也不好找,记下来以后要是忘了能够看看

 

问题一:

from pharm import items

这句话出问题,cannot import module item

问题是class pharmspider(CrawlSpider):

不能写成class DmozSpider(scrapy.Spider):

继承CrawlSpider可以,也可以是BaseSpider,就是不能是scrapy.Spider,有时间查查原因。

 

问题2

Python在读取txt文件的时候总是乱码,因为不管文件格式是什么编码的,scrapy总是默认按照ascii编码来读取,可以采用这种方法来判断字符的编码方式

from pip._vendor.requests.packages importchardet

print chardet.detect('asdfasd')

显示结果:

{'confidence': 1.0, 'encoding': 'ascii'}

问题3

在网页抓取的时候总是抓到的东西是乱码的,因为有的网页不是utf-8的。这个时候需要在网页源代码中寻找到对应的编码方式,然后先按照这个方式解码,在进行编码

 a=response.body.decode('gb2312').encode('utf-8')

 

问题3

我想写一个从txt文件读取信息,进而生成CSV文件的程序,怎么匹配都不对,实在没办法后来用了函数repr(),它可以看出字符在内存中的真实表示:

import csv

file =open("C:\common.txt",'r')

a=file.readline()

print a

print type(a)

b='首页 - 药物应用数据库'

print repr(b)

print repr(a)

if a==b:

   print a

else:

print '1'

 

 

首页 - 药物应用数据库

 

<type 'str'>

'\xef\xbb\xbf\xe9\xa6\x96\xe9\xa1\xb5- \xe8\x8d\xaf\xe7\x89\xa9\xe5\xba\x94\xe7\x94\xa8\xe6\x95\xb0\xe6\x8d\xae\xe5\xba\x93'

'\xef\xbb\xbf\xe9\xa6\x96\xe9\xa1\xb5-\xe8\x8d\xaf\xe7\x89\xa9\xe5\xba\x94\xe7\x94\xa8\xe6\x95\xb0\xe6\x8d\xae\xe5\xba\x93\n'

1

 

 

 

原来是文件中读取的字符多了一个\n!!!

 

 

问题4:

Win系统中文字第一行一定是关于文件的编码声明的,然而utf不需要这个声明,如果按照utf读取文件就会发生读取错误,utf关于这个声明无法读取。

此时应当做的是将第一行删去,或者

因为BOM头有三个字节

content = file[3:] #排除吊BOM头,一直就是它搞的鬼!!!

BOM也是一行的:

 lines = codecs.open('C:\common.txt','r',"utf-8").readlines()

        lines = lines[1:]

 

 

问题5:

如何从一个txt读取生成csv文件

只需要在parse函数里面写上:

defparse(self, response):

lines =codecs.open('C:\common.txt','r',"utf-8").readlines()

  lines = lines[1:]

for num in range(len(lines)):

            if lines[num]==u"药物类别:\r\n":

                item=items.PharmItem()

                item['ywlb']=lines[num+1]

                print item['ywlb']

                continue

            if lines[num]==u"所属类别:\r\n":

                item['sslb']='11'

                continue

            if lines[num]==u"药物名称:\r\n":

                item['ywmc']=lines[num+1]

                continue

            if lines[num]==u"英文名称:\r\n":

                item['yingyu']=lines[num+1]

                continue

            if lines[num]==u"药物别名:\r\n":

                item['ywbm']=lines[num+1]

                continue  

            if lines[num]==u"药理作用:\r\n":

                item['yaoli']=lines[num+1]

                continue

            if lines[num]==u"药动学:\r\n":

                item['yaodong']=lines[num+1]

                continue

            if lines[num]==u"适应症:\r\n":

                item['shiying']=lines[num+1]

                continue

            if lines[num]==u"用法用量:\r\n":

                item['yongfa']=lines[num+1]

                continue

            if lines[num]==u"不良反应:\r\n":

                item['buliang']=lines[num+1]

                continue

            if lines[num]==u"相互作用:\r\n":

                item['xianghu']=lines[num+1]

                continue

            if lines[num]==u"注意事项:\r\n":

                item['zhuyi']=lines[num+1]

                continue

            if lines[num]==u"疗效评价:\r\n":

                item['liaoxiao']=lines[num+1]

                yield item

 

这样就能提取出来了,这是scrapy框架里面的parse函数

 

 

问题8:

Spider not find: spidername

没有找到spider

1.  先确认spiders文件夹中的工程里面是否有name属性

2.  Settings.py文件中的BOT_NAME属性一般和projectname相同,也就是name属性

3.  在cfg文件中查看配置是否错误default = drug.settings ,cfg文件和整个项目的文件时并列的

4.   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值