爬取豆瓣电影排名前250部电影并且存入Mongo数据库
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数据库相关推荐
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)
今天我们来爬取一下豆瓣网上排名前250的电影. 需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里. 开发环境: python3.9 pycharm2021专业版 我们先观察网页,看看 ...
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)
在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...
- python爬取豆瓣排名前250部电影封面
话不多说,先给出网页地址豆瓣电影 Top 250,进入后我们按F12打开开发者工具查看网页信息,然后随便右键点击一张电影封面查看元素如图: 容易看出我们所需要的封面地址在img这个标签下的src属性当 ...
- 利用Scrapy爬取豆瓣排名前250部电影封面
一.爬虫代码 项目目录结构: item.py文件 # -*- coding: utf-8 -*- import scrapyclass DoubanmovieItem(scrapy.Item):# t ...
- 爬取豆瓣电影评分前250部电影
# 豆瓣Top250 import requests from bs4 import BeautifulSoupdef get_movie():movie_list = []headers = {'u ...
- python爬虫(一)爬取豆瓣电影排名前50名电影的信息
python爬虫(一)爬取豆瓣电影排名前50名电影的信息 在Python爬虫中,我们可以使用beautifulsoup对网页进行解析. 我们可以使用它来爬取豆瓣电影排名前50名的电影的详细信息,例如排 ...
- 第一篇CSDN博客 python爬虫豆瓣排名前250的电影
## 第一篇CSDN博客 python爬虫豆瓣排名前250的电影 1.首先,这是本宝宝的第一篇博客,嘿嘿,有点小激动,之所以采用CSDN发博客呢有两个原因,1是因为现在学的东西比较多,自己学着学着就忘 ...
- Python语言实现用requests和正则表达式方法爬取猫眼电影排行榜前100部电影
#爬取猫眼电影排名前100的电影 import requests #电脑向服务器发送的请求库 from requests.exceptions import RequestException impo ...
- 爬虫(2)-解析库xpath和beautifulsoup爬取猫眼电影排行榜前100部电影
解析库爬取猫眼电影前100部电影 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/category_10354544.ht ...
最新文章
- 面试高频题:Spring和SpringMvc父子容器你能说清楚吗
- sql 中使用 where 1=1 和 where 1=0的作用
- 关于前台调用后台事件__doPostBack函数
- Python 面试中可能会被问到的30个问题
- java并发编程之美-阅读记录10
- leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)
- How is new Appoinment id generated in my task followup scenario
- (转)实现自己的http server
- linux远程画面同步,如何使VNC和Linux tty7 显示同步效果
- vivado下载地址和ISE下载地址
- 不同比例尺地形图上,典型地物的表示方法
- 1999.00 php,CBA20周年之1999-00赛季-前卫先合并后解散 八一5连冠
- 0002计算机组成原理与体系结构02
- python2.7安装mysqldb_python2.7安装MySQLdb库
- 【已解决】ThinkPad E440 Win7蓝牙无法连接
- 计算机毕业设计java的小区物业管理系统
- java解析JT808协议
- rangenet_lib tensorRT8.** ubuntu20.04 suma++
- 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记
- 共勉。怎么摆脱习惯性刷手机的习惯?
热门文章
- 傅里叶变换在图像处理中的作用
- 深度学习Deep learning:四十一(Dropout简单理解)
- 初等代数(1):数的分类、基本运算规律、乘法及其因式分解公式、公式、比例、根式
- Deep Learning论文笔记之(五)CNN卷积神经网络代码理解
- Machine Learning week 8 quiz: programming assignment-K-Means Clustering and PCA
- nginx常用功能全揭秘(内附福利!!!)
- 【python】-- pymsql 外键
- hiho一下120周 后缀数组一·重复旋律
- DataTable的AcceptChange方法为什么不能在Update之前?
- ASP.NET MVC – 关于Action返回结果类型的事儿(上)