Scrapy简介

  • Scrapy is an application framework for crawling web sites and extracting structured data which can be used for a wide range of useful applications, like data mining, information processing or historical archival.

  • 这是Scrapy官方文档给出的定义,Scrapy是一个快速的的Python框架,用于抓取web站点并从页面中提取大量有用的结构化数据,可以用于数据挖掘、信息处理或是存储历史数据。

上面是Scrapy的架构图,下面简单介绍一下各个组件

  • Scrapy Engine:引擎用来处理整个系统的数据流,触发各个事件,是整个系统的核心部分。

  • Scheduler:调度器用来接受引擎发过来的Request请求, 压入队列中, 并在引擎再次请求的时候返回。

  • Downloader:下载器用于引擎发过来的Request请求对应的网页内容, 并将获取到的Responses返回给Spider。

  • Spiders:爬虫对Responses进行处理,从中获取所需的字段(即Item),也可以从Responses获取所需的链接,让Scrapy继续爬取。

  • Item Pipeline:管道负责处理Spider中获取的实体,对数据进行清洗,保存所需的数据。

  • Downloader Middlewares:下载器中间件主要用于处理Scrapy引擎与下载器之间的请求及响应。

  • Spider Middlewares:爬虫中间件主要用于处理Spider的Responses和Requests。

开发环境

  • 安装Python环境,推荐Anaconda,能减少很多库安装的问题

  • 安装Scrapy 官方文档提供了详细的安装方法

  • 安装MongoDB 使用MongoDB来保存爬取到的网页上的信息,如文章的标题、类别、图片保存路径等等。

爬取实战

工程创建

打开命令行,开启第一个Scrapy项目的实践

scrapy startproject douban

项目创建完成后可以看到在工程创建的位置有了douban文件夹,打开以后包含了上述的组件,可以使用spyder,pycharm等ide打开项目

  • 根据命令行的提示

cd douban
scrapy genspider example example.com

进入douban文件夹,并创建spider,上述命令中的example替换为spider的名字doubanmovie,example.com替换为 douban.com ,输入上述命令之后可以看到多了一个spider的py文件。

代码编写

Settings

  • 需要设置USER_AGENT,假装自己是浏览器访问网页。下面给多个用户代理,随机选择其中之一进行访问,在settings.py中加入以下代码

  1. user_agent_list
    =
    ["Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
    ,"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
    ,"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"
    ,"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko"
    ,"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
    ,"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"
    ,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
    ,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
    ,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
    ,"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
    ,"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11"
    ,"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11"
    ,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"]USER_AGENT
    =
    random
    .
    choice
    (
    user_agent_list
    )
    
  • 编写完pipeline类之后需要继续在settings py中进行配置, 可以配置多个pipeline, 300为优先级, 值越低, 优先级越高, 范围在(0, 1000)内。

    1. ITEM_PIPELINES
      =
      {'douban.pipelines.DoubanPipeline'
      :
      300
      ,}
      

    Items

    • 在items.py中编写一个item用于存放爬取结果

    import scrapy
    class DoubanItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# 电影标题title = scrapy.Field()# 豆瓣评分star = scrapy.Field()# 主演信息Staring = scrapy.Field()# 豆瓣排名rank = scrapy.Field()# 描述quote = scrapy.Field()# 豆瓣详情页url = scrapy.Field()
    

    Doubanmovie

    • 这里是爬虫的部分,在spiders目录下doubanmovie.py文件中进行编辑,爬虫的逻辑非常简单,这里选择了官方文档推荐的css方法来解析html。Scrapy的CSS选择器

    • 通过对网页源代码的分析, 我们发现我们所要获取的信息都在class为item中的div中, 遍历这些div, 获取相关数据.每一页有有25部电影数据, 当这一页的数据获取完成后, 接着爬取下一页的数据,下一页的链接藏在标签里,同样通过css选择器提取。当然也可以通过xpath,BeautifulSoup来解析网页。

    import scrapy
    from douban.items import DoubanItem
    class DoubanmovieSpider(scrapy.Spider):name = 'doubanmovie'start_urls = ['https://movie.douban.com/top250']def parse(self, response):for item in response.css('.item'):movie = DoubanItem()#Staring = item.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/p[1]/text()').extract_first()Staring =item.css('.bd p::text').extract_first()rank = item.css('.pic em::text').extract_first()title = item.css('.hd span.title::text').extract_first()star = item.css('.star span.rating_num::text').extract_first()quote = item.css('.quote span.inq::text').extract_first()url = item.css('.pic a::attr("href")').extract_first()image_url = item.css('.pic img::attr("src")').extract_first()movie['rank'] = rankmovie['title'] = titlemovie['star'] = starmovie['Staring'] = Staringmovie['quote'] = quotemovie['url'] = urlmovie['image_url'] = image_urlyield movie# 获取下一页的urlnext_url = response.css('span.next a::attr("href")').extract_first()if next_url is not None:url = self.start_urls[0] + next_urlyield scrapy.Request(url=url, callback=self.parse)
    

    Pipelines

    • 这里将数据存入MongoDB数据库

    class DoubanPipeline(object):def __init__(self) -> None:# 连接self.client = MongoClient(host='localhost', port=27017)# 如果设置有权限, 则需要先登录# db_auth = self.client.admin# db_auth.authenticate('root', 'root')# 需要保存到的collectionself.col = self.client['douban_movie']self.top250 = self.col.top250# 先清除之前保存的数据# self.top250.delete_many({})def process_item(self, item, spider):res = dict(item)self.top250.insert_one(res)return itemdef open_spider(self, spider):passdef close_spider(self, spider):self.client.close()
    

    爬虫运行

    • 进入项目所在文件夹,在命令行输入如下指令

    scrapy crawl doubanmovie
    
    • 也可以选择下面的命令,同时输出json文件

    scrapy crawl doubanmovie -o top250.json -s FEED_EXPORT_ENCODING=UTF-8
    

    爬取成果

    • json文件 

    • MongoDB数据库 

    回复“电影”,获得排行榜信息与源代码

电影荒?看看豆瓣排行榜上有没有你想看的电影!相关推荐

  1. 有了这个浏览器插件,让你轻松找到你想看的电影电视剧

    不知道大家平时遇没遇到这种情况,看到一个好看的电影/电视剧片段,觉得非常精彩好看,想看完整版,可是却不知道这个影片的名字和其它任何信息,这时候我们只能到处求爷爷告奶奶的到处发帖去问 今天小七就给大家带 ...

  2. 鸟与虫(五)豆瓣我想看高分电影

    哈罗有见面了,几天刚刚验收学校仿站项目,就来赶博客,上课赶得哦. 我的爬虫原则: 爬虫就要有礼貌,爬虫与反爬虫的战争很奇妙.呸,很费精神. 话不多说上代码 '''这次是抓取豆瓣网的前100部高分影片本 ...

  3. 看过和想看的电影、连续剧(不断更新)

    一.<如果·爱>:陈可辛之歌舞爱情 (导演:陈可辛,编剧:杜国威.林爱华,主演:金城武.张学友.周迅,类型:歌舞/爱情,上映日期:2005年12月1日) 三个月前,作为第62届威尼斯国际电 ...

  4. 电影那点事,如何看一部电影?

    看电影,首先要学会管理学思维 把自己看过的电影分类标记记录下来 豆瓣电影是你最好的选择,记录下自己的观影轨迹 在遇到自己喜欢的电影的时候,记得看下下面的相关推荐 一定也会遇到你喜欢的另一部电影 豆瓣电 ...

  5. 看日本电影再也不怕看不懂了,6行Python代码轻松实现音频转文字

    前面几天想看一个电影(至于什么电影就不说了),搜了半天没有中文字幕. 这种事情,你是不是也预定过!很痛苦,有声音和图形.但是你听不懂!嗯? 于是,我想想现在的科技这么发达,难道找不到音频转文字的软件吗 ...

  6. python听不懂_看日本电影真痛苦,本来就听不懂!还没字幕!6行代码音频转文字...

    进群:125240963   即可获取数十套PDF哦! 前面几天想看一个电影(至于什么电影就不说了),搜了半天没有中文字幕. 看日本电影再也不怕看不懂了,6行Python代码轻松实现音频转文字 这么贵 ...

  7. python爬取豆瓣排行榜电影(静态爬取)(二次爬取)

    目录 python爬取豆瓣排行榜电影(静态爬取) 获取网站url 获取网站headers get请求访问url BeautifulSoup解析网站 爬取html数据 完整代码 python爬取豆瓣排行 ...

  8. 爬取豆瓣排行榜电影数据

    进入豆瓣排行榜喜剧模块页面,我们想要获取其电影数据,首先肯定不能直接对当前url发起请求,因为这样获取的将会是整个页面数据,而不是单纯的电影数据. 经过观察发现该页面可以往下拖动页面而更新电影,所以猜 ...

  9. 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...

    豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...

最新文章

  1. Puppet扩展篇1-自定义fact结合ENC(hirea)的应用实践
  2. 在Init之前究竟执行了什么?
  3. DLNg[结构化ML项目]第二周迁移学习+多任务学习
  4. JAVA多线程-基础Lock Condition 并发集合
  5. CentOS6安装tomcat6
  6. 数据结构与算法--4.使用堆栈模拟队列
  7. 苏州大学文正学院计算机专业,苏州大学文正学院有哪些专业及什么专业好
  8. Luogu4897 【模板】最小割树
  9. KmdKit4D 0.01正式版发布了(0.02版已放出)
  10. GBK点阵字库制作工具说明及下载
  11. meta分析学习分享
  12. 产品经理面试题汇总(1)
  13. 美术☀️PR去掉视频黑边、旋转视频、减小视频体积、设置视频封面
  14. 发布下今天学习内容--CentOS7安装Oracle 11gR2 图文详解
  15. 测试了一周总结的模拟器玩刺激战场延迟卡顿完美解决办法
  16. MT8173芯片资料,MT8173处理器参数介绍
  17. 因忘记一个约会而写的致歉函
  18. 广东技术师范大学一行来访虹科并进行“见习-实习-就业一体化基地 ”挂牌仪式
  19. 图-介绍(intro-Graph)
  20. 收发EtherCAT帧——ecx_srconfirm函数

热门文章

  1. 首本深入讲解Linux内核观测技术BPF的书上市!
  2. Tiff转换Bitmap处理方法
  3. rtsp协议格式解析
  4. Archery通过OpenResty代理转发后登录一直提示Forbidden
  5. halcon 粘连物体分割
  6. Adobe Unity大战3D网游市场
  7. 用VUE制作一个表格
  8. win10家庭版无法启动远程桌面服务解决方案
  9. PCB 布线技术~PCB 基础
  10. 谷歌地图API教程及在VUE中的使用