当前位置: 首页 > news >正文

scrapy案例——豆瓣电影Top250的爬取

项目:豆瓣电影Top250的爬取

案例需求:

1.使用scrapy爬虫技术爬取豆瓣电影Top250的电影数据(包括排名、电影名称、导演、演员、url、评分)

2.实现分页爬取,共十页

3.将爬取下来的数据保存在数据库中

案例分析:

1.找到正确的数据吧,并复制正确的请求url

做好准备:开启管道、关闭君子协议、伪造浏览器

ITEM_PIPELINES = {'doubanbook.pipelines.DoubanbookPipeline': 300,
}

ROBOTSTXT_OBEY = False
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'

2.解析数据:如title

    def parse(self, response):# 实例一个容器保存爬取的信息item = DoubanbookItem()# 这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定for box in response.xpath('//ol[@class="grid_view"]/li'):item['Rank'] = box.xpath('.//div[@class="pic"]/em/text()').extract()[0]item['Name'] = box.xpath('.//div[@class="info"]/div[1]/a/span[1]/text()').extract()[0].strip().replace("\n","").replace(" ", "")s = box.xpath('.//div[@class="bd"]/p/text()').extract()[0].strip().replace(" ", "")item['Author'] = s.split()[0]if len(s.split()) > 1:item['Actor'] = s.split()[1]item['Score'] = box.xpath('.//div[@class="star"]/span[2]/text()').extract()[0].strip()item['Url'] = box.xpath('.//div[@class="pic"]/a/@href').extract()yield item

items.py中

import scrapyclass DoubanbookItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()Rank = scrapy.Field()Name = scrapy.Field()Author = scrapy.Field()Actor = scrapy.Field()Score = scrapy.Field()Url = scrapy.Field()

3.获取翻页链接 

# 获取下一页的rl信息next_url = response.xpath('//span[@class="next"]/link/@href').extract()if next_url:# 将信息组合成下一页的urlpage = 'https://movie.douban.com/top250' + next_url[0]yield scrapy.Request(page, callback=self.parse)

4.保存至数据库

pipelines.py

from itemadapter import ItemAdapter
import pymysql.cursors
import pymysql
from twisted.enterprise import adbapiclass DoubanbookPipeline(object):def __init__(self):# 打开文件# 连接数据库self.conn = pymysql.connect(host='localhost',port=3306,user='root',passwd='wx990826',db='douban',)self.cur = self.conn.cursor()def process_item(self, item, spider):sqli = "insert into movie(ranks,title,author,actor,score,url) values(%s,%s,%s,%s,%s,%s)"self.cur.execute(sqli, (item['Rank'], item['Name'], item['Author'], item['Actor'], item['Score'],item['Url']))self.conn.commit()return item# 该方法在spider被开启时被调用。

运行项目:

start.py

from scrapy import cmdline
cmdline.execute(['scrapy','crawl','read','--nolog'])

运行结果:


http://www.mrgr.cn/news/54796.html

相关文章:

  • 微信小程序考试系统(lw+演示+源码+运行)
  • 人工智能:塑造未来生活与工作的力量
  • 数据库->库的操作
  • 在使用new Date()生成时间戳时,发现数据库中 的时间总是多出一秒钟。
  • 干货|react router- loader 和组件 useEffect 加载数据的选择
  • TCP/UDP 通用通信代码库(C语言实现)
  • python中堆的用法
  • Go_Parser部署、使用与原理分析
  • 操作系统学习笔记-1.2操作系统的发展历程,运行机制
  • Java NIO缓冲区与非阻塞机制详解和案例示范
  • Flink+Paimon+Hadoop+StarRocks(Doris)单机环境安装部署
  • 黑马程序员Java笔记整理(day03)
  • JavaScript数据类型的转换
  • 【纯自用】roboflow的使用
  • PyTorch 中 torch 模块介绍
  • 关于建造者模式(Builder Pattern)
  • Hadoop 安装教程——单节点模式和分布式模式配置
  • Java项目-基于springboot框架的企业客户信息反馈系统项目实战(附源码+文档)
  • 人工智能中的深度学习模型:理论与代码实现
  • 第十六周:机器学习
  • 差分题目总和
  • 【电子通识】热敏打印头的结构类型和特点
  • 第十五届蓝桥杯Java大学b组(解)
  • 股票与基金资料收集
  • 二叉树的模拟实现—Java数据结构
  • 使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程