Python爬虫笔记(4):利用scrapy爬取豆瓣电影250

2018-11-10  本文已影响0人  坐下等雨

在网上阅读有关scrapy的教程也有一段时间了,可是一直没能真正写出能爬出数据的代码。。。今天趁着有点时间,赶快实战一下吧!

目标:豆瓣电影250

为啥选它呢,因为网上有关爬取豆瓣电影的教程多呀,可以很容易的复刻他人的代码,少走弯路。
可是,可是,万万没想到的是,这次的写爬虫过程中我几乎把能踩的坑全踩个遍,菜鸟的烦恼~ 。~
同时我也明白了,人家的以前写的代码,搁到现在未必全部适用。

先把写的流程过一下,然后在慢慢填坑。

至于详细的教程可以参考scrapy中文网

  1. 首先,打开cmd,切换到你希望的路径中,启动项目
scrapy startproject douban
  1. 打开pycharm,找到所在的项目的文件夹并打开,如图


    图1.png
  2. 在items.py填写代码如下
import scrapy


class DoubanItem(scrapy.Item):
    ranking = scrapy.Field() # 排名
    name = scrapy.Field() #电影名称
    score = scrapy.Field() #得分
    people_mun = scrapy.Field() #评价人数
    introduction = scrapy.Field() #电影简介
  1. 在spiders文件夹下创建douban_spider.py文件,然后填写代码如下
import scrapy
from douban.items import DoubanItem


class DoubanSpiderSpider(scrapy.Spider):
    name = 'douban_spider' #定义爬虫的名字
    start_urls = ['https://movie.douban.com/top250?start=0&filter='] #爬取的起始页

#定义解析函数,用来解析返回的response对象
    def parse(self, response):
        #用xpath选择器提取数据
        infos = response.xpath("//ol[@class='grid_view']/li")
        for info in infos:
            ranking = info.xpath(".//div[@class='pic']/em/text()").get()
            name = info.xpath(".//div[@class='hd']/a/span[1]/text()").get()
            score = info.xpath(".//div[@class='star']/span[2]/text()").get()
            people_mun = info.xpath(".//div[@class='star']/span[4]/text()").get()
            introduction = info.xpath(".//p[@class='quote']/span/text()").get()
            item = DoubanItem(ranking=ranking, name=name, score=score, people_mun=people_mun, introduction=introduction)
            yield item
        next_url = response.xpath("//span[@class='next']/a/@href").get() #获取下一页链接

        if not next_url:
            return
        else:
            next_url = 'https://movie.douban.com/top250'+next_url #将获取的下一页链接拼接完整
            yield scrapy.Request(next_url, callback=self.parse) #将提取的URL返回给解析函数
  1. 最后在所在项目的文件夹下运行power shell,输入如下
scrapy crawl douban_spider -o douban.csv

scrapy就会自动将提取的数据保存到CSV文件当中去。

可是现实往往没有那么美好,下面就是我开始填坑的辛苦路程了。。。

 def process_request(self, request, spider):
        referer = request.url
        if referer:
            request.headers['Referer'] = referer

然后再在settings里面启动middleware


图3.png

但是应该打开的是红箭头所示的,而不是绿箭头的,这又是一个坑,自己没动脑子就踩上去了。。。

最后贴上第一个scrapy爬到的成果吧


图4.png

作为一个全靠自己摸索前进的菜鸟的学习之路,就是一个踩坑填坑的过程,但是当你踩的坑多了,那说明,你浪费的时间也就多了! _ !

上一篇 下一篇

猜你喜欢

热点阅读