scrapy爬取豆瓣电影Top250(第二节)

首先分析我们要爬取的网页:
https://movie.douban.com/top250

《<python3爬虫>scrapy爬取豆瓣电影Top250(第二节)》” /></p><p> 我们要爬取的信息是这些电影的名称,电影相关信息,评分,以及一句话的名言。</p><p> 这些信息就在网页的主体部分,使用xpath结合chrome的元素定位能很容易的提取到我们想要的信息。</p><p> 接下来就是使用scrapy框架来编写我们的爬虫了。</p><p> 在pycharm中,打开setting.py文件,添加一下内容</p><pre><code>USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) ' \
             'Chrome/14.0.835.163 Safari/535.1'

FEED_URI = 'file:///E:/douban/result/douban.csv'
FEED_FORMAT = 'CSV'
</code></pre><p>user_agent是浏览器的标识,我们使用这个标识伪装我们的爬虫。然而豆瓣实际上并不会阻止爬虫爬取,并且它也是有自己的爬虫访问接口的。<br /> 下面的两个参数表示我们要把爬取的数据写入一个csv文件中,文件的地址是<br /> file:///E:/douban/result/douban.csv<br /> 然后打开items.py文件,写入以下内容:</p><pre><code>from scrapy import Item, Field


class DoubanItem(Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = Field()
    movieInfo = Field()
    star = Field()
    quote = Field()
</code></pre><p>这是定义我们爬取的内容列表,你可以理解为像数据库创建表一样,定义每一列的名称。<br /> 接下来就是爬虫的主题部分了。<br /> 在spiders文件夹下创建一个doubanSpider.py文件,写入以下内容</p><pre><code>from scrapy.contrib.spiders import CrawlSpider
from scrapy.http import Request
from scrapy.selector import Selector
from douban.items import DoubanItem


class Douban(CrawlSpider):
    name = 'douban'
    redis_key = 'douban:start_urls'
    start_urls = ['https://movie.douban.com/top250']#起始链接,爬虫的入口链接

    url = 'https://movie.douban.com/top250' #基础链接,构造下一页的时候要用到

    def parse(self, response):
        item = DoubanItem() #实例化Item类,用于保存读取的数据
        selector = Selector(response)
        Movies = selector.xpath('//div[@class=

代码中给出了比较详细的注释了。就不再讲解了。
接下来我们要运行这个程序。
我们可以在命令行中使用scrapy相关命令运行这个爬虫,不够我选择在pycharm中运行。
在douban主目录下创建main.py文件,写入一下内容:

from scrapy import cmdline

cmdline.execute('scrapy crawl douban'.split())

然后右键main.py文件选择Run ‘main’选项,就可以运行了。
这样我们就获得了写有电影信息的douban.csv文件了。
我们选择使用excel打开,跟我在bilibili爬虫那一节中讲的一样,我们需要转换一下编码,不然打开中文是乱码。
打开后,你可能会遇到每一列的顺序不一样。也就是电影名称可能并不是第一行。因为在我们用了一个字典保存信息。然而python的字典是无序的,我们也没有像bilibili那节中制定csv写入的顺序。所以就有可能遇到顺序是乱的情况。
我们需要在spiders目录下新建一个itemCsvExporter.py文件,写入以下内容:

from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter


class itemCsvExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):
        delimiter = settings.get('CSV_DELIMITER', ',')
        kwargs['delimiter'] = delimiter

        fields_to_export = settings.get('FIELDS_TO_EXPORT', [])
        if fields_to_export:
            kwargs['fields_to_export'] = fields_to_export

            super(itemCsvExporter, self).__init__(*args, **kwargs)

在setting中添加以下内容:

FEED_EXPORTERS = {
    'csv': 'douban.spiders.itemCsvExporter.itemCsvExporter',
      #douban为你的scrapy项目的名字
}

FIELDS_TO_EXPORT = [
    'title',
    'movieInfo',
    'star',
    'quote'
]

这样就可以按照上面指定的顺序储存信息了。先删除douban.csv文件,再跑一遍程序,再转码后用excel打开。

《<python3爬虫>scrapy爬取豆瓣电影Top250(第二节)》” />    13330446-4857969e6c65402d.png</p><p>可以看到我们的想要的信息已经按照顺序排好了。<br /> 不过还有一个问题,每行下都有一个空行。<br /> 我们并不需要这个空行。<br /> 打开itemCsvExporter.py文件,鼠标选中CsvItemExporter(单击,不要拖动选择),然后按下ctrl+b,打开exporters.py文件,在CsvItemExporter类中新加一行:</p><p> <img layer-src=     原文作者:Houtasu
    原文地址: https://www.jianshu.com/p/634a47622d7e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

点赞