爬虫文件的编写

class DoubanSpiderSpider(scrapy.Spider):
    # 这里是爬虫名
    name = 'douban_spider'
    # 允许的域名
    allowed_domains = ['movie.douban.com']
    # 入口url,扔到调度器里面
    start_urls = ['https://movie.douban.com/top250']

第二次写 第一次写到一半蹦了 心态很炸 自己看懂就好了 不一定会很详细了

先把入口url更改一下

然后去新建一个main.py文件

在里面写入一下内容 这样就不用每次到终端运行了

from scrapy import cmdline
cmdline.execute('scrapy crawl douban_spider'.split())

然后正常写我们的爬虫文件

先去我们的页面https://movie.douban.com/top250

我用的是google chrome浏览器 因为我们需要xpath 这个插件

自行百度下载即可 重启浏览器就可以 看到有这个X就可以了

然后我们检索我们需要的哪些信息 F12之后 右键检查我们所要信息

获得如下:

然后我们写我们需要的xpath

我们定义一个movie_list 其中我们的respons有个方法可以直接调用xpath

 movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")

此时我们需要把我们先前写好的douban.items中的DoubanItem()导入进来

from douban.items import DoubanItem

然后写入我们的xpath 其中 我们需要的是文本数据所以后面都是text() 我们需要第一个数据 extract_first()

 def parse(self, response):
        # 循环电影的条目
        movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
        for i_item in movie_list:
            # item文件导进来
            douban_item = DoubanItem()
            # 写详细的xpath,进行数据的解析
            douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()
            douban_item['movie_name'] = i_item.xpath(".//div[@class='info']/div[@class='hd']/a/span[1]/text()").extract_first()
            douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first()
            douban_item['evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first()
            douban_item['describe'] = i_item.xpath(".//p[@class='quote']/span/text()").extract_first()

 面对有好几行内容的信息 可以这样处理:

先把他们的xpath写出来 注意我们不需要第一个数据 所以不用first 然后再遍历每一项 最后赋给我们的douban_item

       content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract()
            # 多行数据进行数据的处理
            for i_content in content:
                 content_s = "".join(i_content.split())
                douban_item['introduce'] = content_s

 然后需要把我们的数据yield到pipeline里面

# 你需要将数据yield到pipeline里面
            yield douban_item

一共10页 每页25个 为了自动获得后一页的内容

我们同理解析

# 解析下一页规则,取后一页的xpath
        next_link = response.xpath("//span[@class='next']/link/@href").extract()
        if next_link:
            next_link = next_link[0]

到第十页就没有下一页 就不会继续了

yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)

最后补上回调函数去运行就能得到我们想要的结果了

 

posted @ 2018-10-25 15:36  黄溢  阅读(416)  评论(0编辑  收藏  举报