美文网首页
豆瓣电影TOP250的网页解析

豆瓣电影TOP250的网页解析

作者: 金欠_dc13 | 来源:发表于2018-05-21 11:58 被阅读0次

    调试过程

    1.DEBUG: Crawled (403) 的解决办法

    首先我们按照之前的经验输入

    scrapy shell https://movie.douban.com/top250
    

    输入后,出现了DEBUG: Crawled (403) ,表示网站采用了防爬技术anti-web-crawling technique,比较简单即会检查用户代理(User Agent)信息。

    输入后出现DEBUG 403

    之后,我们进行了代码输入对影片名,进行了爬取,发现结果为空。

    >>>response.xpath("//ol[@class='grid_view']/li[1]/div[@class='item']/div[@class='info']/div[@class='hd']/a/span/text()").extract()
    > []
    

    通过检索我们发现,出现403的错误时应该键入

    scrapy shell -s USER_AGENT='Mozilla/5.0' https://movie.douban.com/top250
    

    显示DEBUG: Crawled (200),是正常情况的调试信息

     2018-05-15 22:04:09 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)
    

    2.extract()与extract_first()

    extract_first()返回字符串

    extract()返回数组

    3. 标签的不规律导致爬取困难

    电影标题对应的标签(<span class="title">)数量是变化的,即一个电影可能对应不同数量个title。

    电影1的标题 电影2的标题

    针对此问题,我们考虑的方案1是使title变量为一个多维的列表(list),并在最终输出结果时通过遍历此列表来输出结果。但在遍历过程中一直bug。

    后来,我们想出了一个更简单但有效的办法:由于电影标题对应的标签始终为1-2个,我们设了两个变量,分别赋值两个标签,在输出最终结果时通过if语句判定title2是否有值并输出

    最终代码

    xpath代码

    for movie in response.xpath("//ol[@class='grid_view']/li"):
      title=movie.xpath("div[@class='item']/div[@class='info']/div[@class='hd']/a/span[@class='title']/text()").extract_first()
      title2=movie.xpath("div[@class='item']/div[@class='info']/div[@class='hd']/a/span[@class='title'][2]/text()").extract_first()
      other=movie.xpath("div[@class='item']/div[@class='info']/div[@class='hd']/a/span[@class='other']/text()").extract_first()
      pic=movie.xpath("div[@class='item']/div[1]/a/img/@src").extract_first()
      desc2=movie.xpath("div[@class='item']/div[2]/div[2]/p[1]/text()").extract()
      score=movie.xpath("div[@class='item']/div[@class='info']/div[@class='bd']/div[@class='star']/span[2]/text()").extract_first()
      scoreperson=movie.xpath("div[@class='item']/div[@class='info']/div[@class='bd']/div[@class='star']/span[4]/text()").extract_first()
      review=movie.xpath("div[@class='item']/div[@class='info']/div[@class='bd']/p[@class='quote']/span/text()").extract_first()
      print "标题:",title,
      if title2:
          print title2,
      print "其他标题:",other,
      print "图片:",pic,
      print "简介:",desc2[0],
      print "描述信息:",desc2[1],
      print "评分:",score,
      print "人数:",scoreperson
      print "评论:",review
    

    css代码

    for movie in response.css("ol.grid_view li"):
      title=movie.css("div.hd a span::text").extract()[0]
      title2=movie.css("div.hd a span::text").extract()[1]
      other=movie.css("div.hd a span.other::text").extract_first()
      pic=movie.css("div.pic a img::attr(src)").extract_first()
      desc=movie.css("div.bd p::text").extract()
      score=movie.css("span.rating_num::text").extract_first()
      scoreperson=movie.css("div.star span::text").extract()
      review=movie.css("p.quote span.inq::text").extract_first()
      print "名称:",title,
      if title2:
          print title2,
      print other,
      print "图片:",pic,
      print "演职员表:",desc[0],
      print "类别:",desc[1],
      print "评分:",score,
      print "人数:",scoreperson[1],
      print "评论:",review
    

    运行结果

    运行结果

    相关文章

      网友评论

          本文标题:豆瓣电影TOP250的网页解析

          本文链接:https://www.haomeiwen.com/subject/jhsfjftx.html