Professional Documents
Culture Documents
Report
Report
Report
实验目的
通过实验熟悉爬虫的基本步骤:载入、解析、存储
学习运用 scrapy 框架
了解html、css、json基础知识
实验过程
1. 设计爬虫步骤
检查 豆瓣图书Top250 网页源代码,发现下一页链接结构如下
1 <span class="next">
2 <link rel="next" href="https://book.douban.com/top250?start=25"/>
3 <a href="https://book.douban.com/top250?start=25" >后页></a>
4 </span>
1 <div class="pl2">
2 <a href="https://book.douban.com/subject/1007305/"
onclick="moreurl(this,{i:'0'})" title="红楼梦">
3 红楼梦
4 </a>
5 </div>
故可以如下进入每本书的链接
2. 提取书本信息
我们在Spider类下设计一个新方法 parse_book(self, response) 用于提取每本书的信息
检查发现每本书的信息(键值对)不尽相同,如《1984》中包含"译者","出品方"等键,但像《活着》中没
有。故如果采用提前设定好items.py中的键值对结构则需了解所有图书的键值对种类,不太方便。我采用
先将信息提取出来转换成字符串,然后再对该字符串操作转换成字典进行存储
首先书名和评分比较简单,检查源代码后发现可以通过 response.css('title::text').get() 和
response.css('strong::text').get() 得到
1 for i in info:
2 j = i.get().strip().replace('\n','').replace(':','')
3 if j:
4 s = s + '"'+ j + '"'
5 if t % 2 == 0:
6 s += ':'
7 else:
8 s += ','
9 t += 1
其中 s 是储存信息的字符串, t 是计数器
3. 储存数据
利用 eval() 将字符串转换成字典,然后储存到JSON文件中
1 sample = eval(s)
2 file = open('result.json','a',encoding='utf8')
3 file.write(json.dumps(sample,ensure_ascii=False))
4 file.write('\n')
5 file.close
问题&解决
403 forbidden
response.status=403 ,爬虫被禁止访问
解决方案:在setting.py中修改user-agent
上述USER_AGENT可在浏览器中"检查"-"网络"中找到。
对于爬虫频繁导致IP请求异常的,可以通过设置代理或登录解决。
提取到的数据包含大量空格换行符
解决方案:使用 .strip() 、 .replace('\n','') 等方法
参考
1. Scrapy官方文档
2. 菜鸟教程: Scrapy 入门