python学习终于来到了scrapy这一部分了,感觉有点复杂,一开始学习了关于scrapy的安装、项目创建、爬虫创建等知识。
在实操一个简单爬虫案例的时候,遇到了一个小问题,通过详细分析输出结果才发现了问题,在此记录一下,也给其它遇到相同问题的小伙伴提供一个解决思路。
先说下遇到问题的spider代码吧
import scrapy
class SpiderCity58Spider(scrapy.Spider):
name = 'spider_city_58'
allowed_domains = ['58.com']
start_urls = ['http://bj.58.com/']
def parse(self, response):
html = response.body
filename = "index.html"
file = open(filename,'w')
file.write(html)
file.close()
在命令符中运行的时候,发现,输出的index.html文件是空的,再次运行还是不行,只能硬着头皮在一堆输出符中查找原因。
虽然说看着这么多东西就有点头疼,但是仔细看,发现有一处报错。
TypeError: write() argument must be str, not bytes
意思就是,file.writh(html)中html格式错误,赶紧去网上查一下这个问题吧,根据其他人的建议,Python3给open函数添加了名为encoding的新参数,而这个新参数的默认值却是‘utf-8’。这样在文件句柄上进行read和write操作时,系统就要求开发者必须传入包含Unicode字符的实例,而不接受包含二进制数据的bytes实例。
解决办法:使用二进制写入模式(‘wb’)来开启待操作文件,而不能采用字符写入模式(‘w’)。
修改了之后,完美运行。