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 scrapy


class 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:
            # 将信息组合成下一页的url
            page = '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 adbapi


class 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'])

运行结果:

相关推荐
IT毕设实战小研15 小时前
基于大数据的WTA职业网球赛事演变与竞技格局数据可视化分析
大数据·后端·爬虫·python·信息可视化·课程设计
2601_9623824316 小时前
用“爬虫”抓取小红书内容侵权吗 福建法院判明边界
爬虫·数字经济·知识产权·不正当竞争·福建法院
Mycdn_WD16 小时前
从 AI 爬虫变多了到 AI 抓取开始分流,CDN 行业进入下一阶段
人工智能·爬虫·cdn·pcdn·城域网·pcdn资源招募
该逃避避1 天前
爬虫代理配置指南:从0搭建Crawl4AI网页爬虫教程
爬虫
TechWayfarer1 天前
Cloudflare 9·15新政倒计时:用IP风险画像识别AI爬虫,防止误伤Googlebot
网络·人工智能·爬虫·python·tcp/ip·网络安全
susplus2 天前
【HTTP协议】HTTP介绍及基础【C语言爬虫实现】
c语言·爬虫·http·万维网
绘梨衣5472 天前
AI技术栈全景指南_Prompt_RAG_爬虫_MCP
人工智能·爬虫·prompt
IPdodo_2 天前
2026年爬虫代理 IP 选择指南:从可用率、延迟到成本验收
网络协议·tcp/ip·scrapy·http·https·beautifulsoup·httpx
stolentime3 天前
OpenClaw 2.0 新手快速上手与实战指南
爬虫·python·ai·网络爬虫
玫瑰互动GEO3 天前
工程视角看GEO优化与SEO优化:爬虫排序 vs 大模型引用
人工智能·爬虫·搜索引擎