2019独角兽企业重金招聘Python工程师标准>>>

需求:爬取豆瓣电影top250(https://movie.douban.com/top250)的电影数据:

标题(title ),电影评分(score),电影信息(content),简介 info。

一、分析页面,用xpath得到相应的数据

标题的xpath是://div[@class="info"]//span[@class="title"][1]/text()

电影信息xpath://div[@class="info"]//div[@class="bd"]/p[1]

电影评分xpath://div[@class="info"]//div[@class="star"]/span[2]/text()

得到简介的xpath://div[@class="info"]//span[@class="inq"]/text()

二、创建项目并且完成items.py

创建项目命令:scrapy startproject douban

进入项目目录:cd douban

创建爬虫程序:scrapy genspider movetop250 douban.com

1.启动程序的脚本---main.py

from scrapy import cmdlinecmdline.execute("scrapy crawl movetop250".split())

2.items.py

import scrapyclass DoubanItem(scrapy.Item):
    # 电影标题
    title = scrapy.Field()
    # 电影评分
    score = scrapy.Field()
    # 电影信息
    content = scrapy.Field()
    # 简介
    info = scrapy.Field()

3.movetop250.py

import scrapyfrom douban.items import DoubanItemclass Movetop250Spider(scrapy.Spider):
    name = 'movetop250'
    allowed_domains = ['douban.com']
    offset = 0
    url = "https://movie.douban.com/top250?start="
    start_urls = [url + str(offset)]

    def parse(self, response):
        moves = response.xpath('//div[@class="info"]')
        for move in moves:
            item = DoubanItem()
            # 电影名称
            title = move.xpath('.//span[@class="title"][1]/text()').extract()[0]
            # 点击的信息,例如导演等
            content = move.xpath('.//div[@class="bd"]/p[1]/text()').extract()[0]
            content = "".join(content).strip()
            # 评分
            score = move.xpath('.//div[@class="star"]/span[2]/text()').extract()[0]
            # 电影一句话简介
            info = move.xpath('.//span[@class="inq"]/text()').extract()

            if len(info) > 0:
                info = info[0]
            item["title"] = titleitem["content"] = contentitem["score"] = scoreitem["info"] = infoyield item# 请求每一页数据
        if self.offset < 225:
            self.offset += 25
            url = self.url + str(self.offset)
            yield scrapy.Request(url, callback=self.parse)

4.pipelines.py

import jsonimport pymongo
from scrapy.conf import settingsclass DoubanMongodbPipeline(object):
    def __init__(self):
        print("=====start=====")
        host = settings["MONGO_HOST"]
        port = settings["MONGO_PORT"]
        dbname = settings["MONGO_DBNAME"]
        sheetname = settings["MONGO_SHEETNAME"]

        print("host==", host)
        print("port==", port)
        print("dbname==", dbname)
        print("sheetname==", sheetname)

        # 创建客户端
        client = pymongo.MongoClient(host=host, port=port)
        # 得到或者创建数据库对象
        mydb = client[dbname]
        # 得到或者创建表
        self.post = mydb[sheetname]

    def process_item(self, item, spider):
        # dict_json = dict(item)
        # json_str = json.dumps(dict_json, ensure_ascii=False) + "\n"
        # self.file.write(json_str)
        dict_item = dict(item)
        self.post.insert(dict_item)
        return itemdef close_spider(self, spider):
        print("======end======")
        self.file.close()
class DoubanPipeline(object):
    def __init__(self):
        print("=====start=====")
        self.file = open("movetop250.json", "w", encoding="utf-8")

    def process_item(self, item, spider):
        dict_json = dict(item)
        json_str = json.dumps(dict_json, ensure_ascii=False) + "\n"
        self.file.write(json_str)
        return itemdef close_spider(self, spider):
        print("======close_spide======")
        self.file.close()

5.settings.py

 BOT_NAME = 'douban'

SPIDER_MODULES = ['douban.spiders']
NEWSPIDER_MODULE = 'douban.spiders'
ROBOTSTXT_OBEY = False  # 一般情况不遵循爬虫规则

DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                  ' Chrome/67.0.3396.99 Safari/537.36',
}

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

# 设置日志
LOG_FILE = "dongguan.log"
LOG_LEVEL = "DEBUG"
# 设置用户代理
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 " \"Safari/537.36"

# 配置mongodb数据库的信息
# mongo 主机
MONGO_HOST = "127.0.0.1"
# mongo 端口
MONGO_PORT = 27017
# mongo 数据存放数据库库名称
MONGO_DBNAME = "douban"
# mongo 数据存放的表名称
MONGO_SHEETNAME = "movetop250"
# Disable cookies (enabled by default)
COOKIES_ENABLED = False

路过的关注一下,你的支持是我前进的动力

转载于:https://my.oschina.net/u/3892643/blog/1845149

爬取豆瓣电影排名前250部电影并且存入Mongo数据库相关推荐

  1. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)

    今天我们来爬取一下豆瓣网上排名前250的电影. 需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里. 开发环境: python3.9 pycharm2021专业版 我们先观察网页,看看 ...

  2. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  3. python爬取豆瓣排名前250部电影封面

    话不多说,先给出网页地址豆瓣电影 Top 250,进入后我们按F12打开开发者工具查看网页信息,然后随便右键点击一张电影封面查看元素如图: 容易看出我们所需要的封面地址在img这个标签下的src属性当 ...

  4. 利用Scrapy爬取豆瓣排名前250部电影封面

    一.爬虫代码 项目目录结构: item.py文件 # -*- coding: utf-8 -*- import scrapyclass DoubanmovieItem(scrapy.Item):# t ...

  5. 爬取豆瓣电影评分前250部电影

    # 豆瓣Top250 import requests from bs4 import BeautifulSoupdef get_movie():movie_list = []headers = {'u ...

  6. python爬虫(一)爬取豆瓣电影排名前50名电影的信息

    python爬虫(一)爬取豆瓣电影排名前50名电影的信息 在Python爬虫中,我们可以使用beautifulsoup对网页进行解析. 我们可以使用它来爬取豆瓣电影排名前50名的电影的详细信息,例如排 ...

  7. 第一篇CSDN博客 python爬虫豆瓣排名前250的电影

    ## 第一篇CSDN博客 python爬虫豆瓣排名前250的电影 1.首先,这是本宝宝的第一篇博客,嘿嘿,有点小激动,之所以采用CSDN发博客呢有两个原因,1是因为现在学的东西比较多,自己学着学着就忘 ...

  8. Python语言实现用requests和正则表达式方法爬取猫眼电影排行榜前100部电影

    #爬取猫眼电影排名前100的电影 import requests #电脑向服务器发送的请求库 from requests.exceptions import RequestException impo ...

  9. 爬虫(2)-解析库xpath和beautifulsoup爬取猫眼电影排行榜前100部电影

    解析库爬取猫眼电影前100部电影 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/category_10354544.ht ...

最新文章

  1. 面试高频题:Spring和SpringMvc父子容器你能说清楚吗
  2. sql 中使用 where 1=1 和 where 1=0的作用
  3. 关于前台调用后台事件__doPostBack函数
  4. Python 面试中可能会被问到的30个问题
  5. java并发编程之美-阅读记录10
  6. leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)
  7. How is new Appoinment id generated in my task followup scenario
  8. (转)实现自己的http server
  9. linux远程画面同步,如何使VNC和Linux tty7 显示同步效果
  10. vivado下载地址和ISE下载地址
  11. 不同比例尺地形图上,典型地物的表示方法
  12. 1999.00 php,CBA20周年之1999-00赛季-前卫先合并后解散 八一5连冠
  13. 0002计算机组成原理与体系结构02
  14. python2.7安装mysqldb_python2.7安装MySQLdb库
  15. 【已解决】ThinkPad E440 Win7蓝牙无法连接
  16. 计算机毕业设计java的小区物业管理系统
  17. java解析JT808协议
  18. rangenet_lib tensorRT8.** ubuntu20.04 suma++
  19. 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记
  20. 共勉。怎么摆脱习惯性刷手机的习惯?

热门文章

  1. 傅里叶变换在图像处理中的作用
  2. 深度学习Deep learning:四十一(Dropout简单理解)
  3. 初等代数(1):数的分类、基本运算规律、乘法及其因式分解公式、公式、比例、根式
  4. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解
  5. Machine Learning week 8 quiz: programming assignment-K-Means Clustering and PCA
  6. nginx常用功能全揭秘(内附福利!!!)
  7. 【python】-- pymsql 外键
  8. hiho一下120周 后缀数组一·重复旋律
  9. DataTable的AcceptChange方法为什么不能在Update之前?
  10. ASP.NET MVC – 关于Action返回结果类型的事儿(上)