用Scrapy爬虫下载图片(豆瓣电影图片)
2015-05-29 10:45
477 查看
用Scrapy爬虫的安装和入门教程,这里有,这篇链接的博客也是我这篇博客的基础。
其实我完全可以直接在上面那篇博客中的代码中直接加入我要下载图片的部分代码的,但是由于上述博客中的代码已运行,已爬到快九千的电影详情数据,不忍重新爬一次,所以爬豆瓣电影图片的爬虫重新写一遍。
前言:我的需求是根据已有电影名在豆瓣中搜索电影,然后获得电影的链接,继续爬虫,获得电影的图片。
上述链接的博客的需求我在这里也顺带列一下,不关心的直接忽略之:我要爬的是豆瓣的数据,我有了很多电影的名字,但是我需要电影的详情,我用了一下豆瓣电影的网站,发现当我在搜索框里输入“Last Days in Vietnam”时url会变成http://movie.douban.com/subject_search?search_text=Last+Days+in+Vietnam&cat=1002 然后我就试着直接输入http://movie.douban.com/subject_search?search_text=Last+Days+in+Vietnam这个url,搜索结果是一样的,很显然这就是get方式,这样我们就找到了规律:http://movie.douban.com/subject_search?search_text=后面加上我们的电影名字并用加号分割就行了。我们的电影名字(大量的电影名字)是存在movie_name.txt这个文件中里面的(一行一个电影名字)。我们可以先用python脚本(shell脚本也行)将电影名之间的空格处理为+,也可以在爬虫中读取电影名后进行一次replace处理(我是先处理成+的)。爬虫读取电影名字文件,然后构建url,然后就根据得到的网页找到搜索到的第一个电影的url(其实第一个电影未必一定是我们要的,但是这种情况是少数,我们暂时不理会它),得到第一个电影的url后,再继续爬,这次爬到的页面就含有我们想要的电影信息,需要使用XPath来获得html文件中元素节点,最后将获得的信息存到TutorialItem中,通过pipelines写入到data.dat文件中。
电影图片下载核心:
main.py
main.py读取的movies.sql的格式我截图一下:
上述的moive_name是用来在豆瓣中进行电影搜索的,moive_id是给图片来命名的,我把这两个东西分别写到了两个不同的文件中,供spider来读取。
在douban_spider.py中对上述两个文件进行读:
然后在DOS中切换到tutorial目录下输入python main.py就可以爬啦……
好了,可以爬取图片了,给大家看看结果:
写写博客记录自己实践过程,也希望对需要者有用。
其实我完全可以直接在上面那篇博客中的代码中直接加入我要下载图片的部分代码的,但是由于上述博客中的代码已运行,已爬到快九千的电影详情数据,不忍重新爬一次,所以爬豆瓣电影图片的爬虫重新写一遍。
前言:我的需求是根据已有电影名在豆瓣中搜索电影,然后获得电影的链接,继续爬虫,获得电影的图片。
上述链接的博客的需求我在这里也顺带列一下,不关心的直接忽略之:我要爬的是豆瓣的数据,我有了很多电影的名字,但是我需要电影的详情,我用了一下豆瓣电影的网站,发现当我在搜索框里输入“Last Days in Vietnam”时url会变成http://movie.douban.com/subject_search?search_text=Last+Days+in+Vietnam&cat=1002 然后我就试着直接输入http://movie.douban.com/subject_search?search_text=Last+Days+in+Vietnam这个url,搜索结果是一样的,很显然这就是get方式,这样我们就找到了规律:http://movie.douban.com/subject_search?search_text=后面加上我们的电影名字并用加号分割就行了。我们的电影名字(大量的电影名字)是存在movie_name.txt这个文件中里面的(一行一个电影名字)。我们可以先用python脚本(shell脚本也行)将电影名之间的空格处理为+,也可以在爬虫中读取电影名后进行一次replace处理(我是先处理成+的)。爬虫读取电影名字文件,然后构建url,然后就根据得到的网页找到搜索到的第一个电影的url(其实第一个电影未必一定是我们要的,但是这种情况是少数,我们暂时不理会它),得到第一个电影的url后,再继续爬,这次爬到的页面就含有我们想要的电影信息,需要使用XPath来获得html文件中元素节点,最后将获得的信息存到TutorialItem中,通过pipelines写入到data.dat文件中。
电影图片下载核心:
#coding=utf-8 import sys reload(sys) #python默认环境编码时ascii sys.setdefaultencoding("utf-8") import os #os.system(r"scrapy crawl douban") #读取电影数据 movies_info = open('movies.sql','r') try: for line in movies_info: #将每条电影数据里面的需要的数据提取出来 movie_infos = line.split(',',4) movie_id = movie_infos[1] movie_title = movie_infos[2] #print movie_id + ":" + movie_title write_name = movie_title.replace('_','+') write_name = write_name.replace('\'','') #print "name is :" + write_name #把电影名写到中间文件中去,让爬虫读取 movie_name_file = open('movie_name.txt','w') try: movie_name_file.write(write_name) finally: movie_name_file.close() #把电影id写到中间文件中去,让爬虫读取 movie_id_file = open('movie_id.txt','w') try: movie_id_file.write(movie_id) finally: movie_id_file.close() #该爬虫程序会从movie_name中读取电影名来爬虫 os.system(r"scrapy crawl douban") finally: movies_info.close()
main.py
main.py读取的movies.sql的格式我截图一下:
上述的moive_name是用来在豆瓣中进行电影搜索的,moive_id是给图片来命名的,我把这两个东西分别写到了两个不同的文件中,供spider来读取。
在douban_spider.py中对上述两个文件进行读:
然后在DOS中切换到tutorial目录下输入python main.py就可以爬啦……
好了,可以爬取图片了,给大家看看结果:
写写博客记录自己实践过程,也希望对需要者有用。
相关文章推荐
- Google搜索入门
- 欢迎使用CSDN-markdown编辑器
- webservice注解
- DNA repair问题
- hibernate不调用save也保存上了
- android开发调用照相机
- Android JNI学习之---JNI开发流程
- PopupWindow的创建过程
- c++中BOOL和bool的区别
- C++静态联编与动态联编
- Linux commands
- P124.38
- (转)Fiddler教程(Web调试工具)
- js获取浏览器基本信息:
- 经典回溯算法——八后问题
- NOI 2003 题解
- CoreData 中使用较多的类
- CCS中文使用大全
- datawindow.net数据窗口卡片设置滚动条位置
- 通过Java发送邮件和接收邮件的工具类