学习python时,爬虫是一种简单上手的方式,应该也是一个必经阶段。本项目用Scrapy框架实现了抓取豆瓣top250电影,并将图片及其它信息保存下来。爬取豆瓣top250电影不需要登录、没有JS解析、而且只有10页内容,用来练手,太合适不过了。
我的开发环境
WIN10 64位系统
Python 3.6.1
PyCharm、Sublime Text
Mysql、MongoDB,可视化:DbVisualizer、Robomongo
项目目录
项目目录
spiders/sp_douban.py:处理链接,解析item部分
items.py:豆瓣top250电影字段
middlewares.py、user_agents.py:从维护的UserAgent池中随机选取
settings.py:配置文件
main.py:免去在命令行输入运行指令
页面抓取内容分析
内容区
span内容
如图所示,抓取信息对应如下:
class DoubanTopMoviesItem(scrapy.Item):
title_ch = scrapy.Field() # 中文标题
# title_en = scrapy.Field() # 外文名字
# title_ht = scrapy.Field() # 港台名字
# detail = scrapy.Field() # 导演主演等信息
rating_num = scrapy.Field() # 分值
rating_count = scrapy.Field() # 评论人数
# quote = scrapy.Field() # 短评
image_urls = scrapy.Field() # 封面图片地址
topid = scrapy.Field() # 排名序号
用xpath取出对应路径,进行必要的清洗,去除空格等多余内容:
item['title_ch'] = response.xpath('//div[@class="hd"]//span[@class="title"][1]/text()').extract()
en_list = response.xpath('//div[@class="hd"]//span[@class="title"][2]/text()').extract()
item['title_en'] = [en.replace('\xa0/\xa0','').replace(' ','') for en in en_list]
ht_list = response.xpath('//div[@class="hd"]//span[@class="other"]/text()').extract()
item['title_ht'] = [ht.replace('\xa0/\xa0','').replace(' ','') for