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

devtools/2024/10/24 4:27:43/

项目:豆瓣电影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.ppmy.cn/devtools/128357.html

相关文章

初学者怎么入门大语言模型(LLM)?

如果你真心想要入门大型语言模型(LLM),只看这一个文章应该是可以入门的。但是修行下去,还是要靠自己的了! 如果你把大语言模型/LLM 当成一门技术来看,那就要看一下这门技术需要什么。 基本要求&#xff1…

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…

pdf文件怎样一张纸打印四页

在日常工作和学习中,我们经常会遇到需要将PDF文件中的多页内容合并打印到一张纸上的情况,比如将四页内容打印到一张A4纸上,以节省纸张和成本。同时,在打开pdf文件的方式,一般都是通过电脑浏览器打印,因此对…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

中小型医院网站:Spring Boot开发策略

2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,…

Linux_进程终止_进程等待_进程替换

进程终止 不知道大家想过没有&#xff0c;我们写的main()函数的返回值是返回给谁的呢&#xff1f;其实是返回给父进程或者系统的。 int main() {std::cout << "hello" << std::endl;return 10; }运行该代码&#xff0c;输入hello&#xff0c;没问题&am…

Jetpack架构组件_LiveData组件

1.LiveData初识 LiveData:ViewModel管理要展示的数据&#xff08;VM层类似于原MVP中的P层&#xff09;&#xff0c;处理业务逻辑&#xff0c;比如调用服务器的登陆接口业务。通过LiveData观察者模式&#xff0c;只要数据的值发生了改变&#xff0c;就会自动通知VIEW层&#xf…

Spring Boot + Vue 前后端分离项目总结:解决 CORS 和 404 问题

Spring Boot Vue 前后端分离项目总结&#xff1a;解决 CORS 和 404 问题 在进行前后端分离的项目开发中&#xff0c;我们遇到了几个关键问题&#xff1a;跨域问题 (CORS) 和 404 路由匹配错误。以下是这些问题的详细分析和最终的解决方案。 问题描述 跨域请求被阻止 (CORS) 当…