Python利用Scrapy框架爬取豆瓣电影示例
本文实例讲述了Python利用Scrapy框架爬取豆瓣电影。分享给大家供大家参考,具体如下:
1、概念
pipinstallscrapy
2、新建Scrapy项目
Db_Project/ scrapy.cfg--项目的配置文件 douban/--该项目的python模块目录,在其中编写python代码 __init__.py--python包的初始化文件 items.py--用于定义item数据结构 pipelines.py--项目中的pipelines文件 settings.py--定义项目的全局设置,例如下载延迟、并发量 spiders/--存放爬虫代码的包目录 __init__.py ...
scrapygenspiderdoubanmovie.douban.com
3、定义数据
importscrapy classDoubanItem(scrapy.Item): ranking=scrapy.Field()#排名 name=scrapy.Field()#电影名 introduce=scrapy.Field()#简介 star=scrapy.Field()#星级 comments=scrapy.Field()#评论数 describe=scrapy.Field()#描述
4、数据爬取
#spiders/movie.py importscrapy classMovieSpider(scrapy.Spider): #爬虫名 name='movie' #允许爬取的域名 allowed_domains=['movie.douban.com'] #入口url start_urls=['https://movie.douban.com/top250'] defparse(self,response): pass
USER_AGENT='Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:70.0)Gecko/20100101Firefox/70.0'
fromscrapyimportcmdline cmdline.execute('scrapycrawlmovie'.split())
#-*-coding:utf-8-*- importscrapy fromitemsimportDoubanItem classMovieSpider(scrapy.Spider): #爬虫名 name='movie' #爬取网站的域名 allowed_domains=['movie.douban.com'] #入口url start_urls=['https://movie.douban.com/top250'] defparse(self,response): #首先抓取电影列表 movie_list=response.xpath("//ol[@class='grid_view']/li") forselectorinmovie_list: #遍历每个电影列表,从其中精准抓取所需要的信息并保存为item对象 item=DoubanItem() item['ranking']=selector.xpath(".//div[@class='pic']/em/text()").extract_first() item['name']=selector.xpath(".//span[@class='title']/text()").extract_first() text=selector.xpath(".//div[@class='bd']/p[1]/text()").extract() intro="" forsintext:#将简介放到一个字符串 intro+="".join(s.split())#去掉空格 item['introduce']=intro item['star']=selector.css('.rating_num::text').extract_first() item['comments']=selector.xpath(".//div[@class='star']/span[4]/text()").extract_first() item['describe']=selector.xpath(".//span[@class='inq']/text()").extract_first() #print(item) yielditem#将结果item对象返回给Item管道 #爬取网页中的下一个页面url信息 next_link=response.xpath("//span[@class='next']/a[1]/@href").extract_first() ifnext_link: next_link="https://movie.douban.com/top250"+next_link print(next_link) #将Request请求提交给调度器 yieldscrapy.Request(next_link,callback=self.parse)
#选择类名为left的div下的p标签中的文字 response.css('div.leftp::text').extract_first() #选取id为tag的元素下类名为star元素中的文字 response.css('#tag.star::text').extract_first()
5、数据保存
scrapycrawlmovie-odata.csv
6、中间件设置
classuser_agent(object): defprocess_request(self,request,spider): #useragent列表 USER_AGENT_LIST=[ 'MSIE(MSIE6.0;X11;Linux;i686)Opera7.23', 'Opera/9.20(Macintosh;IntelMacOSX;U;en)', 'Opera/9.0(Macintosh;PPCMacOSX;U;en)', 'iTunes/9.0.3(Macintosh;U;IntelMacOSX10_6_2;en-ca)', 'Mozilla/4.76[en_jp](X11;U;SunOS5.8sun4u)', 'iTunes/4.2(Macintosh;U;PPCMacOSX10.2)', 'Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:5.0)Gecko/20100101Firefox/5.0', 'Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:9.0)Gecko/20100101Firefox/9.0', 'Mozilla/5.0(Macintosh;IntelMacOSX10.8;rv:16.0)Gecko/20120813Firefox/16.0', 'Mozilla/4.77[en](X11;I;IRIX;646.5IP30)', 'Mozilla/4.8[en](X11;U;SunOS;5.7sun4u)' ] agent=random.choice(USER_AGENT_LIST)#从上面列表中随机抽取一个代理 request.headers['User_Agent']=agent#设置请求头的用户代理
更多关于Python相关内容可查看本站专题:《PythonSocket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。