发 帖  
原厂入驻New
[问答]

如何运行imdb爬虫?

40 爬虫
分享
    imdbcn爬虫实例
 imdbcn网站结构分析
 创建爬虫项目
 运行imdb爬虫



0
2020-11-5 07:07:00   评论 分享淘帖 邀请回答
3个回答
imdb.cn网站结构分析
imdb.cn是国内的一个影视资料库,应该也是作者爬取别人的数据生成的一个网站,并不是imdb的中文网站。学会爬虫后其实我们也可以做一个这样的网站。
我们打开http://www.imdb.cn/NowPlaying/ 影视资料库页面,如图

该资料库共有292300 条记录 14615 页

通过分析可以知道页码对应的url为http://www.imdb.cn/nowplaying/{页码}
例如:
第一页的url为http://www.imdb.cn/nowplaying/1
14615页的url为http://www.imdb.cn/nowplaying/14615
接下来我们分析每个电影的url,我们点开《大脑东海》它的url为http://www.imdb.cn/title/tt4912402 同样的点开其他的电影,可以发现一个规律,url的格式为http://www.imdb.cn/title/tt{多个数字}
好,现在我们已经找到两个规律,一个是所有电影资料列表的url规律,另一个是每个电影的url规律。我们现在要通过所有的列表,下载每个电影的详细信息,比如电影名称、导演、演员、上映时间、国家等信息。
2020-11-5 16:02:04 评论

举报

创建爬虫项目
使用命令创建一个项目scrapy startproject imdb
MACBOOK:~ yancey$ scrapy startproject imdb New Scrapy project 'imdb', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scrapy/templates/project', created in:     /Users/yancey/imdb  You can start your first spider with:     cd imdb     scrapy genspider example example.com 使用pycharm打开我们创建的imdb项目,项目结构如下

根据我们需要的信息重写items.py
# -*- coding: utf-8 -*-  # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html  import scrapy  class ImdbItem(scrapy.Item):     # define the fields for your item here like:     url = scrapy.Field()        #url     title = scrapy.Field()      #影片名 在spiders目录下创建一个imdbspider.py
# coding:utf-8  from scrapy.spiders import CrawlSpider, Request, Rule from imdb.items import ImdbItem from scrapy.linkextractors import LinkExtractor   class ImdbSpider(CrawlSpider):     name = 'imdb'     allowed_domains = ['www.imdb.cn']     rules = (         Rule(LinkExtractor(allow=r"/title/tt/d+$"), callback="parse_imdb", follow=True),     )      def start_requests(self):         pages = []         for i in range(1, 14616):             url = "http://www.imdb.cn/nowplaying/" + str(i)             yield Request(url=url, callback=self.parse)      def parse_imdb(self, response):         item = ImdbItem()         item['url'] = response.url         item['title'] = "".join(response.xpath('//*[@]/div[@]/h3/text()').extract())         pass 简单解释一下



  • name是运行spider的唯一名称
  • allowed_domains允许的域名前缀
  • rules url规则,上面allow=r”/title/tt/d+$”就是我们分析后的正则表达式,title前匹配allowed_domains,满足rules的callback=”parse_imdb”,意思是满足这个条件就执行parse_imdb方法。
  • start_requests 由于分析得到imdb.cn的url规律较为简单,我们可以通过遍历所有的url到初始请求url集合中,start_requests方法可以轻松做到。
  • parse_imdb方法,item[‘url’] = response.url得到url地址,item[‘title’]通过xpath解析得到电影的title,如《大脑东海》。
2020-11-5 16:02:17 评论

举报

运行imdb爬虫

运行我们刚写的imdb爬虫,进入imdb目录,使用命令scrapy crawl imdb
MACBOOK:imdb yancey$ scrapy crawl imdb /Users/yancey/imdb/imdb/spiders/imdbspider.py:3: ScrapyDeprecationWarning: Module `scrapy.spider` is deprecated, use `scrapy.spiders` instead   from scrapy.spider import CrawlSpider, Request, Rule 2016-12-26 23:24:22 [scrapy] INFO: Scrapy 1.2.0 started (bot: imdb) 2016-12-26 23:24:22 [scrapy] INFO: Overridden settings: {&#39;BOT_NAME&#39;: &#39;imdb&#39;, &#39;ROBOTSTXT_OBEY&#39;: True, &#39;NEWSPIDER_MODULE&#39;: &#39;imdb.spiders&#39;, &#39;SPIDER_MODULES&#39;: [&#39;imdb.spiders&#39;]} 2016-12-26 23:24:22 [scrapy] INFO: Enabled extensions: [&#39;scrapy.extensions.corestats.CoreStats&#39;, &#39;scrapy.extensions.logstats.LogStats&#39;] 2016-12-26 23:24:22 [scrapy] INFO: Enabled downloader middlewares: [&#39;scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.useragent.UserAgentMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.retry.RetryMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.redirect.RedirectMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.cookies.CookiesMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware&#39;,  &#39;scrapy.downloadermiddlewares.stats.DownloaderStats&#39;] 2016-12-26 23:24:22 [scrapy] INFO: Enabled spider middlewares: [&#39;scrapy.spidermiddlewares.httperror.HttpErrorMiddleware&#39;,  &#39;scrapy.spidermiddlewares.offsite.OffsiteMiddleware&#39;,  &#39;scrapy.spidermiddlewares.referer.RefererMiddleware&#39;,  &#39;scrapy.spidermiddlewares.urllength.UrlLengthMiddleware&#39;,  &#39;scrapy.spidermiddlewares.depth.DepthMiddleware&#39;] 2016-12-26 23:24:22 [scrapy] INFO: Enabled item pipelines: [] 2016-12-26 23:24:22 [scrapy] INFO: Spider opened 2016-12-26 23:24:22 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2016-12-26 23:24:22 [scrapy] DEBUG: Crawled (404) <GET http://www.imdb.cn/robots.txt> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/1> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/8> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/7> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/2> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/5> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/3> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/4> (referer: None) 2016-12-26 23:24:23 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/6> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/9> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/10> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/14> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/11> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/12> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/15> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/16> (referer: None) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/nowplaying/13> (referer: None) ... ... 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/title/tt4912402> (referer: http://www.imdb.cn/nowplaying/1) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/title/tt0414387> (referer: http://www.imdb.cn/nowplaying/7) 2016-12-26 23:24:24 [scrapy] DEBUG: Scraped from <200 http://www.imdb.cn/title/tt4912402> {&#39;title&#39;: &#39;大闹东海(2017)&#39;, &#39;url&#39;: &#39;http://www.imdb.cn/title/tt4912402&#39;} 2016-12-26 23:24:24 [scrapy] DEBUG: Filtered duplicate request: <GET http://www.imdb.cn/title/tt4912402> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/title/tt1865505> (referer: http://www.imdb.cn/nowplaying/8) 2016-12-26 23:24:24 [scrapy] DEBUG: Scraped from <200 http://www.imdb.cn/title/tt0414387> {&#39;title&#39;: &#39;傲慢与偏见(2005)&#39;, &#39;url&#39;: &#39;http://www.imdb.cn/title/tt0414387&#39;} 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/title/tt5665040> (referer: http://www.imdb.cn/nowplaying/1) 2016-12-26 23:24:24 [scrapy] DEBUG: Crawled (200) <GET http://www.imdb.cn/title/tt1974420> (referer: http://www.imdb.cn/nowplaying/1) 2016-12-26 23:24:24 [scrapy] DEBUG: Scraped from <200 http://www.imdb.cn/title/tt1865505> {&#39;title&#39;: &#39;海洋之歌(2014)&#39;, &#39;url&#39;: &#39;http://www.imdb.cn/title/tt1865505&#39;} ... ... 另外可在spiders目录下建一个run.py可代替在终端输入命令。
# coding:utf-8  from scrapy import cmdline  cmdline.execute(&quot;scrapy crawl imdb&quot;.split()) 在pycharm中运行run.py,同样可以运行imdb爬虫

我个人建议使用集成开发环境进行开发,比如pycharm,pycharm可以轻松的切换python环境或者是安装依赖库。可以通过File–>Default settings–>Project interpreter

点击左下角的“+”可以搜索安装第三方库,先大致提一下,后面我会专门介绍。
github地址
  
2020-11-5 16:02:36 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表